Besoin d'un audit de sécurité ?
Devis personnalisé sous 24h
Rétro-Ingénierie & Malware

Ghidra : Guide de Reverse Engineering pour Débutants

Par Ayi NEDJIMI 1 mars 2026 Lecture : 30 min ~5000 mots
#Ghidra #ReverseEngineering #Décompilateur #CTF #AnalyseBinaire

1. Introduction : pourquoi apprendre le reverse engineering avec Ghidra

Le reverse engineering -- ou rétro-ingénierie -- constitue l'une des compétences les plus fondamentales en cybersécurité. Qu'il s'agisse d'analyser un malware inconnu, de comprendre le fonctionnement interne d'un protocole propriétaire, ou de résoudre un challenge CTF, la capacité à lire et interpréter du code assembleur décompilé est un atout décisif. Depuis sa publication par la NSA en mars 2019 sous licence Apache 2.0, Ghidra a révolutionné l'accès aux outils de reverse engineering professionnels en offrant gratuitement des fonctionnalités qui rivalisent avec IDA Pro, dont la licence coûte plusieurs milliers d'euros.

Ghidra n'est pas un simple désassembleur : c'est un framework d'analyse de binaires complet, doté d'un décompilateur multi-architecture, d'un moteur de scripting puissant, d'un système de collaboration, et d'une architecture extensible par plugins. Son décompilateur, basé sur le langage intermédiaire P-Code, produit un pseudo-code C remarquablement lisible qui transforme radicalement la productivité de l'analyste. Des centaines d'architectures processeur sont supportées : x86, x86-64, ARM, MIPS, PowerPC, RISC-V, AVR, et bien d'autres.

Ce guide vous accompagne pas à pas, de l'installation à l'analyse de votre premier binaire. Nous couvrirons l'interface CodeBrowser, les techniques de navigation dans le code, le décompilateur, le scripting, et un exercice pratique complet sur un crackme CTF. Si vous travaillez déjà en analyse de malwares ou en forensique mémoire, Ghidra deviendra rapidement un outil indispensable de votre arsenal.

Pourquoi Ghidra plutôt qu'un autre outil ? Sa gratuité, sa communauté active, son décompilateur intégré et son support multi-architecture en font le choix idéal pour débuter. Même les analystes chevronnés qui utilisent IDA Pro intègrent Ghidra dans leur workflow pour ses capacités de scripting et sa flexibilité.

Usage responsable

Le reverse engineering est un outil puissant qui doit être utilisé dans un cadre légal. En France, l'article L122-6-1 du Code de la propriété intellectuelle autorise la décompilation à des fins d'interopérabilité et de sécurité. Utilisez toujours Ghidra dans un contexte autorisé : analyse de malwares, recherche de vulnérabilités avec accord, CTF, ou étude de logiciels libres.

2. Présentation de Ghidra : origines et architecture

2.1 Genèse d'un outil de la NSA

Ghidra a été développé en interne par la National Security Agency (NSA) pendant plus de vingt ans avant sa publication open source lors de la conférence RSA 2019. L'outil était utilisé quotidiennement par les analystes de la NSA et de ses partenaires dans la communauté du renseignement américain (IC -- Intelligence Community). Sa publication a été motivée par la volonté de démocratiser l'accès à des outils d'analyse avancés et de bénéficier des contributions de la communauté open source.

Le projet est hébergé sur GitHub sous l'organisation NationalSecurityAgency et bénéficie d'une communauté très active. Depuis sa sortie, Ghidra a reçu plus de 52 000 étoiles GitHub, faisant de lui l'un des projets de cybersécurité les plus populaires de la plateforme. Les mises à jour sont régulières, avec des améliorations significatives du décompilateur, le support de nouvelles architectures, et l'ajout de fonctionnalités comme le debugger intégré (depuis Ghidra 10.0) et le support des fichiers PDB amélioré.

2.2 Architecture logicielle

Ghidra est écrit principalement en Java, ce qui lui confère une portabilité native sur Windows, Linux et macOS. Le décompilateur, cependant, est un composant C++ compilé nativement (decompile) qui communique avec l'interface Java via un protocole XML. Cette architecture hybride offre le meilleur des deux mondes : la portabilité de Java pour l'interface et les performances du C++ pour le moteur de décompilation.

