Einführende Informationen: Windows 7 64-Bit. C++. 64-Bit-Anwendungen und DLLs. Hooking ohne MS Umwege.
Frage: Ich habe mit dem Problem gekämpft, ein funktionierendes Beispiel zu finden, das das Hooking in Windows demonstriert. Die meisten Tuts da draußen scheinen zu einer Zeit geschrieben worden zu sein, in der 32-Bit Windows XP das einzige Betriebssystem war... Inzwischen habe ich die 64-Bit-Hürden des Verständnisses überwunden und eine DLL erfolgreich injiziert. Mein nächster Schritt auf dieser Reise des Wissens ist das Hooking. Um der Nostalgie des Themas gerecht zu werden, unterstützt MS's Detours keine 64-Bit (kostenlos) und ich zahle sicherlich keine 10.000 Dollar für irgendetwas. Also verfolgte ich die konventionellen Methoden in diese Anleitung .
Dieses Tutorial ist großartig, aber ich habe ein paar Schwierigkeiten, diesen Abschnitt zu verstehen:
void BeginRedirect(LPVOID newFunction)
{
BYTE tempJMP[SIZE] = {0xE9, 0x90, 0x90, 0x90, 0x90, 0xC3};
memcpy(JMP, tempJMP, SIZE);
DWORD JMPSize = ((DWORD)newFunction - (DWORD)pOrigMBAddress - 5);
VirtualProtect((LPVOID)pOrigMBAddress, SIZE,
PAGE_EXECUTE_READWRITE, &oldProtect);
memcpy(oldBytes, pOrigMBAddress, SIZE);
memcpy(&JMP[1], &JMPSize, 4);
memcpy(pOrigMBAddress, JMP, SIZE);
VirtualProtect((LPVOID)pOrigMBAddress, SIZE, oldProtect, NULL);
}
Insbesondere kämpfe ich mit dem tempJMP-Byte und all den memcpy gehen auf. Ich habe eine Adresse für die Funktion InsertDate() von Notepad, die ich entführen möchte, aber ich bin nicht sicher, wohin ich sie richten soll... Wäre dies die Adresse der neuen Funktion? Oder ist sie nicht relativ? Ich weiß nicht, ich bin nur auf der Suche nach einigen Hinweisen.