AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

API Aufruf überwachen

Ein Thema von KWolf · begonnen am 30. Jan 2013 · letzter Beitrag vom 31. Jan 2013
Antwort Antwort
KWolf

Registriert seit: 22. Jun 2011
12 Beiträge
 
#1

API Aufruf überwachen

  Alt 30. Jan 2013, 10:42
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
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: API Aufruf überwachen

  Alt 30. Jan 2013, 11:01
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.
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (30. Jan 2013 um 11:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: API Aufruf überwachen

  Alt 30. Jan 2013, 14:13
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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (30. Jan 2013 um 14:15 Uhr)
  Mit Zitat antworten Zitat
KWolf

Registriert seit: 22. Jun 2011
12 Beiträge
 
#4

AW: API Aufruf überwachen

  Alt 30. Jan 2013, 15:57
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 .

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

Gruß,
KWolf
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#5

AW: API Aufruf überwachen

  Alt 31. Jan 2013, 08:10
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.
  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 15: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