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/)
-   -   API Aufruf überwachen (https://www.delphipraxis.net/172953-api-aufruf-ueberwachen.html)

KWolf 30. Jan 2013 09:42

API Aufruf überwachen
 
Hallo Forum,

im Internet findet man diverse Tools welche API Aufrufe von fremden Prozessen mitbekommen bzw. anzeigen können. Hierbei habe ich derzeit nur Tools gefunden, bei denen der Anwender erst einen bestimmten Prozess auswählen muss der dann im weiteren Verlauf "überwacht" wird.

Ich frage mich, ob es nicht auch möglich ist eine bestimmte API grundsätzlich zu überwachen, sodass dies unabhängig vom Programm ist welches die API aufruft. Wenn ich also wissen möchte, welcher Prozess z.B. SetSystemTime aufruft, dann sollte die Funktion eben den Prozessnamen der Anwendung ausgeben, welche die API aufgerufen hat.

Sucht man nach Informationen hierzu findet man diverse Informationen bezüglich Hooks. Mir ist dies jedoch nur in Bezug auf Maus- und Tastatureingaben bekannt. Wie API Aufrufe hiermit überwacht werden können ist also noch die Frage. Vielleicht gibt es hierzu auch eine ganz andere Vorgehensweise?

Wäre schön wenn der ein oder andere einen Denkanstoss bzw. einen Link für mich hätte.

Vielen Dank!

Gruß,
KWolf

Aphton 30. Jan 2013 10:01

AW: API Aufruf überwachen
 
Jupp ist möglich wird auch bereits eingesetzt.

Stichwörter: Globale Hooks (DLL) mit API Hooks (IAT)

Edit das ganze genauer:

1. Bei einem globalen Hook wird die Hook-DLL von jedem (gleichberechtigten) Prozess, der gerade läuft oder später gestartet wird, geladen und (vor bestimmten Events) ausgeführt.

2. Ein API Hook ist ein Verfahren, bei dem z.B. über IAT-Manipulation (Import Address Table) Funktionen-adressen "verbogen" werden.
Dh du kannst die Funktion "MessageBox()" hooken und umleiten auf deine eigene Funktion, die wiederum weiß, wie die originale Funktion aufzurufen ist und sie halt je nachdem auch aufruft.

Vereinst du nun 1 und 2, so kannste global APIs belauschen!
Also in der DLL, die per SetWindowsHookEx() als globaler Hook gesetzt wird, werden beim Start die gewünschten APIs gehookt. Dadurch dass die DLL von jedem Prozess dank SetWindowHookEx() geladen wird, werden auch alle Instanzen API-gehookt.

Ist komisch zum Erklären, da man eben zwischen den 2 Hooks unterscheiden muss.

Zacherl 30. Jan 2013 13:13

AW: API Aufruf überwachen
 
Für globale Usermode Hooks eignen sich auch die AppInit_Dlls immer recht gut. Fals du es nicht selbst programmieren willst, schau dir mal das Tool APIMonitor an. Diese Software ist enorm mächtig. Ich bin mir sicher, die kann auch mehrere (oder alle Prozesse) überwachen.

Edit: Von IAT Hooks rate ich dringend ab! Am einfachsten und zuverlässigsten ist ein simpler Inline Hook. Stdcall Funktionen haben in der Regel auch genau einen 5 Byte großen Prolog, weshalb du nicht zwingend einen Length Disassembler zur Implementation der Hooks verwenden musst.

KWolf 30. Jan 2013 14:57

AW: API Aufruf überwachen
 
Hallo,

sieh an, IAT kannte ich noch nicht. Ich habe mal ein bischen gesucht und in einem anderen Forum den Hinweis gefunden, dass diese Hooks wohl abhängig von der SessionID sind. Starte ich das Programm in Session 1, würde ich also API Aufrufe, welche von Systemdiensten - und damit Session 0 - nicht mitbekommen.

Den API Monitor hatte ich auch bereits gefunden. Das Programm ist in der Tat sehr mächtig. Eine Möglichkeit sämtliche Prozesse zu überwachen hatte ich bei meinen Versuchen jedoch nicht gefunden. Da werde ich aber noch mal intensiver suchen.
Es selber lösen wäre aber natürlich die schönere Lösung 8-).

Danke jedenfalls erstmal für die Antworten!
Wenn noch jemandem etwas einfällt, immer her damit :)

Gruß,
KWolf

CCRDude 31. Jan 2013 07:10

AW: API Aufruf überwachen
 
Zugegeben kommerziell, aber echt sauber: madCodeHook. Ich hab das Hooking erst mit diversen einfachen Units aus dem Netz probiert, später mit selbstgeschriebenem Code, aber an die Stabilität von madCodeHook gerade zum Beispiel beim wiederholten Laden und Entladen der Hooks (z.B. in der Entwicklung) ist vermutlich nur seeehr schwer heranzukommen. Dazu großartiger Support.


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