Mobile, reverse & malware

Radare2 : à quoi ça sert ? Reverse CLI expliqué 2025

Radare2 expliqué : framework reverse CLI open-source, scripting r2pipe, décompilation r2ghidra, Cutter GUI, Rizin fork, vs Ghidra/IDA, cas d'usage automation.

Naim Aouaichia
19 min de lecture
  • Radare2
  • Rizin
  • Cutter
  • Reverse engineering
  • CLI
  • Malware analysis
  • Scripting

Radare2 (r2) est un framework de reverse engineering open-source (LGPLv3) créé en 2006 par Sergi « pancake » Àlvarez Capilla initialement pour le forensic sur disques, devenu en 18+ ans la référence CLI-first des outils reverse gratuits. Il supporte plus de 40 architectures (x86/x64, ARM/AArch64, MIPS, PowerPC, RISC-V, 8051, Z80, GameBoy, m68k, SPARC, SuperH, AVR, PIC, etc.), tous les formats binaires majeurs (PE, ELF, Mach-O, raw, firmware, DEX Android, fat Mach-O, COFF), un scripting extensif via r2pipe (Python, Ruby, Go, JavaScript, Rust, C), un debugger intégré (gdb, lldb compat), l'émulation ESIL (Evaluable String Intermediate Language), et un écosystème de plugins riche via r2pm. Avec ~20 000 stars GitHub (radareorg/radare2) fin 2024, c'est le troisième outil reverse le plus utilisé après IDA Pro et Ghidra. Rizin, fork de Radare2 lancé en décembre 2020 par une partie de la communauté initiale, modernise le codebase avec une API plus propre, maintient compatibilité fonctionnelle avec Radare2, et propulse désormais Cutter (GUI depuis 2017 initialement sur Radare2, migrée Rizin en 2021). La décompilation en pseudo-C — absente nativement historiquement — s'obtient via r2ghidra (plugin community qui wrap le décompilateur Ghidra, commande pdg), r2dec (décompilateur natif JavaScript, commande pdd) ou Rizin RzDec. Radare2 se distingue fondamentalement de Ghidra et IDA Pro par sa philosophie CLI-first : workflow terminal pur, scripting roi, automation à grande échelle. Les cas d'usage 2025 dominants : automation pipelines malware analysis 1000+ samples/jour, exotic architectures non supportées ailleurs (consoles retro, firmware industriel custom), forensic disk imaging, CTF binary rapide, formation reverse engineering (communauté FR via pancake conférences SSTIC / Pass the SALT). Cet article détaille la genèse et philosophie Radare2, le fork Rizin 2020 et ses différences, l'architecture des commandes avec les 30 essentielles, le scripting r2pipe avec exemples Python production, la décompilation via r2ghidra/r2dec, la GUI Cutter, la comparaison avec Ghidra / IDA Pro / Binary Ninja, les cas d'usage concrets, et les limites où d'autres outils restent préférables. Pour le comparatif détaillé Ghidra, voir Ghidra : à quoi ça sert. Pour le panorama analyse statique vs dynamique, Analyse statique vs dynamique.

1. Genèse et philosophie Radare2

1.1 Histoire

Radare est né en 2006 du projet personnel de Sergi « pancake » Àlvarez Capilla — un Catalan de Barcelone alors forensic investigator — pour un besoin précis : naviguer et patcher des disques durs à la recherche de fragments récupérables. Le premier commit est un outil hexadécimal interactif. Sur 18+ ans, il a muté en framework reverse engineering complet.

Timeline Radare/Radare2
────────────────────────
 
2006   Radare v1 — hex editor CLI pour forensic
2009   Radare2 — réécriture complète, architecture modulaire
2013   Premier release stable avec auto-analysis
2016   Integration décompilateur expérimental
2017   Cutter GUI initiale (sur Radare2)
2018   Ecosystème r2pipe mature (Python, Go, JS, Ruby)
2019   Ghidra release → déplacement communauté partiel
2020 Déc  Rizin fork annoncé (HACKATHON community)
2021   Cutter migre Rizin
2022+  Coexistence Radare2 + Rizin, convergence ou divergence ?
2025   Radare2 5.9.x, Rizin 0.8.x, Cutter 2.4.x (sur Rizin)

1.2 Philosophie CLI-first

