← retour aux outils back to tools

# Ghidra

Suite de rétro-ingénierie open-source de la NSA. Décompile et désassemble des binaires x86, ARM, MIPS et plus, avec une API de scripting puissante. NSA's open-source reverse engineering suite. Decompiles and disassembles binaries for x86, ARM, MIPS, and more with a powerful scripting API.

↗ https://ghidra-sre.org

## Overview

Ghidra is a full-featured software reverse engineering (SRE) framework developed by the NSA. It provides disassembly, decompilation (to C-like pseudo-code), data-flow analysis, symbol resolution, and an extensible scripting API in Java and Python. It rivals IDA Pro for binary analysis.

## Getting Started

Launch GUI

    ghidra

Headless mode (automated analysis)

    /opt/ghidra/support/analyzeHeadless /tmp/project MyProject \
      -import /path/to/binary \
      -postScript PrintFunctionNames.java \
      -deleteProject

## Key Workflow

1. File → New Project → Non-Shared Project → name it
2. File → Import File → select binary
3. Double-click the imported file → select analysis options → click Analyze
4. Decompiler window shows C-like pseudo-code for the selected function
5. Symbol Tree panel lists functions, imports, exports, labels

## Key Keyboard Shortcuts

Action | Shortcut
--- | ---
Go to address/function | `G`
Search for strings | `Search → For Strings`
Rename variable/function | `L`
Add comment | `;`
Cross-references (xrefs) | `Ctrl+Shift+F`
References to address | `Ctrl+G`
Search memory | `S`
Patch bytes | Right-click → Patch Instruction
Open decompiler | `Ctrl+E` (window)

## Finding Interesting Code

    # In Ghidra, use:
    Search → For Strings           # Find hardcoded strings
    Search → For Direct References # Find code using a string/value
    Window → Defined Strings       # All strings in binary
    Window → Functions             # All identified functions
    Window → Symbol References     # Cross-reference analysis

## Scripting (Python via Jython)

    # Script Manager → New Script (Python)
    # Example: List all functions
    from ghidra.program.model.listing import FunctionManager

    fm = currentProgram.getFunctionManager()
    for func in fm.getFunctions(True):
        print(func.getName(), hex(func.getEntryPoint().getOffset()))

## Headless Scripting

Run a script against a binary without GUI

    /opt/ghidra/support/analyzeHeadless /tmp/ghidra_proj ProjectName \
      -import /path/to/binary \
      -postScript /path/to/script.py \
      -scriptlog /tmp/ghidra_log.txt

## rz-ghidra (Rizin Integration)

Use Ghidra’s decompiler from within Rizin/Cutter Install rz-ghidra plugin, then in rizin:

    pdg     # Decompile current function with Ghidra engine

## Tips

- Rename functions and variables as you understand them — Ghidra tracks it all in the project
- Use `Function Call Graph` (Window menu) to visualize call relationships
- The Data Type Manager lets you import type libraries (.gdt files) for Windows API resolution
- `Bookmarks` (`Ctrl+D`) are useful for marking important locations during analysis

Analysis options reference

    Key analysis passes (run during initial analysis):
    - Disassembly       Convert bytes to instructions
    - Function Start    Identify function entry points
    - Decompiler        Generate C-like pseudo-code
    - Reference         Find cross-references
    - Data Reference    Track data access
    - Stack             Analyze stack frames
    - DWARF             Parse debug info if present
    - PDB               Parse PDB symbols (Windows)
    - Scalar Operands   Identify constants/addresses

## Vue d’ensemble

Ghidra est un framework complet de rétro-ingénierie logicielle (SRE) développé par la NSA. Il fournit désassemblage, décompilation (vers un pseudo-code proche du C), analyse de flux de données, résolution de symboles, et une API de scripting extensible en Java et Python. Il rivalise avec IDA Pro pour l’analyse de binaires.

## Prise en main

    # Lancer le GUI
    ghidra

    # Mode headless (analyse automatisée)
    /opt/ghidra/support/analyzeHeadless /tmp/project MyProject \
      -import /path/to/binary \
      -postScript PrintFunctionNames.java \
      -deleteProject

## Workflow clé

1. File → New Project → Non-Shared Project → lui donner un nom
2. File → Import File → sélectionner le binaire
3. Double-cliquer sur le fichier importé → sélectionner les options d’analyse → cliquer sur Analyze
4. La fenêtre Decompiler affiche le pseudo-code de type C pour la fonction sélectionnée
5. Le panneau Symbol Tree liste les fonctions, imports, exports, labels

## Raccourcis clavier clés

Action | Raccourci
--- | ---
Aller à une adresse/fonction | `G`
Rechercher des chaînes | `Search → For Strings`
Renommer variable/fonction | `L`
Ajouter un commentaire | `;`
Références croisées (xrefs) | `Ctrl+Shift+F`
Références vers une adresse | `Ctrl+G`
Rechercher en mémoire | `S`
Patcher des octets | Clic droit → Patch Instruction
Ouvrir le décompilateur | `Ctrl+E` (fenêtre)

## Trouver du code intéressant

    # Dans Ghidra, utiliser :
    Search → For Strings           # Trouver les chaînes codées en dur
    Search → For Direct References # Trouver le code utilisant une chaîne/valeur
    Window → Defined Strings       # Toutes les chaînes du binaire
    Window → Functions             # Toutes les fonctions identifiées
    Window → Symbol References     # Analyse des références croisées

## Scripting (Python via Jython)

    # Script Manager → New Script (Python)
    # Exemple : lister toutes les fonctions
    from ghidra.program.model.listing import FunctionManager

    fm = currentProgram.getFunctionManager()
    for func in fm.getFunctions(True):
        print(func.getName(), hex(func.getEntryPoint().getOffset()))

## Scripting headless

Lancer un script contre un binaire sans GUI

    /opt/ghidra/support/analyzeHeadless /tmp/ghidra_proj ProjectName \
      -import /path/to/binary \
      -postScript /path/to/script.py \
      -scriptlog /tmp/ghidra_log.txt

## rz-ghidra (intégration Rizin)

Utiliser le décompilateur de Ghidra depuis Rizin/Cutter. Installer le plugin rz-ghidra, puis dans rizin :

    pdg     # Décompiler la fonction courante avec le moteur Ghidra

## Conseils

- Renommer les fonctions et variables au fur et à mesure de la compréhension : Ghidra conserve tout dans le projet
- Utiliser le `Function Call Graph` (menu Window) pour visualiser les relations d’appel
- Le Data Type Manager permet d’importer des bibliothèques de types (fichiers .gdt) pour la résolution de l’API Windows
- Les `Bookmarks` (`Ctrl+D`) sont utiles pour marquer des emplacements importants pendant l’analyse

Analysis options reference

    Key analysis passes (run during initial analysis):
    - Disassembly       Convert bytes to instructions
    - Function Start    Identify function entry points
    - Decompiler        Generate C-like pseudo-code
    - Reference         Find cross-references
    - Data Reference    Track data access
    - Stack             Analyze stack frames
    - DWARF             Parse debug info if present
    - PDB               Parse PDB symbols (Windows)
    - Scalar Operands   Identify constants/addresses