Entwickler-Ecke

Windows API - Hook-Verständnisproblem


fiveyears - Mo 04.01.10 15:24
Titel: Hook-Verständnisproblem
Hallo,

ich habe mehrere Threads gelesen, z. B. über CompareStringA und wie ich die Funktion durch einen Hook verändern kann, ist mir alles klar. Nun mein Problem, muss ich meinem Programm, welches jetzt die gehookte Kernel32.dll-Funktion nehmen soll, dies noch explizit sagen oder greift jetzt jedes Programm auf die gehookte Funktion zu, bis ich wieder enthooke - dies ist mir noch unklar irgendwie.

Irgendwie ein kurzes Beispiel wäre toll.


Danke fiveyears


fiveyears - Mo 04.01.10 17:52

Hallo,

ich muss mir mal selbst antworten:

Ich habe das Prinzip nun verstanden: der hook besteht aus einer DLL, die den Code umbiegt, einem Injector, der den Zielprozess mit der DLL verbindet und das war es, dass es so einfach ist, hätte ich nicht gedacht, aber es funktioniert.

Gruß fiveyears


BenBE - Fr 08.01.10 21:26

Zum Thema, wo der Hook genutzt wird:

Unter Windows 9x: Bei Hooks auf DLLs oberhalb der 0x8000000 jedes Programm, weshalb dort auch die neue Funktion in diesem Adressbereich des Kernels liegen muss.

Bei Windows NT-basierten (also eigentlich alle aktuellen): Nur der Prozess in dem injected wurde. In der Regel also der eigene oder der spezifisch injectedte Prozess.

Man kann zwar unter NT auch auf Kernel-Ebene hooken (dann wäre's wieder global), dazu bedarf es dann aber schon einer Reihe von Vorkehrungen, damit das sinnvoll geht.


dummzeuch - Fr 08.01.10 21:55

user profile iconfiveyears hat folgendes geschrieben Zum zitierten Posting springen:

Ich habe das Prinzip nun verstanden: der hook besteht aus einer DLL, die den Code umbiegt, einem Injector, der den Zielprozess mit der DLL verbindet und das war es, dass es so einfach ist, hätte ich nicht gedacht, aber es funktioniert.


Richtig, wenn man den Source fuer das Zielprogramm nicht aendern kann oder will.

Ansonsten ist es viel einfacher, denn dann kann man den Hook direkt im Quelltext installieren und kann sich sowohl DLL als auch Injektor sparen (Ja, das macht Sinn: Man will ja nicht alle Aufrufe einer Windows-API in allen Bibliotheken ersetzen).

Das Gleiche gilt auch, wenn man API-Aufrufe einer benutzten DLL umbiegen will, auch dann kann sowohl der Hook als auch dessen Installation im Hauptprogramm erfolgen.

twm