AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Klatsch und Tratsch Blog Gastartikel: API Hooking und DLL Injection
Thema durchsuchen
Ansicht
Themen-Optionen

Blog Gastartikel: API Hooking und DLL Injection

Ein Thema von Zacherl · begonnen am 28. Sep 2010 · letzter Beitrag vom 2. Okt 2010
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

AW: Blog Gastartikel: API Hooking und DLL Injection

  Alt 2. Okt 2010, 14:55
Hmmm schwer zu sagen,
also ich lese den Text zum dritten mal, und jetzt verstehe ich auch was du vor hast Was vielleicht hilfreich wäre, was du denn ersetzt, bzw. was das für eine wirkung hast: Also zuerst tust du so als wäre der EIP deine Callback Funktion und machst ein RETN.

Aber ein paar Fragen bleiben noch übrig:
  • Wieso weiß O_MessageBoxW, dass es die echte Funktion aufrufen soll?
  • Woher hast du den Wert bei: PUSH 408662 (Callback)?
  • Woher weiß die Funktion, wo die original Methode liegt?

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: Blog Gastartikel: API Hooking und DLL Injection

  Alt 2. Okt 2010, 15: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
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Blog Gastartikel: API Hooking und DLL Injection

  Alt 2. Okt 2010, 16:11
[...]
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).
Nein ich meinte eher, irgendwo rufst du doch "MessageBox(...)" auf. Diesen Aufruf hookst du doch. Dann springst du da in den Callback mit RETN, aber dadrin kommst du doch nicht zum original Aufruf wieder zurück, oder habe ich da was übersehen?

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: Blog Gastartikel: API Hooking und DLL Injection

  Alt 2. Okt 2010, 19:53
Also das Programm ruft irgendwo ganz normal MessageBoxW auf. Durch den Hook komme ich dann zum Callback. Jetzt darf ich im Callback halt nicht die originale MessageBoxW aufrufen, da diese direkt wieder zum Callback springen würde. Deshalb rufe ich O_MessageBoxW auf, die praktisch nur das Verhalten der originalen API kopiert bzw. zu dieser hinspringt, wobei der Jump zum Callback aber übergangen wird.

Der springende Punkt ist hier die globale Variable O_MessageBoxW
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz