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.orgOverview
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
- File → New Project → Non-Shared Project → name it
- File → Import File → select binary
- Double-click the imported file → select analysis options → click Analyze
- Decompiler window shows C-like pseudo-code for the selected function
- 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é
- File → New Project → Non-Shared Project → lui donner un nom
- File → Import File → sélectionner le binaire
- Double-cliquer sur le fichier importé → sélectionner les options d’analyse → cliquer sur Analyze
- La fenêtre Decompiler affiche le pseudo-code de type C pour la fonction sélectionnée
- 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