Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
obfuscation_detection — Plugin Binary Ninja pour identifier le code obfusqué et d'autres constructions de code intéressantes. | Kitploit
Outils/GitHubGitHub/mrphrazer/obfuscation_detection
Analyse StatiqueRétro-ingénierieAnalyse de MalwareAnalyse de BinairesAnalyse de Micrologiciel
GitHubmrphrazer/obfuscation_detection

obfuscation_detection

Plugin Binary Ninja pour identifier le code obfusqué et d'autres constructions de code intéressantes.

Voir le dépôt
67274il y a 3 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Obfuscation Detection (v2.4)

Auteur : Tim Blazytko

Détecte automatiquement le code obfusqué et d'autres constructions de code intéressantes

Description :

Obfuscation Detection est un plugin Binary Ninja pour détecter le code obfusqué et les constructions de code intéressantes (par exemple, les machines à états) dans les binaires. Étant donné un binaire, le plugin facilite l'analyse en identifiant les emplacements de code qui pourraient mériter un examen plus approfondi lors du rétro-ingénierie.

Basé sur diverses heuristiques, le plugin repère les fonctions qui contiennent des constructions de code complexes ou inhabituelles. Ces constructions de code peuvent implémenter :

  • du code obfusqué
  • des machines à états et des protocoles
  • des communications avec un serveur C&C
  • des routines de déchiffrement de chaînes
  • des algorithmes cryptographiques

Les articles de blog suivants fournissent plus d'informations sur les heuristiques sous-jacentes et montrent leurs cas d'utilisation :

  • Détection automatisée de l'aplatissement du flux de contrôle
  • Détection automatisée de code obfusqué
  • Analyse statistique pour détecter du code inhabituel
  • Identification des fonctions API dans les binaires

Quelques exemples d'utilisation se trouvent dans examples. De plus, la conférence REcon "Unveiling Secrets in Binaries using Code Detection Strategies" montre quelques cas d'utilisation. Les diapositives sont disponibles ici ; l'enregistrement est disponible ici.

Fonctionnalités principales

  • identifie les constructions de code intéressantes dans les gros binaires
  • met en évidence les instructions désalignées dans la vue graphique de Binary Ninja
  • implémentation efficace et indépendante de l'architecture
  • s'exécute en tâche de fond
  • étiquette automatiquement les fonctions identifiées avec l'heuristique ou l'utilitaire correspondant
  • peut être utilisé en mode interface utilisateur et en mode sans tête (headless)

Installation

L'outil peut être installé via le gestionnaire de plugins de Binary Ninja.

Pour la version sans tête, suivez ces étapes :

root@kitploit:~
git clone https://github.com/mrphrazer/obfuscation_detection.git
cd obfuscation_detection

# installer obfuscation_detection
pip install .

Utilisation

Le plugin peut être utilisé dans l'interface utilisateur et en mode sans tête.

Interface utilisateur

Choisissez Plugins -> Obfuscation Detection pour exécuter des heuristiques individuelles, ou Plugins -> Obfuscation Detection -> Utils pour exécuter des détections d'utilitaires individuelles. La commande Plugins -> Obfuscation Detection -> All exécute toutes les heuristiques et tous les utilitaires ensemble.

Menu du plugin

Les résultats sont affichés dans la fenêtre de journal :

Journal de Binary Ninja

En cliquant sur les adresses de fonction identifiées, Binary Ninja navigue vers la fonction sélectionnée.

Mode sans tête

Pour utiliser le plugin en mode sans tête, exécutez scripts/detect_obfuscation.py :

root@kitploit:~
$ python3 scripts/detect_obfuscation.py <binaire>

Ceci exécute toutes les heuristiques et tous les utilitaires. Pour une sortie lisible par machine, passez --json :

root@kitploit:~
$ python3 scripts/detect_obfuscation.py --json <binaire>

Le payload JSON contient tous les résultats sous la clé detections. Chaque détection possède un id stable pour l'automatisation et un name lisible par l'humain. Chaque résultat de fonction étiquetée inclut le type d'étiquette et la description utilisés par le plugin Binary Ninja.

Pour exécuter uniquement l'heuristique de machine à état en mode sans tête, utilisez scripts/detect_state_machine.py :

root@kitploit:~
$ python3 scripts/detect_state_machine.py [--json] <binaire>

Heuristiques de détection

Le plugin implémente diverses heuristiques de détection pour détecter différentes constructions de code. Dans ce qui suit, nous décrivons brièvement chaque heuristique et expliquons son utilisation.

Bloc de base volumineux

L'heuristique du bloc de base volumineux identifie les 10 % supérieurs des fonctions ayant le plus grand nombre moyen d'instructions par bloc de base. Elle permet de détecter :

  • le code déroulé
  • les implémentations cryptographiques
  • les routines d'initialisation
  • l'obfuscation arithmétique / l'arithmétique booléenne mixte (Mixed Boolean-Arithmetic)

Fonction complexe

L'heuristique de fonction complexe identifie les 10 % supérieurs des fonctions ayant les graphes de flux de contrôle les plus complexes (basés sur la complexité cyclomatique). Elle permet d'identifier :

  • les routines de répartition complexes et les protocoles
  • les machines à états
  • les fonctions obfusquées avec des prédicats opaques

Machine à état

L'heuristique de machine à état utilise des propriétés de théorie des graphes pour identifier les fonctions implémentant des machines à états. Généralement, ces machines à états peuvent être représentées comme des instructions switch dispatchées dans une boucle. L'heuristique permet d'identifier :

  • la répartition de protocoles réseau
  • la logique d'analyse de fichiers
  • la communication avec un serveur C&C / la répartition de commandes
  • l'aplatissement du flux de contrôle

