HookDump
Dump des hooks de fonctions EDR
Veuillez vous référer au billet de blog Zeroperil pour plus d'informations https://zeroperil.co.uk/hookdump/
Construction du code source
- Pour compiler ce projet, vous aurez besoin de Visual Studio 2019 (l'édition Community suffit) et de CMake. Le fichier batch Configure.bat créera deux répertoires de build avec des solutions Visual Studio.
- Le projet peut compiler avec MinGW avec la bonne ligne de commande CMake, cela n'est pas testé, YMMV.
- Il y a une dépendance vers le désassembleur zydis, alors assurez-vous de mettre à jour les sous-modules dans git avant de configurer le projet.
- Il y a un projet 32 bits et 64 bits, vous pouvez constater que les EDR hookent différentes fonctions en 32/64 bits, donc compiler et exécuter les deux exécutables peut fournir des résultats plus complets.
Remarques
- Certains EDR remplacent le stub WOW dans la structure TEB (plus précisément Wow32Reserved) afin de hooker les appels système pour les binaires 32 bits. Dans ce cas, vous pouvez voir zéro hook car aucune instruction de saut n'est présente dans NTDLL. Très probablement, vous verrez des hooks dans la version x64 car l'instruction syscall est utilisée pour les appels système au lieu d'un stub WOW.
- Nous avons noté que Windows Defender n'utilise aucun hook en mode utilisateur.
- Cet outil est conçu pour être exécuté en tant qu'utilisateur standard, l'élévation n'est pas requise.
Types de hooks détectés
JMP
Une instruction de saut a été patchée dans la fonction pour rediriger le flux d'exécution
WOW
Détection du stub d'appel système WOW64 qui est hooké, ce qui permet le filtrage de tous les appels système
EAT
L'adresse dans la table d'adresses d'exportation ne correspond pas à l'adresse dans la table d'adresses d'exportation de la copie sur disque
GPA
Hook de GetProcAddress, une fonctionnalité expérimentale, ceci n'est affiché qu'en mode verbeux, lorsque le résultat de GetProcAddress ne correspond pas à l'adresse de fonction résolue manuellement. YYMV avec cela et il faut être prudent pour vérifier les résultats.
Vérification
La seule façon de vraiment vérifier le bon fonctionnement du programme est de vérifier dans un débogueur si des hooks sont présents. Si vous obtenez un résultat de zéro hook et que vous vous attendez à voir quelque chose de différent, alors vérifiez d'abord cela dans un débogueur et veuillez nous contacter.