Les composants principaux sont :

  • Ghidra Project Manager : gestionnaire de projets, point d'entrée de l'application
  • CodeBrowser : l'outil d'analyse principal avec listing, décompilateur, graphes
  • Sleigh : le langage de description d'architectures processeur (spécifications d'instructions)
  • P-Code : le langage intermédiaire utilisé par le décompilateur (Intermediate Representation)
  • Ghidra Server : serveur de collaboration multi-utilisateurs pour les projets partagés
  • Debugger : debugger intégré supportant GDB, WinDbg et LLDB (depuis 10.x)
  • Script Manager : moteur d'exécution pour les scripts Java et Python (Jython/GhidraPython)
Architecture de Ghidra (SRE Framework) Interface Utilisateur (Java / Swing) CodeBrowser Function Graph Debugger Script Manager Project Manager Moteur d'Analyse (Java) Auto-Analysis Cross-References Data Type Manager Symbol Table Décompilateur (C++ natif) P-Code IR Simplification Rules Type Recovery C Output Generator Loaders (Formats binaires) PE/COFF ELF Mach-O DEX Raw Binary CPIO ZIP APK firmware Sleigh (Specs processeur) x86/x64 ARM/AArch64 MIPS PowerPC RISC-V AVR SPARC 68K Z80 Extensions & Plugins GhidraScript (Java) GhidraPython (Jython) Ghidra Server (collab) Ghidra Extensions API YARA

3. Installation et configuration multi-plateforme

3.1 Prérequis système

Ghidra nécessite un Java Development Kit (JDK) 17 ou supérieur. Depuis Ghidra 11.x, le JDK 21 est recommandé. Les distributions AdoptOpenJDK (Eclipse Temurin), Amazon Corretto ou Oracle JDK sont toutes compatibles. Voici les prérequis minimaux :

ComposantMinimumRecommandé
JDK1721 (LTS)
RAM4 Go16 Go+
Disque1 Go (Ghidra) + espace projetsSSD recommandé
OSWindows 10+, Linux (64-bit), macOS 10.13+Linux 64-bit
Résolution1280x10241920x1080+

3.2 Installation pas à pas

