Autor |
Beitrag |
fiveyears
Hält's aus hier
Beiträge: 6
|
Verfasst: Mo 04.01.10 15:24
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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
dummzeuch
      
Beiträge: 593
Erhaltene Danke: 5
Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
|
Verfasst: Fr 08.01.10 21:55
fiveyears hat folgendes geschrieben : |
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
|
|
|