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
CodeCut — Un plugin Ghidra pour localiser les limites des fichiers objets. | Kitploit
Outils/GitHubGitHub/jhuapl/codecut
Analyse StatiqueRétro-ingénierieAnalyse de BinairesApprentissage Automatique
GitHubjhuapl/codecut

CodeCut

Un plugin Ghidra pour localiser les limites des fichiers objets.

Voir le dépôt
131234il y a 7 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

Plugin CodeCut pour Ghidra

Plugin Ghidra pour l'interface graphique DeepCut / CodeCut

Théorie du fonctionnement

CodeCut permet à un utilisateur d'attribuer des fonctions à des fichiers objets dans Ghidra, puis d'interagir avec le binaire au niveau du fichier objet. Les fonctions sont attribuées aux fichiers objets en définissant le champ Namespace dans la base de données Ghidra. DeepCut tente d'établir les limites initiales des fichiers objets, que l'utilisateur peut ensuite ajuster à l'aide de la fenêtre du tableau CodeCut.

Pourquoi est-ce utile ?

La plupart des binaires proviennent de plusieurs fichiers de code source. Lors du reverse engineering, les analystes RE développent souvent une intuition sur les fonctions liées entre elles, et donc susceptibles d'appartenir au même fichier source. CodeCut permet à l'analyste de formuler une hypothèse comme « Je pense que ce bloc de fonctions est constitué de fonctions OS. » Désormais, s'il existe des fonctions inexplorées dans cette région, elles apparaîtront en désassemblage et en décompilation sous la forme OS::FUN_XXXXXXXX au lieu de simplement FUN_XXXXXXXX. Cela permet de comprendre plus rapidement à quoi ces fonctions peuvent servir lorsqu'on les visualise en contexte.

Installation du plugin

Suivez les procédures normales d'installation d'extension Ghidra. Copiez les archives d'extension CodeCut et DeepCut dans $GHIDRA_INSTALL_DIR/Extensions, puis dans la fenêtre principale de Ghidra sélectionnez File -> Install Extensions et cochez les cases CodeCut et DeepCut. Ghidra vous indiquera qu'il doit redémarrer. Ghidra n'exigeant désormais que les plugins correspondent aux versions majeure/mineure de la version de base et non aux versions de correctif, nous prévoyons de ne publier que des versions paires majeures/mineures.

Télécharger l’outil

REMARQUE : Après le redémarrage et le chargement d'une fenêtre CodeBrowser, Ghidra vous informera qu'il a trouvé de nouveaux plugins et vous demandera si vous souhaitez les configurer. Seul CodeCut apparaît dans cette fenêtre. Cela est dû au fait que DeepCut est un analyseur « one-shot » (il est toujours installé).

Configuration des chemins Python natifs et des dépendances Python

CodeCut et DeepCut reposent tous deux sur l'extension native PyGhidra et ne sont pas compatibles avec Jython. CodeCut utilise Python natif pour deviner les noms de modules. L'inférence du modèle DeepCut s'exécute en Python natif.

Dépendances Python natives

CodeCut :

  • nltk

DeepCut :

  • torch
  • torch-geometric
  • networkx
  • scipy

Pour installer les dépendances, exécutez :

root@kitploit:~
pip install nltk
pip install torch torch-geometric networkx scipy

en utilisant l'installation Python liée à votre PyGhidra.

Exécution de l'analyse DeepCut

DeepCut est mieux exécuté en tant qu'analyseur « one-shot » après l'auto-analyse initiale. Sélectionnez Analysis -> One Shot -> Deepcut. Après l'exécution de DeepCut, vous pouvez consulter les résultats en regardant le champ Namespace dans la vue Symbol Table.

Utilisation de CodeCut

Après l'exécution de DeepCut, vous pouvez interagir au niveau du fichier objet avec la vue CodeCut Table. Sélectionnez Window -> CodeCut Table pour afficher le tableau. Le tableau CodeCut est essentiellement un ensemble combiné de tables de symboles, une pour chaque module.

