Ir al contenido

RetDec - Descompilador de código máquina retargetable

RetDec - Descompilador de código máquina retargetable

RetDec (Retargetable Decompiler, por Avast) es un descompilador de código máquina de código abierto que convierte binarios compilados nuevamente en código legible de alto nivel. “Retargetable” es la propiedad clave: en lugar de ser construido para una arquitectura, levanta muchos conjuntos de instrucciones — x86, ARM, MIPS, PIC32, PowerPC — a LLVM IR, luego descompila esa representación común a C o pseudocódigo tipo Python. Se ejecuta de forma independiente e integra con IDA, Ghidra y radare2.

Instalación

MétodoCómo
Build de releaseDescargar el paquete precompilado desde GitHub Releases
Desde sourceBuild de CMake (ver docs de build del repo)
Dockerdocker run -v "$PWD:/dst" retdec/retdec
Verificarretdec-decompiler --version

Descompilación básica

ComandoDescripción
retdec-decompiler binary.exeDescompilar a binary.exe.c
retdec-decompiler -o out.c binaryElegir la ruta de salida
retdec-decompiler --backend-no-debug binarySalida más limpia
retdec-decompiler --cleanup binaryEliminar archivos intermedios
retdec-decompiler --helpLista completa de opciones
# Descompilar y leer el resultado
retdec-decompiler suspicious.exe
less suspicious.exe.c

Formatos de salida

FlagProduce
(por defecto)Código fuente C
-f pyPseudocódigo tipo Python
--backend-emit-cfgGrafos de flujo de control
--backend-emit-cgGrafo de llamadas
--config out.jsonConfiguración/resultados de análisis estructurados
LLVM IRSalida .ll intermedia durante la descompilación

Arquitecturas soportadas

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

La cobertura amplia de arquitectura hace que RetDec sea particularmente útil para trabajo embebido y firmware, donde binarios MIPS y PIC32 son comunes y los descompiladores mainstream ofrecen menos.

Opciones útiles

OpciónEfecto
-a archForzar una arquitectura
-e endianEstablecer endianness (little/big)
-m modeModo: bin, raw, ll
--raw-entry-point ADDRPunto de entrada para binarios raw
--raw-section-vma ADDRDirección de carga para código raw
--select-ranges A-BDescompilar solo un rango de direcciones
--select-functions f1,f2Descompilar funciones específicas
# Blob de firmware raw: decirle a RetDec cómo cargarlo
retdec-decompiler -m raw -a mips -e big \
  --raw-entry-point 0x80000000 --raw-section-vma 0x80000000 firmware.bin

Características de análisis

CaracterísticaProporciona
Detección de formato de archivoParsing de PE/ELF/Mach-O
Detección de compilador/packerHuella digital de la cadena de herramientas
ID de función basada en firmaReconocer código de librería cargado estáticamente
Reconstrucción de tiposRecuperar estructuras y tipos
Uso de info de debugDWARF/PDB cuando disponible

La identificación de función de librería importa mucho en la práctica: te permite saltar los miles de líneas de libc cargado estáticamente y enfocarte en la lógica propia de la aplicación.

Integraciones

HerramientaPlugin
IDA ProPlugin RetDec para IDA
GhidraPlugin RetDec para Ghidra
radare2r2retdec
APIDescompilar programáticamente vía CLI/config

RetDec vs otros descompiladores

AspectoRetDecGhidraHex-Rays (IDA)Binary Ninja
CostoLibre/código abiertoLibre/código abiertoComercialComercial
ArquitecturasMuchas (incl. PIC32)MuchasMuchas (por licencia descompilador)Muchas
InteractivoNo (batch)Sí (GUI)
Mejor paraDescompilación batch/scripted, embebidoRE interactivoSalida de máxima calidadAPI/UX modernos

Complementa Ghidra para trabajo interactivo — RetDec destaca para pipelines automatizados y arquitecturas inusuales.

Recursos