RetDec - Décompilateur Machine-Code Reciblable
RetDec (Retargetable Decompiler, par Avast) est un décompilateur machine-code open-source qui convertit les binaires compilés en code de haut niveau lisible. « Reciblable » est la propriété clé : plutôt que d’être construit pour une architecture, il lève de nombreux ensembles d’instructions — x86, ARM, MIPS, PIC32, PowerPC — en LLVM IR, puis décompile cette représentation commune en C ou un pseudocode de type Python. Il s’exécute en tant qu’application autonome et s’intègre avec IDA, Ghidra et radare2.
Installation
| Méthode | Comment |
|---|
| Version | Télécharger le paquet précompilé depuis GitHub Releases |
| De source | Construction CMake (voir les docs de compilation du dépôt) |
| Docker | docker run -v "$PWD:/dst" retdec/retdec |
| Vérifier | retdec-decompiler --version |
Décompilation de Base
| Commande | Description |
|---|
retdec-decompiler binary.exe | Décompiler vers binary.exe.c |
retdec-decompiler -o out.c binary | Choisir le chemin de sortie |
retdec-decompiler --backend-no-debug binary | Sortie plus propre |
retdec-decompiler --cleanup binary | Supprimer les fichiers intermédiaires |
retdec-decompiler --help | Liste complète des options |
# Décompiler et lire le résultat
retdec-decompiler suspicious.exe
less suspicious.exe.c
| Drapeau | Produit |
|---|
| (par défaut) | Source C |
-f py | Pseudocode de type Python |
--backend-emit-cfg | Graphiques de flux de contrôle |
--backend-emit-cg | Graphique d’appels |
--config out.json | Config d’analyse structurée/résultats |
| LLVM IR | Sortie .ll intermédiaire lors de la décompilation |
Architectures Supportées
| Architecture | Formats |
|---|
| x86 / x86-64 | PE, ELF, Mach-O |
| ARM / Thumb | ELF, PE, raw |
| MIPS | ELF, raw |
| PIC32 | ELF, Intel HEX |
| PowerPC | ELF |
La couverture d’architecture large rend RetDec particulièrement utile pour le travail embarqué et de firmware, où les binaires MIPS et PIC32 sont courants et les décompilateurs grand public offrent moins.
Options Utiles
| Option | Effet |
|---|
-a arch | Forcer une architecture |
-e endian | Définir l’ordre des octets (little/big) |
-m mode | Mode : bin, raw, ll |
--raw-entry-point ADDR | Point d’entrée pour les binaires bruts |
--raw-section-vma ADDR | Adresse de chargement pour le code brut |
--select-ranges A-B | Décompiler uniquement une plage d’adresses |
--select-functions f1,f2 | Décompiler des fonctions spécifiques |
# Blob de firmware brut : dire à RetDec comment le charger
retdec-decompiler -m raw -a mips -e big \
--raw-entry-point 0x80000000 --raw-section-vma 0x80000000 firmware.bin
Fonctionnalités d’Analyse
| Fonctionnalité | Fournit |
|---|
| Détection de format de fichier | Analyse PE/ELF/Mach-O |
| Détection de compilateur/empaqueur | Empreinte digitale de la chaîne d’outils |
| Identification de fonction basée sur signature | Reconnaître le code de bibliothèque liée statiquement |
| Reconstruction de type | Récupérer les structures et les types |
| Utilisation des infos de débogage | DWARF/PDB quand disponible |
L’identification de fonction de bibliothèque est très importante en pratique : elle vous permet de sauter les milliers de lignes de libc liée statiquement et de vous concentrer sur la logique propre de l’application.
Intégrations
| Outil | Plugin |
|---|
| IDA Pro | Plugin RetDec IDA |
| Ghidra | Plugin RetDec Ghidra |
| radare2 | r2retdec |
| API | Décompiler programmatiquement via CLI/config |
RetDec vs Autres Décompilateurs
| Aspect | RetDec | Ghidra | Hex-Rays (IDA) | Binary Ninja |
|---|
| Coût | Gratuit/open-source | Gratuit/open-source | Commercial | Commercial |
| Architectures | Nombreuses (incl. PIC32) | Nombreuses | Nombreuses (licence par décompilateur) | Nombreuses |
| Interactif | Non (batch) | Oui (GUI) | Oui | Oui |
| Meilleur pour | Décompilation batch/scriptée, embarqué | Travail RE interactif | Sortie de qualité la plus élevée | API/UX moderne |
Complète Ghidra pour le travail interactif — RetDec brille pour les pipelines automatisés et les architectures inhabituelles.
Ressources