Séquence d'instructions inhabituelle

L'heuristique de séquence d'instructions inhabituelle effectue une analyse statistique pour identifier les 10 % supérieurs des fonctions dont les motifs de code s'écartent d'une vérité de terrain précalculée. Ainsi, l'heuristique permet d'identifier :

  • les implémentations cryptographiques
  • l'utilisation intensive de l'arithmétique à virgule flottante
  • l'obfuscation arithmétique / l'arithmétique booléenne mixte
  • les motifs d'obfuscation génériques

Instruction chevauchante

L'heuristique d'instruction chevauchante identifie les fonctions avec des instructions désalignées (les octets d'instruction sont partagés par deux instructions différentes). L'heuristique identifie :

  • le désassemblage cassé (par exemple, des données marquées comme du code)
  • les prédicats opaques qui sautent dans d'autres instructions

Si l'heuristique est utilisée dans l'interface utilisateur de Binary Ninja, les instructions chevauchantes sont également mises en évidence dans la vue graphique.

Fonction la plus appelée

L'heuristique de la fonction la plus appelée identifie les 10 % supérieurs des fonctions ayant le plus grand nombre d'appels provenant de différentes fonctions. Ainsi, l'heuristique peut identifier :

  • les routines de déchiffrement de chaînes
  • les fonctions de bibliothèque dans les binaires liés statiquement

Fréquence de boucle

L'heuristique identifie les fonctions avec un nombre élevé de boucles. Ces types de fonctions peuvent implémenter :

  • une logique d'analyse complexe pour les formats de données structurés
  • des calculs algorithmiques intensifs

L'heuristique aide également à cibler les goulots d'étranglement potentiels de performance.

Boucle irréductible

L'heuristique identifie les fonctions avec des structures de boucles rares et complexes qui suggèrent généralement :

  • des optimisations agressives du compilateur
  • du code assembleur écrit à la main
  • l'utilisation de déclarations goto
  • du code obfusqué

Boucle de déchiffrement XOR

L'heuristique identifie les fonctions qui effectuent une opération XOR avec une constante à l'intérieur d'une boucle. Ainsi, l'heuristique peut identifier :

  • les routines de déchiffrement de chaînes
  • les stubs de déchiffrement de code
  • les implémentations cryptographiques

Expression arithmétique complexe

L'heuristique identifie les fonctions dans lesquelles les expressions ont plus d'une opération arithmétique et une opération booléenne simultanément. Ainsi, l'heuristique peut identifier :

  • l'obfuscation arithmétique booléenne mixte
  • les routines d'initialisation
  • les implémentations cryptographiques

Sous-graphe dupliqué

L'heuristique utilise une approche de hachage de contexte itératif pour détecter des structures multi-blocs répétées dans le graphe de flux de contrôle de chaque fonction. En comparant la signature opcode de chaque bloc ainsi que les signatures de ses successeurs, l'heuristique identifie les sous-graphes dupliqués ou presque dupliqués dans une seule fonction. Cela aide à repérer :

  • les stubs d'obfuscation tels que les petites machines à états ou les blocs de répartition clonés plusieurs fois
  • les boucles déroulées ou inlineées introduites par les optimisations du compilateur
  • la logique de branchement multi-voies comme les diviseurs de plage et les arbres de décision
  • les stubs cryptographiques ou de vérification de somme de contrôle répétés

Utilitaires

Le plugin inclut également des utilitaires plus ciblés pour des fonctions et régions de code intéressantes. Ils restent disponibles sous le sous-menu Utils ; la commande All les exécute avec les heuristiques plus larges.

Fonction d'entrée

Cet utilitaire identifie les fonctions sans appelants connus. Ces fonctions peuvent être :

  • des points d'entrée dans le binaire
  • des cibles de sauts indirects où la hiérarchie des appels n'a pas pu être reconstituée par le désassembleur

Fonction feuille

Cet utilitaire identifie les fonctions qui n'appellent pas d'autres fonctions. Ces types de fonctions peuvent, par exemple, être des fonctions qui :

  • sont délinéarisées par le compilateur pour implémenter des fonctionnalités utilisées à divers endroits du code
  • sont des trampolines vers d'autres fonctions
  • font partie de schémas d'obfuscation de code (par exemple, des calculs délinéarisés pour l'obfuscation du flux de contrôle)

Fonction récursive

Cet utilitaire identifie les fonctions récursives — des fonctions qui s'appellent elles-mêmes directement ou indirectement. Les fonctions récursives peuvent indiquer :

  • des implémentations algorithmiques telles que le parcours d'arbres ou de graphes
  • du code obfusqué conçu pour compliquer l'analyse statique
  • des implémentations d'algorithmes mathématiques ou de routines d'analyse complexes
  • des vulnérabilités potentielles de débordement de pile dues à une récursion profonde

Entropie de section

Cet utilitaire évalue l'entropie de chaque section. L'entropie est une mesure statistique de l'aléatoire avec des valeurs comprises entre 0 et 8. Les sections avec une entropie proche de 8 indiquent un degré élevé d'aléatoire et peuvent suggérer :

  • du code compressé ou empaqueté
  • des données ou du code chiffrés
  • des données aléatoires

RC4

Cet utilitaire détecte les implémentations potentielles de l'algorithme RC4 en utilisant des marqueurs heuristiques typiquement associés à l'algorithme de planification des clés (KSA) et à l'algorithme de génération pseudo-aléatoire (PRGA) de RC4. RC4 est largement utilisé dans les logiciels malveillants à des fins telles que :

  • le déchiffrement de chaînes et d'autres charges utiles de données
  • l'obfuscation des communications de commande et de contrôle (C&C)

Contact

Pour plus d'informations, contactez @mr_phrazer.

Télécharger l’outil