Ir al contenido

Reko - Descompilador binario de código abierto

Reko - Descompilador binario de código abierto

Reko es un descompilador binario de código abierto escrito en C# que convierte código máquina en código fuente legible tipo C. Su característica destacable es la amplitud de arquitectura, especialmente para plataformas antiguas y exóticas: junto con x86, x64 y ARM maneja 6502, Z80, 68000, VAX, PDP-11, SPARC, PowerPC y muchas más. Eso lo convierte en la opción práctica para retrocomputación, firmware antiguo y objetivos embebidos donde las herramientas mainstream no tienen soporte alguno. Ofrece tanto GUI como descompilador de línea de comandos.

Instalación

MétodoCómo
ReleaseDescargar desde GitHub Releases (Windows/Linux/macOS)
GUIEjecutar reko (UI WPF/Avalonia)
CLIdecompile / reko-cli binario
Desde sourceCompilar la solución .NET
Verificarreko-cli --version

Descompilación de línea de comandos

ComandoDescripción
reko-cli binary.exeDescompilar con autodetección de formato
reko-cli --arch x86-protected-32 raw.binForzar una arquitectura
reko-cli --base 0x8000 raw.binEstablecer la dirección de carga
reko-cli --loader raw ...Tratar entrada como imagen raw
reko-cli -o outdir binaryDirectorio de salida
# Descompilar una ROM Z80 raw cargada en 0x0000
reko-cli --loader raw --arch z80 --base 0x0000 game.rom

Artefactos de salida

ArchivoContiene
*.cCódigo fuente descompilado
*.hDeclaraciones de tipo/struct recuperadas
*.disListado de desassembly
*.rekoArchivo de proyecto (recargar en la GUI)
Call graphEstructura del programa

Arquitecturas soportadas (selección)

ModernasAntiguas / embebidas
x86 / x86-646502 / 65C02
ARM / AArch64Z80 / 8080
MIPS68000 (m68k)
PowerPCVAX, PDP-11
SPARC8051, AVR
RISC-VCray, Alpha y más

Esta es la razón para optar por Reko: cuando el binario es de una consola de 1980, un controlador industrial o una mainframe, otros descompiladores simplemente no lo cargan.

El pipeline de descompilación

FaseHace
CargaParsing del contenedor (PE/ELF/raw/etc.)
EscaneoDescubrir código vs datos, encontrar procedimientos
ReescrituraLevantar instrucciones a una representación intermedia
AnálisisFlujo de datos, inferencia de tipos, recuperación de estructura
EstructuraciónReconstruir loops y condicionales
SalidaEmitir C y headers

Entender las fases ayuda cuando la salida es pobre — normalmente la solución es guiar la fase de escaneo con puntos de entrada correctos y direcciones de carga.

Trabajar en la GUI

TareaCómo
Abrir un binarioFile → Open, elegir loader/arch si se pregunta
Explorar procedimientosPanel de lista de procedimientos
Ver C descompiladoPanel de código por procedimiento
Renombrar/retipificarEditar símbolos para mejorar salida
Re-ejecutar análisisReanalyze después de anotaciones
Guardar proyectoArchivo .reko preserva tus anotaciones

Iterar — anotar, re-analizar, leer de nuevo — es cómo obtienes salida genuinamente legible de un binario stripped.

Mejorando la calidad de salida

ProblemaSolución
Código visto como datosMarcar puntos de entrada / inicios de procedimiento
Dirección de carga equivocadaEstablecer --base correctamente
Salida garbledConfirmar arquitectura y endianness
Nombres para todo faltandoRenombrar procedimientos/variables mientras aprendes
Firmas faltantesProporcionar archivos de metadatos de tipo/firma

Reko vs otros descompiladores

AspectoRekoGhidraRetDec
Arquitecturas antiguasExcepcionalBuenoModerado
GUI interactivaSí (más rica)No
Batch scriptableSí (CLI)
LenguajeC#JavaC++
Mejor paraObjetivos retro/exóticosRE interactivo generalBatch, pipelines embebidos

Usa Ghidra para RE interactivo mainstream y RetDec para pipelines batch; Reko gana su lugar cuando la arquitectura es inusual.

Recursos