Vous pouvez demander à CodeCut de deviner les noms de modules (sur la base des références de chaînes) en choisissant Analysis -> Guess Module Names dans la fenêtre du tableau CodeCut. Cela est utile si votre exécutable cible contient beaucoup de chaînes de débogage. Le script de devinette des noms tente d'abord de trouver les noms de fichiers source, puis se rabat sur les chaînes (y compris les bigrammes et trigrammes) répétées plusieurs fois.

Vous pouvez diviser/combiner des fichiers objets en cliquant avec le bouton droit sur un objet et en choisissant Split Namespace Here / Combine Namespaces. Vous pouvez déplacer des fonctions entre fichiers objets (modifiant ainsi les limites des fichiers objets) par glisser-déposer.

Export vers du C recompilable

CodeCut contient deux options d'export d'un module complet ou d'une sous-plage d'un module en C recompilable sous le menu Export lorsque vous cliquez avec le bouton droit sur un module dans le tableau CodeCut. Cette fonctionnalité est marquée EXPÉRIMENTALE et n'est pas bien testée.

Le graphe CodeCut

CodeCut dispose désormais d'une option graphique pour visualiser les interactions / la hiérarchie des modules au sein d'un binaire. Ajoutez des espaces de noms à la vue graphique en cliquant avec le bouton droit sur une fonction dans le tableau CodeCut et en choisissant Add Namespace to Graph. Vous pouvez supprimer des modules du graphe en cliquant avec le bouton droit et en choisissant Show Namespaces in Graph Filter.

Limitations

Attention où vous cliquez

Bien qu'il semble possible de cliquer avec le bouton droit sur les noms de modules du côté droit, CodeCut prête en réalité attention à la fonction surlignée dans le tableau. Ainsi, par exemple, si vous avez une fonction dans object3 surlignée et que vous cliquez avec le bouton droit sur la case grise object2 à gauche et cliquez sur Combine/Split ou Rename Namespaces, CodeCut effectuera l'opération à partir de la fonction surlignée dans object3.

Particularités des plages d'adresses

CodeCut tente d'ordonner les espaces de noms par leur adresse de début. CodeCut peut sembler lister les modules dans le désordre ; cela est cependant généralement dû à des irrégularités de désassemblage de Ghidra. Par exemple, disons que nous avons une carte mémoire qui ressemble à :

root@kitploit:~
object2:  0x00010000 - 0x00018000
object3:  0x00018004 - 0x00020000
...
object50: 0x00480000 - 0x00480a00

Disons que la fonction à 0x00480000 effectue un branchement ou un saut vers l'adresse 0x00016008. Cela devrait être un nouveau point d'entrée de fonction, mais si une seule fonction l'utilise, Ghidra pourrait ne pas l'étiqueter comme point d'entrée de fonction et le considérer simplement comme faisant partie de FUN_00480000. Cela signifie que la plage réelle d'object50 est 0x00016008 - 0x00480a00. Ainsi, object50 apparaîtra entre object2 et object3 dans le tableau. CodeCut écrit les plages de modules dans le journal d'application de Ghidra pour faciliter le débogage de ce problème. Dans ce cas, définir 0x00016008 comme fonction fera en sorte que les limites d'object50 aient les bonnes valeurs et qu'object50 apparaisse au bon endroit dans le tableau.

Définition de fonctions ultérieurement

Les fonctions définies après l'exécution de l'analyse DeepCut sont par défaut ajoutées à l'espace de noms Global. À l'avenir, nous prévoyons d'ajouter une fonctionnalité qui les ajoutera automatiquement à l'espace de noms le plus proche, ou de fournir un mécanisme pour attribuer plus facilement des fonctions individuelles directement à un espace de noms spécifique.

Construction

Des instructions de construction spécifiques sont fournies dans les sous-dossiers DeepCut et CodeCut.