Ich versuche gerade anhand
Wikieintrages eine Detourfunktion zu schreiben. Leider scheitert das ganze an der Funktion WriteProcessMemory, welche die Bytes meines Integers (ein Sprungoffset) in der falschen Reihenfolge in den Speicher schreibt.Das stumpfsinnige ist ...
a) ..., dass ich diese Funktion schon mal mit dem Tutorial geschrieben habe.
b) ..., dass es mit dem dem MinGW-Compiler funktioniert. Nur leider schafft der es nicht injectbare Dll's zu kompillieren.
Das Programm, was ich zum Testen benutze findet ihr im Anhang.
hier der Dll-Code:
PHP Code:
#include <windows.h>
#include <iostream>
//==========================>
unsigned int sprungoffset(unsigned int victim_address, unsigned int new_address)
{
victim_address += 5;
return new_address - victim_address;
}
void hook_function(unsigned int old_address, unsigned int new_address)
{
HANDLE hProc;
unsigned int sprungweg;
unsigned char sprung_byte = 0xE9, byte;
DWORD rw = 0;
//=========================>
sprungweg = sprungoffset(old_address, new_address);
printf("sprungweg = 0x%x\n", sprungweg);
hProc = OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessId());
WriteProcessMemory(hProc, (LPVOID)old_address, &sprung_byte, sizeof(sprung_byte), &rw);
old_address++; //um 1 Byte erhöhen
WriteProcessMemory(hProc, (LPVOID)old_address, &sprungweg, sizeof(sprungweg), &rw); //Hier
//ist der Fehler
CloseHandle(hProc);
}
void good()
{
printf("good\n");
}
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
hook_function((unsigned int)0x401318, (unsigned int)0x6c3a1530);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
PS: Hoffentlich ist das nicht son billiger Anfängerfehler. Ich habe mehr als 2 Stunden an dem Problem gesessen -.-






