Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: Blog Gastartikel: API Hooking und DLL Injection

  Alt 2. Okt 2010, 16:44
Wieso weiß O_MessageBoxW, dass es die echte Funktion aufrufen soll?
O_MessageBoxW zeigt ja auf einen neuen Buffer, den ich in der HookCodeInline Funktion alloziiere. Am Anfang dieses Buffers stehen zuerst die überschriebenen Originalinstructions (sonst würde die MessageBoxW Funktion ja nicht mehr vollständig funktionieren) und danach ein Sprung zur Originaladresse in der kernel32.dll. Hierbei werden die schon ausgeführten Instructions natürlich übersprungen, sodass wir praktisch bei MessageBoxW + 6 Bytes landen. Ruft man also O_MessageBoxW aus, wird unser Sprung zum Callback übersprungen und praktisch nur der original API Code ausgeführt.

Woher hast du den Wert bei: PUSH 408662 (Callback)?
In unserem Programm haben wir ja die Callback Funktion deklariert, welche an einer bestimmten Adresse im Speicher liegt. Diese Adresse hole ich mir mit Cardinal(@C_MessageBoxW) und schreibe sie dann ins PUSH.

Woher weiß die Funktion, wo die original Methode liegt?
Die original API bekommt man ja über GetProcAddress(LoadLibrary('kernel32.dll'), 'MessageBoxW'). Im Buffer von O_MessageBoxW befindet sich dann wie schon erwähnt der Jump zur Originaladresse (+ die Anzahl der schon überschriebenen / ausgeführten Bytes).
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat