Aller au contenu

RetDec - Décompilateur Machine-Code Reciblable

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éthodeComment
VersionTélécharger le paquet précompilé depuis GitHub Releases
De sourceConstruction CMake (voir les docs de compilation du dépôt)
Dockerdocker run -v "$PWD:/dst" retdec/retdec
Vérifierretdec-decompiler --version

Décompilation de Base

CommandeDescription
retdec-decompiler binary.exeDécompiler vers binary.exe.c
retdec-decompiler -o out.c binaryChoisir le chemin de sortie
retdec-decompiler --backend-no-debug binarySortie plus propre
retdec-decompiler --cleanup binarySupprimer les fichiers intermédiaires
retdec-decompiler --helpListe complète des options
# Décompiler et lire le résultat
retdec-decompiler suspicious.exe
less suspicious.exe.c

Formats de Sortie

DrapeauProduit
(par défaut)Source C
-f pyPseudocode de type Python
--backend-emit-cfgGraphiques de flux de contrôle
--backend-emit-cgGraphique d’appels
--config out.jsonConfig d’analyse structurée/résultats
LLVM IRSortie .ll intermédiaire lors de la décompilation

Architectures Supportées

ArchitectureFormats
x86 / x86-64PE, ELF, Mach-O
ARM / ThumbELF, PE, raw
MIPSELF, raw
PIC32ELF, Intel HEX
PowerPCELF

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

OptionEffet
-a archForcer une architecture
-e endianDéfinir l’ordre des octets (little/big)
-m modeMode : bin, raw, ll
--raw-entry-point ADDRPoint d’entrée pour les binaires bruts
--raw-section-vma ADDRAdresse de chargement pour le code brut
--select-ranges A-BDécompiler uniquement une plage d’adresses
--select-functions f1,f2Dé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 fichierAnalyse PE/ELF/Mach-O
Détection de compilateur/empaqueurEmpreinte digitale de la chaîne d’outils
Identification de fonction basée sur signatureReconnaître le code de bibliothèque liée statiquement
Reconstruction de typeRécupérer les structures et les types
Utilisation des infos de débogageDWARF/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

OutilPlugin
IDA ProPlugin RetDec IDA
GhidraPlugin RetDec Ghidra
radare2r2retdec
APIDécompiler programmatiquement via CLI/config

RetDec vs Autres Décompilateurs

AspectRetDecGhidraHex-Rays (IDA)Binary Ninja
CoûtGratuit/open-sourceGratuit/open-sourceCommercialCommercial
ArchitecturesNombreuses (incl. PIC32)NombreusesNombreuses (licence par décompilateur)Nombreuses
InteractifNon (batch)Oui (GUI)OuiOui
Meilleur pourDécompilation batch/scriptée, embarquéTravail RE interactifSortie de qualité la plus élevéeAPI/UX moderne

Complète Ghidra pour le travail interactif — RetDec brille pour les pipelines automatisés et les architectures inhabituelles.

Ressources