Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   ExtTextOut oder DrawText hooken? (https://www.delphipraxis.net/152148-exttextout-oder-drawtext-hooken.html)

Quetzalcoatl 13. Jun 2010 02:04

ExtTextOut oder DrawText hooken?
 
Hallo

Ich versuche Text aus fremden Anwendungen zu lesen. Da alle letztlich wohl mit ExtTextOut oder DrawText oder sowas über die Windows Api schreiben müssen wie ich gelesen hab, müsste man die Funktionsaufrufe also abfangen.
Das scheint mit einem Hook zu gehen, nur wie?
Also ich hab jetzt jede Menge Quellcodes und beispiele zu keyloggern und so weiter gesehen und auch einigermaßen nachvollziehen können. Aber wie hooke ich eine Funktion wie ExtTextOut?
Also grundsätzlich brauch ich eine Dll die ich in die anderen prozesse injiziere und irgendwie die Funktionsaufrufe durch meine eigenen Funktionen ersetze. Aber wie? Wenn jemand noch einen Beispielcode zu einer ähnlichen Sache rumfliegen hätte wäre das auch schön ;)

vielen Dank für eure Hilfe :)

Namenloser 13. Jun 2010 02:21

AW: ExtTextOut oder DrawText hooken?
 
Beispielcode habe ich gerade keinen (auch wenn ich hier im Forum schon mal welchen gesehen habe), aber die meisten API-Funktionen haben am Anfang etwas "Dummy-Code" (mov edi, edi o.ä.), den man z.B. mit einer JMP-Operation überschreiben kann, um das Hooken zu erleichtern.
Du müsstest also im fremden Prozess einen Speicherbereich alloziieren, in den du deinen Code schreibst, die ausgeführt werden soll, und dann den Dummy-Bereich in der zu hookenden Funktion mit einem JMP- oder CALL-Befehl auf diesen Bereich überschreiben. Natürlich darf am Ende deines Codes ein Rücksprung (bzw. Return) auf den Originalcode nicht fehlen.

Eventuell wäre es noch sinnvoll, den Originalcode, der überschrieben wird, auch noch irgendwo zu sichern und wiederum innerhalb der eigenen Funktion aufzurufen, für den Fall, dass schon ein anderer Hook existiert.

idefix2 13. Jun 2010 08:31

AW: ExtTextOut oder DrawText hooken?
 
Wäre es nicht einfacher, die Objekte, in die die fremde Anwendung den Text schreibt, auszulesen?

toms 13. Jun 2010 09:10

AW: ExtTextOut oder DrawText hooken?
 
Zitat:

Zitat von Quetzalcoatl (Beitrag 1028442)
Das scheint mit einem Hook zu gehen, nur wie?

Ein (etwas älteres) Beispiel findest du in der borland.public.delphi.winapi Group

Quetzalcoatl 13. Jun 2010 13:33

AW: ExtTextOut oder DrawText hooken?
 
Hmm ich hab den Code jetzt soweit dass er ausgeführ wird. Aber es passiert nichts. Woran könnte das wieder liegen?

Namenloser 13. Jun 2010 13:46

AW: ExtTextOut oder DrawText hooken?
 
Naja, das Beispiel ist für Win95, also ein Betriebssystem, in dem sich alle Programme den gleichen Adressraum teilen. Vermutlich versucht der Code deshalb direkt an die Adresse zu schreiben, was aber unter WinNT-basierten Systemen nicht mehr funktioniert, weil hier jedes Programm seinen eigenen, virtuellen Adressraum hat. Hier musst du mit deshalb WriteProcessMemory o.ä. arbeiten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 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