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
ghostrings — Scripts Ghidra pour récupérer les définitions de chaînes dans les binaires Go | Kitploit
Outils/GitHubGitHub/nccgroup/ghostrings
Analyse de CodeRétro-ingénierieAnalyse de Binaires
GitHubnccgroup/ghostrings

ghostrings

Scripts Ghidra pour récupérer les définitions de chaînes dans les binaires Go

Voir le dépôtSite web
1389il y a 8 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

Ghostrings

Scripts pour récupérer les définitions de chaînes dans les binaires Go avec l'analyse P-Code. Testé avec x86, x86-64, ARM et ARM64.

Scripts

Golang

Ils se trouvent dans la catégorie Golang du Script Manager.

  • GoDynamicStrings.java
    • Analyse le P-Code pour trouver les structures de chaînes créées sur la pile. Utilise l'analyse de style « register » de bas niveau.
  • GoFuncCallStrings.java
    • Analyse le P-Code pour trouver les structures de chaînes passées directement aux appels de fonction via les registres, sans être écrites sur la pile. Utilise l'analyse de style « normalize » avec le nouveau support Golang intégré de Ghidra (voir les notes de version de Ghidra pour les versions Golang prises en charge).
  • GoStaticStrings.java
    • Trouve les structures de chaînes Go allouées statiquement en mémoire en lecture seule.
  • GoKnownStrings.java
    • Recherche les chaînes uniques standard et les définit. Les données de chaînes sont chargées depuis data/known_strings.json.
  • GoStringFiller.java
    • Comble les lacunes dans go.string.* après l'analyse initiale, en se basant sur l'ordre croissant de longueur des données de chaînes.

Il existe également quelques variantes spéciales du script d'analyse dynamique des chaînes :

  • GoDynamicStringsSingle.java
    • Effectue la même analyse que GoDynamicStrings.java, mais utilise un seul processus de décompilateur. Utilisez-le si l'analyse d'un binaire amène les processus de décompilateur parallèles à épuiser la mémoire système.
  • GoDynamicStringsHigh.java
    • Expérimental, utilise la sortie P-Code de l'analyse de style « normalize » de plus haut niveau. Dépend actuellement d'un hack qui désactive l'élimination du code mort dans le décompilateur (voir https://research.nccgroup.com/2022/05/20/earlyremoval-in-the-conservatory-with-the-wrench/). Ce hack ne fonctionne plus dans Ghidra 10.2.

P-Code

Il se trouve dans la catégorie PCode du Script Manager.

  • PrintHighPCode.java
    • Affiche la sortie P-Code de haut niveau de la fonction actuellement sélectionnée dans la console, avec un sélecteur pour le style de simplification du décompilateur à utiliser. Principalement utilisé pour développer des scripts d'analyse P-Code.

Processus de récupération des chaînes

Voici le processus général pour utiliser ces scripts afin de récupérer les définitions de chaînes dans un binaire Go :

  1. Effacez toutes les chaînes incorrectes ou définies automatiquement dans le bloc mémoire de données en lecture seule.
    • Dans la fenêtre « Defined Strings », activez la colonne « Mem Block » et filtrez par bloc mémoire pour sélectionner toutes les chaînes dans .rodata, .rdata ou __rodata. Cliquez ensuite avec le bouton droit dans le listing du code et choisissez « Clear Code Bytes ».
  2. (Facultatif) Exécutez GoKnownStrings.java pour détecter certaines chaînes standard.
  3. Exécutez GoStaticStrings.java.
  4. Exécutez GoFuncCallStrings.java (si la version du binaire Golang est prise en charge par les fonctionnalités Golang intégrées de Ghidra).
  5. Exécutez GoDynamicStrings.java.
  6. Exécutez GoStringFiller.java.
    • S'il détecte une violation de l'ordre croissant de longueur des données de chaînes, effacez toute définition de chaîne faussement positive dans cette zone et réexécutez le script. Une option permet de le faire automatiquement.
    • Si le binaire est strippé, localisez la zone des chaînes d'un octet trouvées par le script de chaînes dynamiques. Assurez-vous qu'il s'agit du début des chaînes regroupées non terminées par un octet nul (d'autres chaînes devraient être définies ensuite avec une longueur en ordre croissant). Créez le label go.string.* sur la première chaîne d'un octet.

Mise en place

Installation

Dans Ghidra :

  1. File -> Install Extensions -> Add extension
  2. Sélectionnez le fichier ZIP de l'extension

Développement

Pour Eclipse avec le plugin GhidraDev :

  1. Clonez le dépôt
  2. File -> Import -> Projects from Folder or Archive
  3. Sélectionnez le répertoire du dépôt
  4. GhidraDev -> Link Ghidra...
  5. Sélectionnez le projet importé

Compilation

Compiler avec Eclipse :

  • GhidraDev -> Export -> Ghidra Module Extension...

Compiler directement avec Gradle :

root@kitploit:~
$ cd Ghostrings
$ gradle -PGHIDRA_INSTALL_DIR=<ghidra_install_dir>

Contexte

Un problème bien connu de la rétro-ingénierie des programmes Go est que l'absence de terminateurs nuls dans les chaînes Go rend difficile la récupération des définitions de chaînes à partir des binaires compilés. De nombreuses valeurs de chaînes constantes d'un programme Go sont stockées ensemble dans un énorme bloc du binaire compilé, sans caractères de terminaison intégrés aux données de chaînes pour marquer où une chaîne se termine et où une autre commence. Même un programme simple qui se contente d'afficher « Hello world! » contient plus de 1 500 chaînes liées au runtime Go et à d'autres bibliothèques standard. Cela peut amener les implémentations typiques de découverte de chaînes ASCII, comme celle fournie par Ghidra, à créer des définitions de chaînes faussement positives de dizaines de milliers de caractères.

Au lieu de chaînes terminées par un octet nul, Go utilise une structure de chaîne composée d'un pointeur et d'une valeur de longueur. De nombreuses structures de chaînes sont créées sur la pile du programme à l'exécution, de sorte que la récupération des emplacements de début et des valeurs de longueur de chaque chaîne nécessite l'analyse du code machine compilé. Il existe quelques scripts qui effectuent cette analyse en recherchant certains modèles d'instructions x86-64, mais ils ne détectent pas les structures créées avec des variantes d'instructions non traitées qui ont finalement le même effet sur la pile, et ils sont également limités à une ISA spécifique.

Ghostrings évite ces deux problèmes en travaillant avec les opérations P-Code simplifiées et indépendantes de l'architecture produites par l'analyse du décompilateur de Ghidra.

Informations sur la version

Copyright 2022 NCC Group. Publié sous licence GPLv3 (voir LICENSE).

Auteur principal du projet : James Chambers [email protected]

Télécharger l’outil
  • Vérifiez les lacunes restantes dans go.string.* et définissez toutes les chaînes dont les points de début et de fin sont évidents.
    • Pour tirer le meilleur parti de GoStringFiller.java, identifiez où les longueurs de chaînes changent dans les données de chaînes non définies et définissez les chaînes les plus proches de cette limite. Réexécutez ensuite GoStringFiller.java pour combler automatiquement les emplacements où il peut déterminer correctement la longueur des chaînes restantes non définies.
  • (Facultatif) Réexécutez l'outil d'analyse des chaînes ASCII intégré de Ghidra.
    • Désactivez l'écrasement des chaînes existantes. Exécutez avec puis sans l'exigence de terminateur nul.