Ich habe zum testen eine dll für das Windows Spiel Solitair erstellt. Leider meldet der Injector immer, dass ein Fehler aufgetreten ist:
Ausgegeben wird sowohl, dass die dll injiziert wurde, als auch, dass sie wieder freigegeben wurde. Danach wirft der Injector einen Fehler und das Spiel stürzt (höchstwahrschenlich aufgrund eines Speicherfehlers) ab, obwohl der Pointer und die Offsets dazu mit ziemlicher Sicherheit richtig sind.
PHP Code:
#include <windows.h>
#include <iostream>
#define PROCESS "Solitaire.exe"
#define BASE_OFFSET 0x00098290
#define OFFSET_1 0x74
#define OFFSET_2 0x50
#define OFFSET_3 0x74
#define OFFSET_4 0x90
using namespace std;
DWORD WINAPI writeMemory(LPVOID lpParam)
{
UINT* Adress = reinterpret_cast<UINT*>(GetModuleHandle(PROCESS) + BASE_OFFSET);
Adress = reinterpret_cast<UINT*>(*Adress + OFFSET_1);
Adress = reinterpret_cast<UINT*>(*Adress + OFFSET_2);
Adress = reinterpret_cast<UINT*>(*Adress + OFFSET_3);
Adress = reinterpret_cast<UINT*>(*Adress + OFFSET_4);
*Adress = 100;
return 0;
}
BOOL WINAPI DllMain (HINSTANCE hModule, DWORD dwAttached, LPVOID lpvReserved)
{
if (dwAttached == DLL_PROCESS_ATTACH)
{
MessageBox(0, "Die dll wurde erfolgreich injiziert", "Erfolg", 1);
CreateThread(NULL ,0, &writeMemory, NULL, 0, NULL);
WaitForSingleObject(HANDLE(writeMemory), NULL);
}
else if (dwAttached == DLL_PROCESS_DETACH)
{
MessageBox(0, "Die dll wurde erfolgreich wieder freigegeben", "Erfolg", 1);
return 0;
}
}