REV Outil · Reverse engineering

Ghidra

Décompiler et annoter un binaire avec Ghidra, en GUI ou en mode headless.

Intermédiaire / 1 min de lecture / maj 02 nov 2026 / 4 tags
raw domaine signaler
Index des sheets

#Workflow GUI

text
1. New Project → Non-Shared Project
2. File → Import File → sélectionner le binaire
3. Double-cliquer → Analyze (options par défaut)
4. Accepter l'analyse automatique
5. Ouvrir le Decompiler (Ctrl+E)
Raccourci Action
Ctrl+E Decompiler
Ctrl+Shift+E Listing / désassemblage
G Aller à une adresse
Ctrl+Shift+F Rechercher
Ctrl+L Renommer
Ctrl+Shift+G Xrefs
Ctrl+Alt+B Breakpoint (debugger)

#Annoter efficacement

  • Renomme FUN_00401234 en check_password dès que tu comprends son rôle.
  • Applique des types aux variables (int, char *, structures) : le decompiler devient lisible.
  • Utilise Edit → Comments pour garder une trace de l'analyse.
  • Les xrefs (Ctrl+Shift+G) révèlent qui appelle une fonction critique.
  • Search → For Strings puis xrefs : le chemin le plus court vers la logique.

#Décompiler

c
// Exemple typique après renommage
undefined8 check_password(char *input) {
  if (strlen(input) != 12) return 0;
  if (memcmp(input, &DAT_00402010, 12) == 0) return 1;
  return 0;
}

#Headless

bash
# Analyse automatique sans GUI
$GHIDRA_HOME/support/analyzeHeadless /tmp/ghidra-project MyProject \
  -import ./binary -postScript decompile.py -scriptPath ./scripts \
  -deleteProject
python
# decompile.py — exporter le pseudo-code de toutes les fonctions
from ghidra.app.decompiler import DecompInterface
from ghidra.util.task import ConsoleTaskMonitor

decompiler = DecompInterface()
decompiler.openProgram(currentProgram)
monitor = ConsoleTaskMonitor()

for function in currentProgram.getFunctionManager().getFunctions(True):
    result = decompiler.decompileFunction(function, 60, monitor)
    if result.decompileCompleted():
        print(f"// {function.getName()}")
        print(result.getDecompiledFunction().getC())

#Scripting

python
# Chercher une chaîne et ses xrefs
from ghidra.program.model.symbol import RefType

target = "Correct password"
listing = currentProgram.getListing()
for data in listing.getDefinedData(True):
    value = data.getValue()
    if value is not None and target in str(value):
        print("string at", data.getAddress())
        for ref in getReferencesTo(data.getAddress()):
            print("  xref from", ref.getFromAddress())

#Diff et firmware

text
File → Version Tracking → Add Session
Ajouter deux versions du binaire, créer des corrélations
Utile pour repérer les correctifs et les backdoors ajoutées
bash
# Firmware : extraire d'abord les composants (binwalk)
binwalk -e firmware.bin
# Puis importer chaque ELF / binaire extrait dans Ghidra
INDEX // 42 FICHES // 12 DOMAINES LOCAL SEARCH
↑↓ naviguer ↵ ouvrir esc fermer sheet.sec / find
Raccourcis clavier
Recherche globale /ou⌘K
Naviguer dans les résultats ↑↓
Ouvrir le résultat actif ↵
Fermer une fenêtre esc
Accueil gh
Tous les sheets gs
Fiche aléatoire gr
Cette fenêtre ?