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étodo | Cómo |
|---|
| Release | Descargar desde GitHub Releases (Windows/Linux/macOS) |
| GUI | Ejecutar reko (UI WPF/Avalonia) |
| CLI | decompile / reko-cli binario |
| Desde source | Compilar la solución .NET |
| Verificar | reko-cli --version |
Descompilación de línea de comandos
| Comando | Descripción |
|---|
reko-cli binary.exe | Descompilar con autodetección de formato |
reko-cli --arch x86-protected-32 raw.bin | Forzar una arquitectura |
reko-cli --base 0x8000 raw.bin | Establecer la dirección de carga |
reko-cli --loader raw ... | Tratar entrada como imagen raw |
reko-cli -o outdir binary | Directorio de salida |
# Descompilar una ROM Z80 raw cargada en 0x0000
reko-cli --loader raw --arch z80 --base 0x0000 game.rom
Artefactos de salida
| Archivo | Contiene |
|---|
*.c | Código fuente descompilado |
*.h | Declaraciones de tipo/struct recuperadas |
*.dis | Listado de desassembly |
*.reko | Archivo de proyecto (recargar en la GUI) |
| Call graph | Estructura del programa |
Arquitecturas soportadas (selección)
| Modernas | Antiguas / embebidas |
|---|
| x86 / x86-64 | 6502 / 65C02 |
| ARM / AArch64 | Z80 / 8080 |
| MIPS | 68000 (m68k) |
| PowerPC | VAX, PDP-11 |
| SPARC | 8051, AVR |
| RISC-V | Cray, 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
| Fase | Hace |
|---|
| Carga | Parsing del contenedor (PE/ELF/raw/etc.) |
| Escaneo | Descubrir código vs datos, encontrar procedimientos |
| Reescritura | Levantar instrucciones a una representación intermedia |
| Análisis | Flujo de datos, inferencia de tipos, recuperación de estructura |
| Estructuración | Reconstruir loops y condicionales |
| Salida | Emitir 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
| Tarea | Cómo |
|---|
| Abrir un binario | File → Open, elegir loader/arch si se pregunta |
| Explorar procedimientos | Panel de lista de procedimientos |
| Ver C descompilado | Panel de código por procedimiento |
| Renombrar/retipificar | Editar símbolos para mejorar salida |
| Re-ejecutar análisis | Reanalyze después de anotaciones |
| Guardar proyecto | Archivo .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
| Problema | Solución |
|---|
| Código visto como datos | Marcar puntos de entrada / inicios de procedimiento |
| Dirección de carga equivocada | Establecer --base correctamente |
| Salida garbled | Confirmar arquitectura y endianness |
| Nombres para todo faltando | Renombrar procedimientos/variables mientras aprendes |
| Firmas faltantes | Proporcionar archivos de metadatos de tipo/firma |
Reko vs otros descompiladores
| Aspecto | Reko | Ghidra | RetDec |
|---|
| Arquitecturas antiguas | Excepcional | Bueno | Moderado |
| GUI interactiva | Sí | Sí (más rica) | No |
| Batch scriptable | Sí (CLI) | Sí | Sí |
| Lenguaje | C# | Java | C++ |
| Mejor para | Objetivos retro/exóticos | RE interactivo general | Batch, pipelines embebidos |
Usa Ghidra para RE interactivo mainstream y RetDec para pipelines batch; Reko gana su lugar cuando la arquitectura es inusual.
Recursos