Linux (recommandé pour l'analyse de malwares)

# 1. Installer JDK 21
sudo apt update && sudo apt install openjdk-21-jdk -y
java -version  # Vérifier l'installation

# 2. Télécharger Ghidra depuis GitHub
wget https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_11.3_build/ghidra_11.3_PUBLIC_20250115.zip

# 3. Extraire l'archive
unzip ghidra_11.3_PUBLIC_20250115.zip -d /opt/
ln -s /opt/ghidra_11.3_PUBLIC /opt/ghidra

# 4. Lancer Ghidra
/opt/ghidra/ghidraRun

# 5. (Optionnel) Créer un alias
echo 'alias ghidra="/opt/ghidra/ghidraRun"' >> ~/.bashrc
source ~/.bashrc

Windows

# PowerShell - Installation JDK via winget
winget install EclipseAdoptium.Temurin.21.JDK

# Configurer JAVA_HOME (si nécessaire)
[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Eclipse Adoptium\jdk-21", "Machine")

# Extraire ghidra_11.3_PUBLIC.zip dans C:\Tools\
# Lancer C:\Tools\ghidra_11.3_PUBLIC\ghidraRun.bat

macOS

# Installer via Homebrew
brew install openjdk@21
brew install --cask ghidra

# Ou manuellement
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
# Télécharger et extraire depuis GitHub
# Lancer : ./ghidraRun

Environnement isolé pour l'analyse de malwares

Si vous analysez des échantillons malveillants, utilisez toujours une machine virtuelle isolée (VirtualBox, VMware, QEMU). Désactivez le réseau, utilisez des snapshots, et ne partagez pas de dossiers avec l'hôte. Consultez notre article sur les rootkits kernel-mode pour comprendre pourquoi l'isolation est critique.

4. L'interface de Ghidra : maîtriser le CodeBrowser

4.1 Le Project Manager

Au lancement, Ghidra affiche le Project Manager, le hub central de gestion de vos projets d'analyse. Un projet Ghidra est un conteneur qui regroupe un ou plusieurs binaires importés, leurs analyses, vos annotations et vos scripts. Deux types de projets existent :

  • Non-Shared Project : projet local, stocké dans un répertoire sur votre disque. Idéal pour le travail individuel.
  • Shared Project : projet hébergé sur un Ghidra Server, permettant la collaboration multi-analystes avec un système de verrouillage et de versioning.

Pour créer un projet, cliquez sur File > New Project, choisissez le type, nommez-le et sélectionnez un répertoire. Vous pouvez ensuite importer des binaires via File > Import File ou par glisser-déposer. Ghidra détecte automatiquement le format (PE, ELF, Mach-O, DEX, etc.) et l'architecture processeur.

4.2 Le CodeBrowser : votre plan de travail

Le CodeBrowser est l'outil d'analyse principal. Il s'ouvre en double-cliquant sur un fichier importé et analysé. Son interface est organisée en panneaux que vous pouvez réorganiser librement. Les panneaux essentiels sont :

Listing (panneau central)

Le listing affiche le désassemblage du binaire. Chaque ligne représente une instruction assembleur avec son adresse, ses octets bruts, le mnémonique et les opérandes. Les commentaires, labels et cross-references sont affichés en surbrillance. Les raccourcis essentiels :

  • G : aller à une adresse spécifique
  • L : renommer un label ou une fonction
  • ; : ajouter un commentaire EOL (end-of-line)
  • Ctrl+Shift+; : ajouter un commentaire plate
  • / : ajouter un commentaire repeated
  • T : changer le type d'une donnée
  • D : définir une donnée (byte, word, dword, string...)
  • C : convertir en code (désassembler)
  • F : créer une fonction à l'adresse courante

Decompiler (panneau droit)

Le décompilateur affiche en temps réel le pseudo-code C de la fonction sélectionnée dans le listing. C'est l'un des atouts majeurs de Ghidra : il traduit automatiquement l'assembleur en code C lisible. Chaque variable, paramètre et appel de fonction est interactif -- vous pouvez renommer, retyper et commenter directement dans le panneau de décompilation, et les modifications se propagent dans le listing.

Function Graph

Le graphe de flux de contrôle (CFG) affiche visuellement les blocs de base d'une fonction et leurs connexions. Les branches conditionnelles sont colorées (vert pour le saut pris, rouge pour le non-pris). Cet affichage est essentiel pour comprendre la logique d'un algorithme, identifier les boucles et les structures conditionnelles complexes.

Autres panneaux utiles

  • Symbol Tree : arborescence des imports, exports, fonctions, labels, classes et namespaces
  • Data Type Manager : bibliothèque de structures, enums et typedefs
  • Bytes : vue hexadécimale des octets bruts du fichier
  • Console : sortie des scripts et messages du système
  • Bookmarks : marque-pages pour naviguer rapidement entre les points d'intérêt

5. Premier projet : importer et analyser un binaire

5.1 Importation d'un fichier PE (Windows)

Pour importer un exécutable Windows (.exe ou .dll), utilisez File > Import File. Ghidra lance automatiquement ses analyseurs de format et affiche une boîte de dialogue avec les informations détectées :

  • Format : Portable Executable (PE)
  • Language : x86:LE:64:default (pour un PE 64-bit) ou x86:LE:32:default (32-bit)
  • Compiler : VisualStudio:default, gcc, etc.
  • Destination Folder : emplacement dans le projet

Cliquez sur Options... pour configurer les options d'import avancées. Les options les plus utiles incluent :

  • Load External Libraries : tente de résoudre les imports dynamiques (DLL)
  • Apply Processor Defined Labels : applique les noms symboliques connus du processeur
  • Create Bookmarks : crée des marque-pages pour les points d'intérêt

5.2 Importation d'un fichier ELF (Linux)

Le processus est identique pour les binaires Linux au format ELF. Ghidra détecte automatiquement l'architecture (x86-64, ARM, MIPS, etc.) et le format. Un avantage des binaires ELF non-strippés : les symboles de debug (DWARF) sont automatiquement analysés, fournissant les noms de fonctions, les types de variables et les numéros de ligne du code source original.

# Pour préparer un binaire de test
gcc -o hello hello.c             # Binaire avec symboles
strip hello -o hello_stripped     # Binaire sans symboles (plus réaliste)
gcc -g -o hello_debug hello.c    # Binaire avec symboles DWARF complets

5.3 Auto-Analysis : l'analyse automatique

Après l'import, Ghidra propose de lancer l'auto-analysis. Cette étape est cruciale : elle exécute une série d'analyseurs qui identifient les fonctions, résolvent les appels, propagent les types et détectent les structures. Les analyseurs principaux sont :

AnalyseurFonctionImpact
Disassemble Entry PointsDésassemble à partir des points d'entrée connusEssentiel
Subroutine ReferencesIdentifie les appels de sous-routinesEssentiel
Stack AnalysisAnalyse les frames de pile et les variables localesImportant
Function Start SearchRecherche heuristique de prologues de fonctionsImportant pour les binaires strippés
Decompiler Parameter IDIdentifie les paramètres des fonctions via le décompilateurAméliore significativement la décompilation
Windows x86 PE RTTI AnalyzerAnalyse les informations RTTI C++Utile pour les binaires C++
Aggressive Instruction FinderRecherche agressivement du code non référencéPeut créer des faux positifs

Conseil : ne désactivez pas l'auto-analysis

Sauf cas particulier (binaire obfusqué, firmware exotique), laissez tous les analyseurs activés par défaut. L'analyse complète peut prendre de quelques secondes à plusieurs minutes selon la taille du binaire. Les résultats sont stockés dans la base de données du projet et n'ont pas besoin d'être recalculés. Pour l'analyse de binaires obfusqués, consultez notre guide sur la déobfuscation de malwares polymorphes.

6. Navigation avancée : symboles, cross-references et recherche

6.1 Symboles et Symbol Tree

Le panneau Symbol Tree est votre boussole dans le code. Il organise tous les éléments nommés du binaire en catégories :

  • Imports : fonctions importées depuis des bibliothèques externes (kernel32.dll, libc.so...)
  • Exports : fonctions exportées par le binaire (pour les DLL/SO)
  • Functions : toutes les fonctions identifiées, nommées ou non (FUN_00401000, etc.)
  • Labels : labels créés manuellement ou automatiquement
  • Classes : classes C++ détectées via RTTI ou analyse vtable
  • Namespaces : espaces de noms (C++, .NET)

Un clic sur n'importe quel symbole vous transporte immédiatement à son adresse dans le listing. Le filtrage en temps réel (Filter) vous permet de rechercher rapidement dans des binaires contenant des milliers de symboles.

6.2 Cross-References (XRefs) : suivre le flux de données

Les cross-references sont l'outil le plus puissant pour comprendre comment le code est connecté. Pour chaque adresse, Ghidra maintient la liste de toutes les références vers et depuis cette adresse. Types de références :

  • CALL : appel de fonction (call 0x401000)
  • UNCONDITIONAL_JUMP : saut inconditionnel (jmp)
  • CONDITIONAL_JUMP : saut conditionnel (je, jne, etc.)
  • DATA : référence à une donnée (lecture/écriture de variable globale)
  • READ / WRITE : accès en lecture ou écriture à une adresse mémoire

Pour afficher les XRefs d'un symbole, placez le curseur dessus et appuyez sur Ctrl+Shift+F (Find References to). La fenêtre résultante liste toutes les locations du binaire qui référencent ce symbole. C'est ainsi que vous pouvez tracer le parcours d'une chaîne de caractères suspecte, d'une clé de chiffrement, ou d'un appel API critique comme CreateRemoteThread utilisé dans les techniques d'escalade de privilèges Windows.

6.3 Recherche dans le binaire

Ghidra offre plusieurs méthodes de recherche :

  • Search > Memory : recherche de motifs d'octets, de chaînes ou d'expressions régulières dans la mémoire du programme
  • Search > For Strings : extrait toutes les chaînes ASCII, UTF-8 et Unicode détectées
  • Search > For Scalars : recherche de valeurs numériques constantes (utile pour trouver des magic numbers, des tailles de buffer, etc.)
  • Search > For Instruction Patterns : recherche de séquences d'instructions spécifiques
  • Search > For Address Tables : détecte les tables de pointeurs (vtables, jump tables)

La recherche de chaînes est souvent le premier réflexe d'un analyste. Les chaînes révèlent des messages d'erreur, des URL de C2, des clés de registre, des chemins de fichiers, et des indicateurs de compromission. Pour une approche systématique de la recherche d'IOC dans les binaires, notre article sur les frameworks d'analyse de malwares par IA détaille des techniques complémentaires.

7. Le décompilateur : du binaire au pseudo-code C

7.1 Le langage intermédiaire P-Code

Le décompilateur de Ghidra repose sur le concept de P-Code (Processor Code), un langage intermédiaire (IR -- Intermediate Representation) qui abstrait les spécificités de chaque architecture processeur. Chaque instruction assembleur native est traduite en une séquence d'opérations P-Code élémentaires. Ce mécanisme est la clé de la portabilité du décompilateur : ajouter le support d'une nouvelle architecture revient à écrire la traduction en P-Code via le langage Sleigh, sans modifier le moteur de décompilation lui-même.

Le pipeline de décompilation suit ces étapes :

  1. Traduction en P-Code : les instructions natives sont converties en opérations P-Code
  2. Construction du SSA : transformation en forme SSA (Static Single Assignment) pour l'analyse de flux de données
  3. Simplification : application de règles de simplification algébrique et logique
  4. Propagation de types : inférence des types de variables à partir des opérations et des signatures connues
  5. Restructuration du flux de contrôle : reconstruction des if/else, switch/case, boucles while/for
  6. Génération du code C : production du pseudo-code C final lisible

7.2 Améliorer la décompilation

La qualité de la décompilation dépend fortement des informations que vous fournissez à Ghidra. Voici les actions qui améliorent le plus le résultat :

Retyper les variables et paramètres

Le décompilateur nomme les variables local_10, param_1, etc. En les renommant et en leur attribuant le bon type, le code devient beaucoup plus lisible. Cliquez droit sur une variable > Retype Variable (ou Ctrl+L) et choisissez le type approprié (char*, DWORD, HANDLE, struct...). La propagation est automatique.

Définir les signatures de fonctions

Modifier le prototype d'une fonction (Edit Function Signature) en spécifiant ses paramètres et son type de retour améliore en cascade toutes les fonctions qui l'appellent. Utilisez les données types de Ghidra (Windows/DataTypes) pour les API Windows, ou importez des fichiers d'en-tête C.

Appliquer des structures

Quand le code accède à des champs via des offsets (*(param_1 + 0x28)), définir une structure avec Data Type Manager transforme ces accès obscurs en pContext->ProcessId, rendant le code immédiatement compréhensible.

Pipeline de Décompilation Ghidra Binaire x86 / ARM Instructions Sleigh Traduction Native -> P-Code P-Code IR SSA Form Indép. archi Simplification Rules Engine Optimisation Type Recovery Inférence Types & structs Code C Pseudo-code Lisible Assembleur x86-64 (avant) push rbp mov rbp, rsp sub rsp, 0x20 mov [rbp-0x14], edi cmp dword [rbp-0x14], 0x2a jne 0x401032 lea rdi, [rip+0x1234] ; "OK" Décompilation C (après) void check_password(int code) { if (code == 42) { puts("OK"); } else { puts("FAIL"); } }

8. Annotations, renommage et documentation

8.1 L'art de l'annotation

L'analyse de binaires est un processus itératif. Vous ne comprendrez pas tout au premier passage. Les annotations sont votre mémoire externe : elles documentent vos hypothèses, vos découvertes et vos questions. Ghidra propose plusieurs types de commentaires :

  • EOL Comments (;) : commentaires en fin de ligne, visibles directement dans le listing
  • Pre Comments : commentaires affichés avant l'instruction, utiles pour documenter un bloc logique
  • Post Comments : commentaires après l'instruction
  • Plate Comments (Ctrl+Shift+;) : commentaires encadrés, idéaux pour les en-têtes de fonctions
  • Repeatable Comments (/) : commentaires qui se propagent automatiquement via les cross-references

8.2 Stratégie de renommage

Un binaire strippé présente des fonctions nommées FUN_00401000, FUN_00401050, etc. Renommer ces fonctions au fur et à mesure de votre compréhension transforme un code cryptique en documentation vivante. Conventions recommandées :

  • Préfixer par le rôle : init_, parse_, encrypt_, send_, check_
  • Utiliser le snake_case pour les fonctions : decrypt_c2_payload
  • Préfixer les variables globales par g_ : g_config_buffer
  • Annoter les structures par leur rôle : MALWARE_CONFIG, C2_PACKET
  • Marquer les fonctions non analysées avec TODO_ : TODO_unknown_init

Ces conventions s'alignent avec les pratiques décrites dans notre article sur les techniques anti-reverse engineering des APT, qui détaille les techniques d'obfuscation que les malwares emploient pour résister à ce type d'analyse.

9. Scripting : automatiser l'analyse avec Java et Python

9.1 GhidraScript en Java

Ghidra expose une API riche accessible via des scripts Java. Le Script Manager (Window > Script Manager) liste les scripts disponibles et permet d'en créer de nouveaux. Un script Ghidra hérite de la classe GhidraScript et a accès à tout le modèle de données du programme : fonctions, instructions, références, types, etc.

// Exemple : lister toutes les fonctions qui appellent CreateRemoteThread
// @category Analysis
// @author Ayi NEDJIMI

import ghidra.app.script.GhidraScript;
import ghidra.program.model.symbol.*;
import ghidra.program.model.listing.*;

public class FindCreateRemoteThread extends GhidraScript {
    @Override
    protected void run() throws Exception {
        SymbolTable symTab = currentProgram.getSymbolTable();
        SymbolIterator symbols = symTab.getSymbolIterator("CreateRemoteThread", true);
        
        while (symbols.hasNext()) {
            Symbol sym = symbols.next();
            Reference[] refs = getReferencesTo(sym.getAddress());
            
            for (Reference ref : refs) {
                Function caller = getFunctionContaining(ref.getFromAddress());
                if (caller != null) {
                    println("CreateRemoteThread appelée depuis : " + 
                            caller.getName() + " @ " + ref.getFromAddress());
                }
            }
        }
    }
}

9.2 GhidraPython (Jython)

Pour les scripts plus rapides à écrire, Ghidra intègre un interpréteur Jython (Python 2.7 exécuté dans la JVM). Depuis Ghidra 11.x, le support de Python 3 via Pyhidra (cpython bridge) est également disponible. L'API est identique à celle de Java :

# Exemple Python : extraire toutes les chaînes et leur XRefs
# @category Strings
# @author Ayi NEDJIMI

from ghidra.program.model.data import StringDataType
from ghidra.program.util import DefinedDataIterator

data_iterator = DefinedDataIterator.definedStrings(currentProgram)

for data in data_iterator:
    value = data.getValue()
    if value and len(str(value)) > 4:
        refs = getReferencesTo(data.getAddress())
        if refs:
            callers = []
            for ref in refs:
                func = getFunctionContaining(ref.getFromAddress())
                if func:
                    callers.append(func.getName())
            if callers:
                print("String: '{}' @ {} -> Called from: {}".format(
                    value, data.getAddress(), ", ".join(set(callers))))

9.3 Scripts essentiels de la communauté

La communauté Ghidra a produit de nombreux scripts utiles :

  • FindCrypt : détecte les constantes cryptographiques (AES S-Box, SHA tables, RSA)
  • ghidra-scripts (AllSafe) : collection de scripts pour l'analyse de malwares
  • GhidraOllvm : simplifie les binaires protégés par OLLVM (Obfuscator-LLVM)
  • ghidra2frida : génère des hooks Frida à partir de l'analyse Ghidra
  • YARA-GhidraPlugin : exécute des règles YARA directement depuis Ghidra

10. Plugins essentiels et extensions

10.1 Plugins intégrés

Ghidra est livré avec de nombreux plugins activables via File > Configure dans le CodeBrowser. Les plus utiles :

  • Function ID (FidDb) : identifie les fonctions de bibliothèques standard (libc, MSVCRT, OpenSSL) par leurs patterns d'octets. Similaire au système FLIRT d'IDA Pro.
  • Version Tracking : compare deux versions d'un même binaire pour identifier les différences (diff binaire). Utile pour l'analyse de patchs de sécurité.
  • BSim : recherche de similarité entre fonctions à grande échelle, basé sur les caractéristiques du décompilateur.
  • Debugger : debugger intégré supportant GDB (Linux), WinDbg (Windows) et LLDB (macOS). Permet le debug statique + dynamique unifié.
  • Emulator : émulateur P-Code intégré pour l'exécution symbolique de fragments de code.

10.2 Extensions tierces recommandées

ExtensionFonctionCas d'usage
ghidra-delinker-extensionExporte des fonctions en fichiers objet recompilablesPatching, modding
GhidraBridgePont Python 3 (CPython) vers l'API GhidraScripts modernes, ML integration
KaijuAnalyse de malware par CERT/CC (Carnegie Mellon)Hashing de fonctions, triage
ret-syncSynchronisation avec un debugger externe (x64dbg, WinDbg)Analyse dynamique + statique
GhidraEmuÉmulation avancée de fonctionsDéobfuscation, résolution de strings
Semgrep-GhidraRecherche de patterns dans le code décompiléDétection de vulnérabilités

L'installation d'extensions se fait via File > Install Extensions dans le Project Manager, ou manuellement en copiant le dossier de l'extension dans $GHIDRA_INSTALL_DIR/Ghidra/Extensions. Pour les développeurs d'extensions, le système Gradle de Ghidra facilite la compilation contre la bonne version de l'API.

11. Exercice pratique : résoudre un Crackme CTF

11.1 Contexte du challenge

Appliquons tout ce que nous avons appris sur un crackme simple. Le binaire est un exécutable ELF 64-bit Linux qui demande un mot de passe. Notre objectif : trouver le mot de passe correct sans exécuter le programme. Ce type d'exercice est similaire aux challenges que l'on retrouve dans les compétitions CTF et dans la formation initiale des analystes malware.

11.2 Démarche d'analyse pas à pas

Etape 1 : Import et analyse automatique

# Informations initiales avec file et strings
file crackme_easy
# crackme_easy: ELF 64-bit LSB executable, x86-64, dynamically linked

strings crackme_easy | grep -i pass
# Enter password:
# Correct! Well done.
# Wrong password, try again.

Importez le fichier dans Ghidra, acceptez l'auto-analysis. Une fois terminée, naviguez vers le Symbol Tree > Functions.

Etape 2 : Localiser la fonction main

Dans le Symbol Tree, cherchez main ou entry. Si le binaire est strippé, naviguez vers l'entry point et suivez les appels jusqu'à trouver la fonction qui appelle printf/puts avec le message "Enter password".

Etape 3 : Analyser la logique avec le décompilateur

// Décompilation typique d'un crackme simple
int main(int argc, char **argv) {
    char user_input[64];
    char *secret = "s3cr3t_k3y_2026";
    
    puts("Enter password: ");
    fgets(user_input, 64, stdin);
    
    // Supprimer le newline
    user_input[strcspn(user_input, "\n")] = '\0';
    
    if (strcmp(user_input, secret) == 0) {
        puts("Correct! Well done.");
        return 0;
    }
    puts("Wrong password, try again.");
    return 1;
}

Dans ce cas simple, le mot de passe est visible en clair : s3cr3t_k3y_2026. En réalité, les crackmes plus avancés utilisent des transformations (XOR, algorithmes custom, hashing), mais la démarche reste identique :

  1. Localiser la fonction de vérification via les chaînes de succès/échec
  2. Comprendre la logique de transformation de l'input utilisateur
  3. Identifier la valeur attendue ou inverser la transformation
  4. Valider en traçant le flux de données complet

11.3 Techniques avancées pour les crackmes complexes

Pour les challenges plus élaborés, combinez Ghidra avec d'autres outils :

  • Debugger Ghidra + breakpoints : placez un breakpoint sur la comparaison pour inspecter les valeurs en mémoire
  • Emulation P-Code : émulez la fonction de transformation pour obtenir le résultat attendu
  • Scripting : automatisez l'extraction et le décryptage des constantes
  • Z3 / Angr : pour les contraintes complexes, utilisez un solveur SMT en complément

Les compétitions CTF sont le meilleur terrain d'entraînement. Les plateformes comme crackmes.one, root-me.org, picoCTF et Hack The Box proposent des centaines de challenges de reverse engineering de difficulté croissante. Pour une approche plus orientée malware réel, consultez notre article sur les malwares mobiles et l'IA.

12. Comparaison : Ghidra vs IDA Pro vs Binary Ninja vs Cutter

Le choix d'un outil de reverse engineering dépend de vos besoins, votre budget et votre workflow. Voici une comparaison détaillée des quatre principaux outils du marché en 2026 :

CritèreGhidraIDA ProBinary NinjaCutter (rizin)
PrixGratuit (Apache 2.0)1 800 - 6 500 EUR/an349 - 2 499 USDGratuit (GPL)
DécompilateurIntégré (P-Code, excellent)Hex-Rays (référence, payant séparé)HLIL (très bon)r2ghidra (port du décompilateur Ghidra)
Architectures30+ (le plus large)20+ (payant par archi)15+ (en expansion)20+ (via rizin)
ScriptingJava, Jython, Python 3 (Pyhidra)IDAPython (Python 3), IDCPython 3, API richePython, JavaScript, r2pipe
CollaborationGhidra Server (intégré)Lumina (cloud), TeamIDAEnterprise (payant)Non intégré
DebuggerIntégré (GDB, WinDbg, LLDB)Intégré (le meilleur)Intégré (basique)Intégré via rizin
PerformanceBonne (Java, peut être lent sur gros binaires)Excellente (C++)Excellente (C++/Rust)Bonne (C/Qt)
CommunautéTrès active (GitHub, 52k stars)Historique, plugins maturesActive, croissanteActive (radare2/rizin)
Courbe d'apprentissageMoyenneÉlevée mais bien documentéeFaible (UI moderne)Élevée (héritage CLI radare2)

Notre recommandation

Débutants : commencez par Ghidra. Gratuit, complet, bien documenté, avec un décompilateur intégré de qualité professionnelle. Professionnels : combinez Ghidra et IDA Pro. IDA reste la référence pour la performance et le debugger, Ghidra complète pour le scripting, la collaboration et l'analyse multi-architecture. Développeurs : Binary Ninja offre l'API la plus propre et la meilleure expérience de développement de plugins.

13. Checklist du débutant en reverse engineering

Utilisez cette checklist comme guide de progression. Chaque point maîtrisé vous rapproche du niveau d'un analyste opérationnel :

Checklist du Débutant Ghidra Phase 1 : Fondamentaux Installer Ghidra + JDK 21 Créer un projet, importer un binaire Naviguer dans le CodeBrowser Utiliser le décompilateur Renommer fonctions et variables Suivre les cross-references (XRefs) Résoudre un crackme simple Phase 2 : Intermédiaire Maîtriser x86/x64 assembleur Définir des structures et types Ecrire des scripts GhidraScript Utiliser Function ID (FidDb) Analyser un binaire C++ (vtables) Identifier des patterns crypto Résoudre un crackme moyen (CTF) Phase 3 : Avancé -- Analyse de Malwares Analyser un échantillon malveillant réel Déobfusquer du code (XOR, packing) Ecrire des règles YARA depuis Ghidra Utiliser le debugger + émulateur Développer une extension Ghidra Contribuer à un rapport d'analyse publique Ressources Recommandées Ghidra Docs: ghidra-sre.org | The Ghidra Book (No Starch Press) | RE for Beginners (Dennis Yurichev, gratuit) Platforms CTF: crackmes.one, root-me.org, picoCTF, HackTheBox | MalwareBazaar (samples) | VirusTotal YouTube: 0xRick, LiveOverflow, MalwareAnalysisForHedgehogs, GynvaelColdwind | Cours: OpenSecurityTraining2

14. Conclusion : premiers pas vers la maîtrise

Ghidra a démocratisé le reverse engineering en mettant entre les mains de tout analyste un outil de calibre professionnel, gratuitement. Les fonctionnalités que nous avons couvertes dans ce guide -- le CodeBrowser, le décompilateur P-Code, les cross-references, le scripting, les plugins -- ne représentent que la surface de ce que Ghidra permet. Avec de la pratique, vous développerez une intuition pour naviguer dans le code binaire, reconnaître les patterns d'obfuscation, et reconstruire la logique des programmes les plus complexes.

Le reverse engineering est une compétence qui se développe par la pratique. Commencez par des crackmes simples, progressez vers des CTF plus complexes, puis attaquez l'analyse de malwares réels dans un environnement isolé. Chaque binaire analysé vous apprend quelque chose de nouveau -- un pattern de code, une technique d'obfuscation, une structure de données. La combinaison de Ghidra avec des outils complémentaires comme Volatility 3 pour l'analyse mémoire, les frameworks C2 pour comprendre l'infrastructure d'attaque, et les frameworks d'IA pour l'analyse de malwares vous donnera une vision complète de la chaîne d'analyse.

Le prochain article de cette série abordera l'analyse des fileless malwares, où Ghidra est utilisé en complément de l'analyse mémoire pour reconstruire les payloads malveillants qui ne touchent jamais le disque.

Besoin d'une analyse de malware ou d'un audit de sécurité ?

Nos experts en rétro-ingénierie analysent vos échantillons suspects et renforcent vos défenses.

Contactez nos experts

Besoin d'une expertise en cybersécurité ?

Analyse de malwares, rétro-ingénierie et audit de sécurité avancé

Nos Services