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 Zacherl
Zacherl

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

Blog Gastartikel: API Hooking und DLL Injection

  Alt 28. Sep 2010, 02:40
Hey,

ich habe gestern und heute 2 kleine Gastartikel in einem Blog verfasst. Gehalten sind beide Beiträge im Tutorial-Stil, um (hoffentlich) auch Anfängern in diesem Bereich einen einfachen Einstieg zu ermöglichen.

Fals ihr Lust habt und euch das Thema interessiert, könnt ihr die Artikel ja mal überfliegen und mir evenutell hilfreiche Tipps und Tricks zukommen lassen. Blogging und Verfassen von Tutorials sind absolutes Neuland für mich, also seid nachsichtig mit mir

http://opcodez.wordpress.com/2010/09...ing-die-erste/
http://opcodez.wordpress.com/2010/09...king-teil-1-5/

Geplant sind zwei weitere Artikel zum Thema Exception Hooking (wird vom Blogbesitzer verfasst) und Hardware Breakpoint Hooks.

Viele Grüße
Zacherl
  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 30. Sep 2010, 19:37
Ich nutze die Gelegenheit mal zum pushen:
http://opcodez.wordpress.com/2010/09...it-exceptions/
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Blog Gastartikel: API Hooking und DLL Injection

  Alt 1. Okt 2010, 20:39
Danke. Wird es davon einmal eine PDF geben?
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  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, 03:53
Ich überlege mir später eine kleine Tutorial-Serie rauszumachen, wenn die Artikel gut ankommen. Dann würde ich das ganze natürlich auch als PDF zur Verfügung stellen.
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
 
#5

AW: Blog Gastartikel: API Hooking und DLL Injection

  Alt 2. Okt 2010, 09:08
Moin, also ich muss ehrlich sagen das der erste Artikel nicht sehr verständlich ist. Das mag damit zusammen hängen das ich nicht sehr viel mit Assembler zu tun hatte (bisher nur ein Semester MIPS).

Ich bin eben etwas verwirrt welche Befehle wie veränderst.

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
 
#6

AW: Blog Gastartikel: API Hooking und DLL Injection

  Alt 2. Okt 2010, 14:34
Danke schonmal für dein Feedback

Verstehst du den Abschnitt im Code nicht oder die Erklärung der Assembler Codes vom MessageBoxW Ausschnitt? Bei Letzterem wird ja eigentlich nur ein PUSH %adresse% und ein RET ganz an den Anfang der API geschrieben.
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
 
#7

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
 
#8

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
 
#9

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
 
#10

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 06:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz