HookDump
Auslesen von EDR-Funktions-Hooks
Weitere Informationen finden Sie im Zeroperil-Blogbeitrag unter https://zeroperil.co.uk/hookdump/
Quellcode erstellen
- Um dies zu erstellen, benötigen Sie Visual Studio 2019 (Community Edition ist in Ordnung) und CMake. Die Batchdatei Configure.bat erstellt zwei Build-Verzeichnisse mit Visual Studio-Projektmappen.
- Das Projekt lässt sich möglicherweise mit der richtigen CMake-Befehlszeile mit MinGW erstellen, dies ist ungetestet, YMMV.
- Es besteht eine Abhängigkeit vom zydis-Disassembler. Stellen Sie daher sicher, dass Sie die Untermodule in Git aktualisieren, bevor Sie das Projekt konfigurieren.
- Es gibt ein 32-Bit- und ein 64-Bit-Projekt. Sie werden möglicherweise feststellen, dass EDRs in 32/64 Bit unterschiedliche Funktionen hooken, sodass das Erstellen und Ausführen beider ausführbaren Dateien vollständigere Ergebnisse liefern kann.
Hinweise
- Einige EDRs ersetzen den WOW-Stub in der TEB-Struktur (insbesondere Wow32Reserved), um Systemaufrufe für 32-Bit-Binärdateien zu hooken. In diesem Fall werden möglicherweise keine Hooks angezeigt, da in NTDLL keine Sprungbefehle vorhanden sind. Höchstwahrscheinlich werden Sie Hooks in der x64-Version sehen, da dort der Syscall-Befehl anstelle eines WOW-Stubs für Systemaufrufe verwendet wird.
- Wir haben festgestellt, dass Windows Defender keine Benutzermodus-Hooks verwendet.
- Dieses Tool wurde für die Ausführung als Standardbenutzer entwickelt, eine Erhöhung der Berechtigungen ist nicht erforderlich.
Erkannte Hook-Typen
JMP
Ein Sprungbefehl wurde in die Funktion eingefügt, um den Ausführungsfluss umzuleiten.
WOW
Erkennung, dass der WOW64-Syscall-Stub gehooked wurde, was das Filtern aller Systemaufrufe ermöglicht.
EAT
Die Adresse in der Exportadresstabelle stimmt nicht mit der Adresse in der Exportadresstabelle der Kopie auf der Festplatte überein.
GPA
GetProcAddress-Hook, eine experimentelle Funktion. Diese wird nur im ausführlichen Modus ausgegeben, wenn das Ergebnis von GetProcAddress nicht mit der manuell aufgelösten Funktionsadresse übereinstimmt. YYMV damit, und es sollte etwas Sorgfalt aufgewendet werden, um die Ergebnisse zu überprüfen.
Überprüfung
Die einzige Möglichkeit, die korrekte Funktion des Programms wirklich zu überprüfen, besteht darin, in einem Debugger zu prüfen, ob Hooks vorhanden sind. Wenn Sie ein Ergebnis mit null Hooks erhalten und etwas anderes erwarten, überprüfen Sie dies bitte zuerst in einem Debugger und nehmen Sie Kontakt auf.