T
Tigerass 2.0
Gast
Hallo,
Ich beschäftige mich zurzeit näher mit detours. Unter 32 bit kein Problem,
jedoch habe ich jetzt eine 64bit Anwendung, bei welcher meine Methode nicht mehr funktioniert. Hoffe ihr könnt mir ein paar Tipps geben,
vll. kennt sich da ja jemand von euch aus.
Hier meine x86 Version:
Beispiel zur Anwendung:
LG Tigerass
Ich beschäftige mich zurzeit näher mit detours. Unter 32 bit kein Problem,
jedoch habe ich jetzt eine 64bit Anwendung, bei welcher meine Methode nicht mehr funktioniert. Hoffe ihr könnt mir ein paar Tipps geben,
vll. kennt sich da ja jemand von euch aus.
Hier meine x86 Version:
Code:
void DetourFunc32(BYTE *ursprung, const BYTE *ziel)
{
BYTE b[] = {0xE9, 0x90, 0x90, 0x90, 0x90};//JMP | Adresse
BYTE *jmp = (BYTE*)malloc(5+sizeof(b));
DWORD dwback;
VirtualProtect(ursprung, sizeof(b), PAGE_READWRITE, &dwback);
memcpy(jmp, ursprung, sizeof(b));
jmp += sizeof(b);
*(DWORD*)(b+1) = (DWORD)(ursprung+5 - jmp) - sizeof(b);
memcpy(jmp, b, sizeof(b));
*(DWORD*)(b+1) = (DWORD)(ziel - ursprung) - sizeof(b);
memcpy(ursprung, b, sizeof(b));
VirtualProtect(ursprung, sizeof(b), dwback, &dwback);
}
Beispiel zur Anwendung:
Code:
void func(void)
{
MessageBoxA(NULL, "test", "test", MB_OK);
}
int __stdcall _MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
{
return MessageBoxW(NULL, L"detour", L"detour", MB_OK); //MessageBoxW damit kein Overflow
}
int main(int argc, char* argv[])
{
func();
DetourFunc32((BYTE*)GetProcAddress(LoadLibrary("USER32.DLL"),"MessageBoxA"), (BYTE*)_MessageBoxA);
func();
system("pause");
return 0;
}
LG Tigerass