![]() |
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 |
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. |
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
![]() 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. |
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 |
AW: API Aufruf überwachen
Zugegeben kommerziell, aber echt sauber:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 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 by Thomas Breitkreuz