#Workflow GUI
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_00401234encheck_passworddès que tu comprends son rôle. - Applique des types aux variables (
int,char *, structures) : le decompiler devient lisible. - Utilise
Edit → Commentspour garder une trace de l'analyse. - Les xrefs (
Ctrl+Shift+G) révèlent qui appelle une fonction critique. Search → For Stringspuis xrefs : le chemin le plus court vers la logique.
#Décompiler
// 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
# Analyse automatique sans GUI
$GHIDRA_HOME/support/analyzeHeadless /tmp/ghidra-project MyProject \
-import ./binary -postScript decompile.py -scriptPath ./scripts \
-deleteProject
# 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
# 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
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
# Firmware : extraire d'abord les composants (binwalk)
binwalk -e firmware.bin
# Puis importer chaque ELF / binaire extrait dans Ghidra