Nun, hooks funktionieren nach folgendem Schema:
- es wird entweder rein auf korrektem Wege per SetWindowsHookEx() global (
Dll) gehookt -- hier können aber nur vorgegebene Sachen abgefangen werden
- oder, die vorige Methode wird verwendet, um eine
Dll in den Adressraum aller anderen Prozesse zu laden (SetWindowHookEx() macht das) damit
anschließend folgende Art von (dirty) Hook gesetzt werden kann:
-- IAT/EAT Hook (Address Table Hook)
-- Code Patching (wie der Namenlozer bereits geschrieben hat)
Was du nun machen kannst, als Hotfix, ist, zunächst einmal rausfinden, um was für Art von Hook es sich handelt - es ist entweder
IAT oder Code Patching (das sind die gängigsten)
Wenn IAT:
- die Adresse, die in der Import Table steht, ist "modifiziert" - deine Aufgabe ist es, iwie rauszufinden, wo sie sich wirklich befindet
dafür kannst du mal die hookende Anwendung terminieren, deine App normal starten und per GetProcessAddress() die korrekte Adresse ermitteln (sie liefert die modifizierte beim IAT Hook)
Wenn Code Patching:
- kann schnell erkannt werden, da die Stackframe Generierung überschrieben wurde (meisten mit einem absoluten jmp)
Siehst du soetwas, einfach zurückpatchen -- 0815 Stackframegenerirung reinschreiben
Also im Grunde müsstest du dann für deine Anwendung vom dirty Hook säubern!
Achja, noch etwas damit du nicht verzweifelst -- wenn die Hookende Anwendung beim Terminieren nicht ordentlich aufräumt bzw nicht den globalen Hook löscht, wird Windows weiterhin bei jedem Prozess den Hook laden (was ja nur ne
Dll ist) - auch wenn die Anwendung geschlossen ist! Das kann verwirrend sein