API Hooking ohne Umwege
Intro Info: Windows 7 64-bit. C++. 64-bit-Anwendungen und DLLs. Haken ohne MS Umwege.
Frage: ich habe gekämpft, auf die Frage der immer ein funktionierendes Beispiel, das zeigt, Einhaken in Windows. Die meisten tuts da draußen zu haben scheinen, geschrieben worden ist, während einer Zeit, wo die 32-bit-Windows XP war das einzige Betriebssystem... ich habe seit überwindung der 64-bit-Hürden der Verständigung und injiziert eine DLL erfolgreich. Mein Nächster Schritt in dieser Reise des Wissens anschließen.
Im Einklang mit der Nostalgie des Themas, MS Umwege unterstützt keine 64-bit (kostenlos) und ich bin sicherlich nicht zahlen $10.000 für alles. So verfolgte ich die herkömmlichen Methoden in dieses tutorial.
Dieses tut ist genial, aber ich bin mit ein wenig Schwierigkeiten zu verstehen, diesem segment:
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);
}
Besonders, ich habe Mühe mit der tempJMP byte und alle memcpy geht. Ich habe eine Adresse für die InsertDate () - Funktion von Notepad, das ich will, zu entführen, aber ich bin mir nicht sicher, wo Sie wollen es... Wäre dies die Adresse der neuen Funktion? Oder ist es nicht doch relativ? Idk, ich bin gerade auf der Suche für einige Hinweise.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hotpatchable Funktionen starten Sie mit dem folgenden Befehl mov edi,edi und vorangestellt werden
5 NOP-Anweisungen (code Höhle, wenn ich mich richtig erinnere).
Wenn Sie hotpatching, die mov edi,edi ist überschrieben mit einem kurzen Sprung zur code-Höhle.
Der code cave ist auch neu geschrieben, mit einem Sprung auf Ihren hook-handler (die Funktion, wo Sie abfangen der API-Aufruf leiten es dann an die eigentliche API-Funktion).
Die ganze Idee ist, zu "überschreiben" der original-code, der ausgeführt wird, Messagebox an:
So ,
Zuerst kopiert er seinen shellcode zu JMP-array:
Dann kopiert er die original-Assembler-code-Byte aus Adresse die ursprüngliche Adresse zu seinem temporären Speicher "oldBytes", so dass er kopieren können Sie wieder nach seinem benutzerdefinierte Funktion ausgeführt wird:
Dann wird er kopiert die Adresse, die Größe, die er zuvor berechnet JMP array direkt nach dem jmp-Befehl :
Schließlich seine JMP [] - array enthält den shellcode benötigt, um seine Funktion, z.B.
so, jetzt hat er zu kopieren, die über die ursprünglichen bytes, wo das Programm erwartet, um zu finden, die original MessageBox Funktion :
Nun zu Ihrer Frage, wenn Sie wollen, um hook InsertDate() dann statt mit pOrigMBAddress können Sie die Adresse InsertDate.
Aber ich bin nicht sicher, dass dies funktioniert mit 64bit windows.