Contrairement à Ghidra (GUI Java-first) et IDA Pro (GUI Qt-first), Radare2 est CLI-first :

  • Workflow terminal : clavier uniquement, commandes courtes, navigation efficiente.
  • Scripting roi : chaque action UI a un équivalent CLI, tout est automatable.
  • Modularité extrême : radare2 est un coquille autour de composants séparés (r2_core, r2_io, r2_bin, r2_asm, r2_anal).
  • Unix-like : grep/awk friendly, pipes, JSON output avec suffixe j.

Cette philosophie a des conséquences positives (puissance automation, légèreté) et négatives (courbe d'apprentissage raide, UX austère pour débutants).

1.3 Culture communautaire

Radare2 a une culture hacker forte incarnée par pancake et la communauté :

  • r2con : conférence annuelle Barcelone (reprise post-COVID en 2023).
  • Radare2 Book : livre OSS communautaire (radareorg.github.io/radare2book).
  • Discord + IRC : #radare2 sur Libera.Chat, Discord r2con.
  • Conférences : SSTIC France, Pass the SALT FR, DEF CON, Hack.lu.
  • FR community : pancake parle FR, présentations SSTIC, écosystème recherche français actif.

2. Radare2 vs Rizin : le fork 2020

2.1 Contexte du fork

En décembre 2020, après un hackathon communautaire, plusieurs contributeurs historiques de Radare2 lancent Rizin — fork du codebase avec objectifs :

  • Modernisation du code (API, C moderne).
  • Gouvernance communautaire plus formalisée (RFCs, reviews).
  • Breaking changes assumés pour qualité long terme.
  • Documentation améliorée.
  • Stabilité API garantie (contract plus strict).

Radare2 continue maintenu par pancake + core team historique avec rythme de features soutenu.

2.2 Différences pratiques 2025

DimensionRadare2Rizin
Date forkProjet original 2006Fork déc 2020
Maintenancepancake + core teamÉquipe Rizin community
API stabilityBreaking changes fréquentsPlus stable (semver strict)
CommandesStandard historiqueCompat + évolutions
DocumentationBook officiel + CLI helpBook Rizin + doc améliorée
GUICutter (migré Rizin 2021)Cutter (natif Rizin)
CommunautéForte, pancake drivenCommunity-driven
Usage 2025Users historiques, scripts legacyNouveaux users, formations

2.3 Commandes compatibles

90 % des commandes fonctionnent identiquement. Exemples :

# Ces commandes fonctionnent dans les deux
r2 /bin/ls          # ou rizin /bin/ls
aa                  # analyze all
pdf @main           # print disassembly function main
afl                 # list functions
pd 10               # print 10 instructions
s 0x401000          # seek address
V                   # visual mode

Pour Radare2 historique : r2, radare2. Pour Rizin : rizin, rz-asm, rz-find, etc.

3. Architecture des commandes

3.1 Design minimaliste

Les commandes Radare2 sont composables selon un schéma : COMMAND[SUBCOMMAND][MODIFIER][FILTER]. Une seule lettre = une commande, sous-commandes chainables.

Préfixes de commandes Radare2 par famille
──────────────────────────────────────────
 
a    analyse (analysis)
p    print (disassembly, data, hex)
s    seek (navigation)
i    info (binary info)
f    flag (labels, markers)
c    compare (binaries, strings)
d    debug
w    write (patching)
r    resize / remove
V    visual mode interactive
!    shell command
?    help (? [command] for details)
~    grep filter (pipe-like)
$    macros
@    temporary seek
>    write output to file
j    json output suffix

3.2 Les 30 commandes essentielles

Suffisant pour 80 % des workflows :

Commandes Radare2 essentielles — mémorisation prioritaire
──────────────────────────────────────────────────────────
 
Navigation
  s 0x401000         Seek address
  s main             Seek flag/symbol
  ss 100             Seek +100 bytes
  ?                  Help contextuel
  q                  Quit
 
Analysis
  aa                 Analyze all (basic)
  aaa                Analyze all (auto-name functions, strings)
  aaaa               Very deep analysis (slow on large binaries)
  af                 Analyze function at current seek
  afl                List all functions
 
Info
  ii                 List imports
  ie                 List entry points
  iS                 List sections
  iz                 List strings in data section
  izz                List strings in all sections
  is                 List symbols
 
Print / Disassembly
  pd 10              Print 10 disassembly lines
  pdf                Print function disassembly
  pdg                Print decompilation Ghidra (r2ghidra plugin)
  pdd                Print decompilation r2dec
  px 64              Print hex 64 bytes
  pv                 Print value at current seek
 
Visual Mode
  V                  Enter visual mode
  p                  Cycle view (hex/disasm/decomp)
  V:                 Visual panels mode (multi-view)
  h / j / k / l      Vim-like navigation
  q                  Exit visual
 
Flags / Markers
  f myflag=0x401000  Create flag
  fs *               List all flag spaces
  afn newname        Rename function
 
Debug
  doo                Debug reopen in debug mode
  db 0x401000        Breakpoint
  dc                 Continue
  ds                 Step into
  dso                Step over
  drr                Register references
 
Patching
  wx 90              Write bytes hex (NOP = 0x90)
  wa call main       Write assembly
  w "string"         Write ASCII
 
Scripting
  r2 -c "command" file          Run command then quit
  r2 -qc "aaa;izzj" file         JSON output for strings

3.3 Mode Visual

V entre en mode Visual, UI interactive terminal avec navigation vim-like :

Mode Visual — organisation
───────────────────────────
 
┌──────────────────────────────────────────┐
│ [hex][disasm][decomp][strings][functions]│  ← tabs via 'p' cycle
├──────────────────────────────────────────┤
│                                            │
│  Disassembly listing                       │
│  0x401000  push rbp                        │
│  0x401001  mov rbp, rsp                    │
│  0x401004  sub rsp, 0x20                   │
│  ...                                        │
│                                            │
├──────────────────────────────────────────┤
│ Status : offset flags perm                │
└──────────────────────────────────────────┘
 
Navigation :
  j/k  = up/down ligne
  h/l  = left/right byte
  p/P  = cycle views
  V:   = multi-panels mode
  ?    = help contextuel
  q    = exit

Pour les workflows hybrides, Cutter (GUI Qt basée Rizin) offre une UX plus moderne avec les avantages de Radare2 scripting.

4. Scripting r2pipe

4.1 Concept

r2pipe est une librairie dans multiple langages qui lance Radare2 en subprocess et communique via stdin/stdout. Chaque commande Radare2 supporte un suffixe j qui retourne du JSON structuré, idéal pour parsing.

4.2 Exemple Python — extraction complète d'un binaire

# Script Python avec r2pipe — extraction structurée d'un binaire
# pip install r2pipe
 
import r2pipe
import json
from pathlib import Path
 
def analyze_binary(binary_path: str) -> dict:
    """Retourne dict structuré avec info binaire + fonctions + strings + imports."""
    r2 = r2pipe.open(binary_path, flags=["-2"])  # -2 = silence stderr
 
    # Auto-analyze (aaa = basic analysis, plus rapide que aaaa)
    r2.cmd("aaa")
 
    result = {
        "file": str(Path(binary_path).resolve()),
        "info": {},
        "functions": [],
        "strings": [],
        "imports": [],
        "sections": [],
        "entry_points": [],
    }
 
    # Info binaire
    result["info"] = json.loads(r2.cmd("ij"))["bin"]
 
    # Entry points
    result["entry_points"] = json.loads(r2.cmd("iej"))
 
    # Fonctions
    functions = json.loads(r2.cmd("aflj"))
    result["functions"] = [
        {
            "name": f["name"],
            "offset": f["offset"],
            "size": f["size"],
            "calls": f.get("callrefs", []),
        }
        for f in functions
    ]
 
    # Strings
    result["strings"] = json.loads(r2.cmd("izzj"))
 
    # Imports
    result["imports"] = json.loads(r2.cmd("iij"))
 
    # Sections
    result["sections"] = json.loads(r2.cmd("iSj"))
 
    r2.quit()
    return result
 
 
if __name__ == "__main__":
    import sys
    result = analyze_binary(sys.argv[1])
    print(json.dumps(result, indent=2, default=str))

4.3 Exemple batch — traitement massif

# Batch processing — analyse de tous samples dans un répertoire
import r2pipe
import json
import csv
from pathlib import Path
from concurrent.futures import ProcessPoolExecutor
 
def extract_iocs(binary_path: str) -> dict:
    r2 = r2pipe.open(str(binary_path), flags=["-2"])
    r2.cmd("aa")
 
    iocs = {
        "file": binary_path.name,
        "sha256": r2.cmd("itj").strip(),
        "urls": [],
        "ips": [],
        "registry_keys": [],
    }
 
    # Extract strings with regex matching
    strings = json.loads(r2.cmd("izzj"))
    import re
    URL_RE = re.compile(r"https?://[^\s<>\"']+")
    IP_RE = re.compile(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b")
    REG_RE = re.compile(r"HKEY_\w+\\[^\"]+", re.IGNORECASE)
 
    for s in strings:
        text = s.get("string", "")
        iocs["urls"] += URL_RE.findall(text)
        iocs["ips"] += IP_RE.findall(text)
        iocs["registry_keys"] += REG_RE.findall(text)
 
    r2.quit()
    return iocs
 
 
def process_directory(sample_dir: Path, output_csv: Path):
    samples = list(sample_dir.glob("*.exe")) + list(sample_dir.glob("*.dll"))
 
    with ProcessPoolExecutor(max_workers=8) as executor:
        results = list(executor.map(extract_iocs, samples))
 
    # Export CSV
    with open(output_csv, "w", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=["file", "sha256", "urls", "ips", "registry_keys"])
        writer.writeheader()
        for r in results:
            r["urls"] = ";".join(r["urls"])
            r["ips"] = ";".join(r["ips"])
            r["registry_keys"] = ";".join(r["registry_keys"])
            writer.writerow(r)
 
    print(f"Processed {len(results)} samples → {output_csv}")
 
 
if __name__ == "__main__":
    process_directory(Path("/malware/samples"), Path("/malware/iocs.csv"))

4.4 Langages r2pipe disponibles

LangagePackageUsage
Pythonr2pipe (pip)Standard scripting 2025
Node.js / JavaScriptr2pipe (npm)Integration web UIs
Gor2pipe-goPipelines haute performance
Rubyr2pipe (gem)Legacy, moins actif
Rustr2pipeÉmergent, sécurité mémoire
Clibr2pipeEmbedded binary tooling
JavaCommunityMoins utilisé

5. Décompilation : r2ghidra, r2dec, RzDec

5.1 r2ghidra — pseudo-C via Ghidra

r2ghidra (community plugin, GitHub radareorg/r2ghidra) wrap le décompilateur Ghidra dans Radare2. Install via r2pm :

# Installation r2ghidra (Radare2 Package Manager)
r2pm -U
r2pm -i r2ghidra
 
# Utilisation
r2 /bin/ls
[0x00004b50]> aaa
[0x00004b50]> s main
[0x00004c40]> pdg
// Ghidra decompiler output :
// void main(int argc, char **argv) { ... }

Résultat : qualité Ghidra native dans workflow CLI Radare2. Combinaison puissante pour reverse power-users.

5.2 r2dec — décompilateur natif JavaScript

r2dec (r2pm -i r2dec) est le décompilateur écrit en JavaScript basé sur ESIL (Evaluable String Intermediate Language de Radare2). Plus léger, plus rapide, mais qualité inférieure à Ghidra sur obfuscation ou optimisations compilateur.

# Utilisation r2dec
[0x00004c40]> pdd
 
// Output pseudo-C r2dec style :
// int64_t main(int32_t argc, char **argv) {
//     // ...
// }

5.3 RzDec — natif Rizin

Successeur de r2dec pour Rizin, activement développé par la team Rizin. Intégré de plus en plus dans Cutter.

5.4 Matrice qualité décompilation

DécompilateurQualité x86Qualité ARMVitesseIntégration Radare2
r2ghidra (wrap Ghidra)Élevée (85-90 %)ÉlevéeMoyenneCommande pdg
r2decMoyenne (55-70 %)MoyenneRapideCommande pdd
RzDecÉmergentÉmergentRapideCommande pdd Rizin
Ghidra standaloneRéférence OSSÉlevéeMoyenneN/A (Ghidra séparé)
Hex-Rays IDA ProRéférence industrieÉlevéeRapideVia plugins payants séparés

Pattern 2025 recommandé : installer r2ghidra + r2dec en complément dans Radare2 — choisir selon vitesse vs qualité par sample.

6. Cutter GUI

6.1 Qu'est-ce que Cutter

Cutter est une GUI Qt/C++ développée initialement en 2017 pour Radare2, migrée vers Rizin en 2021 comme backend par défaut. Elle offre :

  • Disassembly view + Decompiler panel (via r2ghidra, RzDec).
  • Graph view (CFG) interactive.
  • Debugger UI.
  • Python scripting console.
  • Plugins architecture.

Positionnement : alternative moderne libre à IDA Pro avec backend OSS Rizin. Version 2.4.x en 2025.

6.2 Cutter vs Radare2 CLI

Cutter vs Radare2 CLI — quand choisir
──────────────────────────────────────
 
CUTTER GUI recommandé pour :
  ├─ Débutants reverse engineering
  ├─ Analyse manuelle exploratoire
  ├─ Workflow hybride CLI + GUI
  ├─ Formations et enseignement
  └─ Users venant de IDA Pro / Ghidra
 
RADARE2 CLI PUR recommandé pour :
  ├─ Power users maîtrisant les commandes
  ├─ Automation scripting intensif
  ├─ Workflows SSH remote / VMs headless
  ├─ Pipeline CI/CD malware analysis
  └─ Architectures exotiques sans support Cutter

Cutter est installable via .AppImage (Linux), .dmg (macOS), .exe (Windows) depuis rizin.re/cutter/. Version open-source complète, pas de fonctionnalité payante.

7. Radare2 vs Ghidra vs IDA Pro vs Binary Ninja

7.1 Matrice comparative

CritèreRadare2/RizinGhidraIDA ProBinary Ninja
LicenceLGPLv3 OSSApache 2.0 OSSCommercialCommercial
Prix0 €0 €~7000 $ + 1800 $/an500-2000 $
GUI nativeCutter (optionnelle)Code Browser JavaQt IDAQt
CLI firstOui (philosophie)Non (headless mode)idat (secondaire)API secondaire
Scriptingr2pipe multi-langJython, Ghidrathon, JavaIDAPythonPython, C++
DécompilateurVia r2ghidra/r2decNatif multi-archHex-Rays (plugin payant)Natif IL-based
Architectures40+40+ SLEIGH100+~30
DebuggerIntégré CLI10+ intégréNatif matureAPI
CollaborationGit-basedGhidra ServerIDA Teams (payant)Enterprise Server
Automation CLI / batchExcellentBon (headless)Correct (idat)Correct (API)
Performance sur gros binairesExcellent CLIMoyen UIExcellentExcellent
Communauté FRForte (pancake, SSTIC)Large mais moins FRLargeMoyenne
Courbe apprentissageTrès raideModéréeModéréeModérée

7.2 Recommandations par cas d'usage

Cas d'usageOutil préféré
Malware analysis standardGhidra
Malware analysis batch > 100 samples/jourRadare2 CLI + r2pipe
Firmware IoT exotiqueRadare2 + SLEIGH Ghidra si archi supportée
CTF binary simpleGhidra ou Cutter
CTF binary rapide timerRadare2 CLI (vitesse)
Enseignement / étudiantsGhidra (UX plus accessible)
Enseignement power-usersRadare2
Enterprise malware teamGhidra + IDA Pro complémentaire
Forensic disk imagingRadare2 (historique forensic)
Embedded / retro consolesRadare2 (archs exotiques)

8. Cas d'usage concrets 2025

8.1 Pipeline malware automation

Cas : entreprise de threat intel traite 500 samples/jour, besoin extraction IoCs + classification automatique.

#!/bin/bash
# pipeline_malware.sh
 
for sample in /malware/inbox/*.exe; do
    # Analyse rapide Radare2 → JSON structuré
    r2 -qc "aaa;ij;aflj;izzj;iij" "$sample" > /malware/output/$(basename "$sample").json
 
    # YARA scan en parallèle
    yara /yara/rules.yar "$sample" > /malware/output/$(basename "$sample").yara
 
    # Hash + VirusTotal API si configuré
    sha256=$(sha256sum "$sample" | cut -d' ' -f1)
    curl -s -H "x-apikey: $VT_KEY" "https://www.virustotal.com/api/v3/files/$sha256" \
        > /malware/output/$(basename "$sample").vt.json
 
    mv "$sample" /malware/processed/
done
 
# Indexation résultats dans OpenCTI ou MISP
python3 /scripts/push_to_misp.py /malware/output/

Radare2 shines ici grâce à sa vitesse CLI + JSON output natif.

8.2 Architectures exotiques

Exemple : reverse de firmware d'un périphérique industriel propriétaire, architecture custom 8-bit non supportée par Ghidra.

Radare2 permet d'écrire un plugin assembler/disassembler en Python via r2pipe ou C via l'API native, pour ajouter support architecture propriétaire en quelques jours-homme.

8.3 CTF binary fast solve

Lors d'un CTF time-constrained, Radare2 CLI permet des workflows ultra-rapides :

# CTF binary — solution en 2 minutes
r2 -A ./crackme
[0x00400540]> izz~flag       # grep strings pour "flag"
0x00601080 16 flag{try_harder_lol}
 
[0x00400540]> afl             # list functions
0x00400530 4 49 entry0
0x00400560 3 18 sym.imp.printf
0x00400580 1 40 sym.check_password
 
[0x00400540]> pdf @ sym.check_password
# Lecture assembly + détection pattern XOR simple
 
[0x00400540]> s 0x4005c0      # seek au XOR
[0x004005c0]> px 32 @ 0x601100    # hex dump target bytes

8.4 Forensic disk imaging

Origine historique Radare2. Support natif pour :

  • Disk images raw (.img, .dd).
  • Partitions (GPT, MBR).
  • Memory dumps (format brut).
  • Filesystems via plugins (fs_ext2, fs_ntfs).

Cas d'usage niche mais où Radare2 reste unique : analyste forensic qui veut naviguer un dump mémoire ou un disque corrompu avec un outil unifié.

8.5 Embedded / retro gaming

Radare2 supporte Game Boy Advance (ARM7), NES (6502), Atari (6502), Mega Drive (m68k), Saturn (SH-2). Communauté active autour du reverse consoles retro et bornes d'arcade historiques.

9. Limites et compléments

9.1 Quand ne pas utiliser Radare2

ContexteAlternative préférée
Débutant reverse engineeringGhidra (UX plus accessible)
Mobile Android DEXjadx (spécialisé Java)
Mobile iOS Objective-C/SwiftGhidra + class-dump + Hopper
Binaires > 1 GBIDA Pro (performance UI)
Formats firmware très exotiquesIDA Pro (loaders larges)
Workflow enterprise avec support commercialIDA Pro ou Binary Ninja
Décompilation qualité maximaleGhidra standalone ou IDA Pro Hex-Rays

9.2 Compléments

Radare2 s'articule avec :

  • Ghidra : pour décompilation qualité (via r2ghidra).
  • Wireshark / mitmproxy : analyse réseau malware.
  • Volatility : memory forensics.
  • YARA : classification.
  • Binwalk : extraction firmware amont de Radare2.
  • GDB / LLDB : debugger alternatif si contexte le demande.

10. Courbe d'apprentissage et ressources 2025

10.1 Parcours débutant recommandé

Apprendre Radare2 en 4 semaines — parcours structuré
─────────────────────────────────────────────────────
 
Semaine 1 — Installation et commandes de base
  ├─ Installation (apt install radare2 ou build from source)
  ├─ r2 -A /bin/ls
  ├─ Mémoriser 15 commandes essentielles (a, aa, s, p, pd, V, q, ?)
  └─ Tutoriel radareorg/radare2book chapitre 1-2
 
Semaine 2 — Workflows reverse classiques
  ├─ Analyse d'une dizaine de CrackMes.one 1-2 étoiles
  ├─ Visual mode (V) et multi-panels (V:)
  ├─ Flags et annotations (f, afn)
  └─ Export résultats (> file, j suffix)
 
Semaine 3 — Scripting et décompilation
  ├─ Installation r2ghidra via r2pm
  ├─ r2pipe Python — premier script analyse
  ├─ Décompilation pdg et pdd
  └─ Batch processing sur corpus
 
Semaine 4 — Niveau intermédiaire
  ├─ Cutter GUI installation et workflow hybride
  ├─ Debugger r2 pour dynamic analysis
  ├─ Plugin development (Python r2pipe class)
  └─ CTF reverse participation avec stack Radare2

10.2 Ressources

  • Livre officiel : radareorg.github.io/radare2book (gratuit, communautaire).
  • Cheatsheet : radare.org/get/cutter-cheatsheet.pdf.
  • Tutoriels vidéo : pancake conférences (SSTIC, DEF CON), Megabeets YouTube.
  • Pratique : crackmes.one, HackTheBox reverse challenges, Flare-On CTF.
  • Communauté : Discord r2con, Twitter/X @radare2org, @trufae (pancake).
  • FR : SSTIC presentations pancake, Pass the SALT FR.

11. Points clés à retenir

  • Radare2 (r2) = framework reverse CLI-first open-source LGPLv3 créé 2006 par pancake, ~20 000 stars GitHub fin 2024, référence 3e après IDA Pro et Ghidra.
  • Rizin = fork décembre 2020 du codebase Radare2, modernisation gouvernance + API, compatibilité 90 % commandes, Cutter migré Rizin 2021.
  • Philosophie CLI-first : workflow terminal, scripting roi via r2pipe (Python/Go/JS/Ruby/Rust/C), JSON output suffixe j, automation native.
  • Décompilation via plugins : r2ghidra (wrap Ghidra, qualité élevée, commande pdg), r2dec (JavaScript natif, rapide mais moins bon, commande pdd), RzDec (Rizin natif).
  • Cutter GUI : Qt/C++, basée Rizin depuis 2021, version 2.4.x en 2025 — alternative libre à IDA Pro avec UX moderne.
  • 40+ architectures supportées via modular backend : x86, ARM, MIPS, PowerPC, RISC-V, 8051, Z80, GameBoy, m68k, SuperH, AVR, PIC, etc.
  • Cas d'usage 2025 : pipeline malware batch 100-1000 samples/jour, architectures exotiques, forensic disk imaging, CTF rapide, embedded/retro consoles.
  • Vs Ghidra : Ghidra plus accessible débutants + GUI native + décompilateur natif ; Radare2 plus rapide CLI + automation plus puissante + archs exotiques.
  • Vs IDA Pro : Radare2 gratuit vs ~7000 $ IDA ; IDA Pro UI plus rapide gros binaires + loaders plus larges + écosystème plugins commerciaux plus mature.
  • Courbe apprentissage raide (2-4 semaines pour productif, 3-6 mois maîtrise) mais rentabilisé pour automation + niche use cases.
  • Communauté FR active via pancake, SSTIC, Pass the SALT, culture hacker forte.

Pour le comparatif Ghidra détaillé, voir Ghidra : à quoi ça sert. Pour la vue d'ensemble analyse binaire statique vs dynamique, Analyse statique vs dynamique. Pour apprendre le reverse engineering progressivement, Comment apprendre le reverse engineering. Pour le socle assembleur préalable, Pourquoi apprendre l'assembleur en cybersécurité. Pour les vulnérabilités binaires à rechercher, Qu'est-ce qu'un buffer overflow.

Questions fréquentes

  • Qu'est-ce que Radare2 exactement ?
    Radare2 (r2) est un framework de reverse engineering open-source LGPLv3 créé par Sergi 'pancake' Àlvarez Capilla en 2006, initialement pour faire du forensic sur des disques. Il est devenu sur 18+ ans la référence des outils reverse en ligne de commande (CLI-first), avec support plus de 40 architectures (x86/x64, ARM/AArch64, MIPS, PowerPC, RISC-V, 8051, Z80, GameBoy, m68k, SPARC, SuperH, AVR, etc.), tous formats de binaires majeurs (PE, ELF, Mach-O, raw, firmware, DEX), scripting extensif via r2pipe (Python, Ruby, Go, JS, Rust, C), debugger intégré, emulation ESIL. Son design radicalement différent de Ghidra/IDA : CLI d'abord, GUI en secondaire via Cutter. Typique pour automation malware analysis à grande échelle, CI/CD sécurité, architectures exotiques. ~20 000 stars GitHub radareorg/radare2 fin 2024. Rizin fork (2020) est une alternative modernisée du même codebase.
  • Radare2 vs Rizin : lequel utiliser en 2025 ?
    Les deux, selon contexte. Rizin est un fork de Radare2 démarré en décembre 2020 par une partie de la communauté initiale + nouveaux contributeurs, avec l'objectif de moderniser le codebase, améliorer la qualité du code et la gouvernance communautaire. Rizin maintient compatibilité API et UX avec Radare2 + ajoute ses propres améliorations (API plus propre, breaking changes assumés, meilleure doc). Radare2 continue maintenu par pancake + core team historique avec rythme soutenu. En 2025 : Rizin recommandé pour nouveaux utilisateurs (plus accessible, Cutter est basé Rizin depuis 2021), Radare2 recommandé pour users historiques, formations existantes et scripts legacy (compat API). Les deux partagent 80 % du code et 90 % des commandes. Cutter est la GUI développée d'abord pour Radare2 puis migré Rizin en 2021. Convergence future possible mais non-actée en 2025.
  • Pourquoi choisir Radare2 si Ghidra est gratuit et plus facile ?
    Cinq raisons pragmatiques. 1) Pipeline automation pure — Radare2 CLI est fondamentalement meilleur que Ghidra headless pour batch processing 1000+ samples/jour avec contraintes performance. r2pipe multi-langage (Python, Ruby, Go, JS, Rust) offre flexibilité scripting massive. 2) Exotic architectures — Radare2 supporte certaines architectures GameBoy, consoles retro, firmware industriels où Ghidra SLEIGH n'a pas encore de processor defined. 3) Workflow terminal only — pour workflows Linux headless, SSH uniquement, VM minimales, Radare2 n'exige pas de Java/GUI. 4) Forensic disk imaging — Radare2 a historiquement supporté les disk images, partitions, memory dumps avec fonctionnalités que Ghidra ne couvre pas. 5) Community culture — écosystème plugins plus léger et hackable, barrier to entry plus basse pour contribuer. Règle 2025 : Ghidra pour 80 % cas d'usage reverse standard, Radare2/Rizin pour niches automation + archs exotiques + forensic disk.
  • Qu'est-ce que r2pipe et pourquoi c'est important ?
    r2pipe est l'API qui permet de piloter Radare2 depuis n'importe quel langage (Python, Ruby, Go, JavaScript, Rust, C). Architecture : Radare2 tourne en subprocess, r2pipe envoie des commandes via pipe stdin et reçoit la sortie via stdout. Les commandes Radare2 supportent un suffixe 'j' qui retourne du JSON — idéal pour parsing programmatic. Ex: 'aflj' (fonctions en JSON), 'iij' (imports JSON), 'izj' (strings JSON). Un script Python avec r2pipe peut : ouvrir un binaire, analyser, extraire fonctions+strings+imports, appliquer règles YARA internes, retourner un JSON structuré — tout ça en 50-100 lignes. C'est le levier principal pour automation à l'échelle. En 2025, r2pipe est utilisé par des pipelines de threat intel privés et des services type MalwareBazaar pour enrichissement automatique.
  • Comment Radare2 se décompile vers du pseudo-C ?
    Radare2/Rizin n'a pas de décompilateur natif historique. Trois options 2025 : 1) r2ghidra (community plugin) — wrap le décompilateur Ghidra sous forme de plugin Radare2, commande 'pdg' dans r2. Excellente qualité car utilise Ghidra decompiler. Installation via r2pm. 2) r2dec (radare org) — décompilateur natif Radare2 en JavaScript, décompile depuis ESIL, qualité inférieure à Ghidra/Hex-Rays mais rapide et natif r2. Commande 'pdd'. 3) Rizin Decomp (RzDec) — équivalent r2dec pour Rizin, activement développé. Pattern 2025 : installer r2ghidra pour qualité décompilation + r2dec en fallback si rapide nécessaire. Cutter (GUI Radare2/Rizin) affiche le décompilateur en panel séparé comme Ghidra. Pour projets exigeant décompilation haute qualité, combiner Radare2 pour automation + Ghidra pour analyse manuelle approfondie reste le pattern observé.
  • Comment débuter avec Radare2 en 2025 ?
    Courbe d'apprentissage raide mais franchissable en 2-4 semaines pour un reverser motivé. Parcours recommandé : 1) Installation via package manager (apt install radare2 Ubuntu, brew install radare2 macOS, build from source pour dernière version). 2) Lancer 'r2 -A /bin/ls' — flag -A = auto-analyze. 3) Commandes essentielles à mémoriser (30 en une semaine) : 'a' = analyze, 'p' = print, 's' = seek, 'v' = visual, 'V' = visual mode fullscreen, '?' = help contextuel. 4) CrackMes.one challenges progressifs 1-5 étoiles. 5) Tutorials officiels radareorg/radare2book, Megabeets tutorials, Whitchard HackerRecipes r2 section. 6) Installation r2ghidra pour pseudo-C visible. 7) Cutter pour workflows hybrides CLI + GUI. En 2025, alternative Rizin avec Cutter GUI offre une entrée plus accessible, Radare2 CLI pur reste pour ceux qui veulent workflow power-user 100 % clavier.

Écrit par

Naim Aouaichia

Expert cybersécurité et fondateur de Zeroday Cyber Academy

Expert cybersécurité avec un master spécialisé et un parcours hybride : développement, DevOps, DevSecOps, SOC, GRC. Fondateur de Hash24Security et Zeroday Cyber Academy. Formateur et créateur de contenu technique sur la cybersécurité appliquée, la sécurité des LLM et le DevSecOps.