RetDec Imortek · v2.0.21

Un descompilador que recupera el algoritmo, no solo el código

A menudo las organizaciones necesitan entender software del que no tienen el código fuente: un sistema antiguo, un componente comprado, algo que ha llegado y tiene mala pinta. Ya existen herramientas que convierten el código máquina de vuelta en pasos legibles. RetDec Imortek intenta ir un paso más allá y poner nombre a esos pasos — esta parte es el Estándar de Cifrado Avanzado (AES), esta parte es una ordenación, esta parte es cómo se empaquetan los datos para enviarlos.

LenguajeC++
Versiónv2.0.21
UpstreamRetDec v5.0
Estrellas2
Último envíohace poco
Por qué hacer un fork de RetDec

El RetDec v5.0 upstream lleva inactivo desde 2022. Sigue siendo uno de los pocos descompiladores abiertos con un front end de verdad amplio — y esa amplitud merece la pena mantenerla viva.

AñadidoRecuperación semántica de bibliotecas
AñadidoInterfaz Qt 6
AñadidoRefinamiento neuronal opcional sin conexión
AñadidoDetección de algoritmos, concurrencia y serialización
En lenguaje llano

Qué es esto, en un minuto

El problema

El software se entrega como algo que lee una máquina y una persona no. Cuando no hay código fuente — el proveedor ya no está, el contrato nunca lo incluyó, el archivo llegó de un sitio del que no te fías — nadie puede decir qué hace realmente el programa. Comprobarlo a mano significa leer instrucciones máquina de una en una.

La solución

Desmonta el archivo compilado y reconstruye C a partir de él: los 216 binarios del corpus de prueba vuelven como C compilable. Después va a por el significado — qué criptografía, qué ordenación, qué hilos, qué formato de archivo — e informa de con qué frecuencia eso funciona, incluido el caso en que apenas lo hace.

Para quién es

Equipos de seguridad que desmontan malware y necesitan la respuesta antes que el código. Empresas que ejecutan software del que nadie tiene el fuente y necesitan una descripción antes de poder rehacer o sustituir nada con seguridad. Cualquiera atrapado con un formato de archivo que nunca se documentó — registros antiguos, una máquina que solo habla con su propio software.

Poner nombre al algoritmo es la parte difícil, y aquí están sus dos cifras. Dado un binario que aún lleva sus propias etiquetas, el detector coincide con ellas; con las etiquetas eliminadas queda cerca de adivinar al azar. El resto de esta página es la ingeniería: qué se añadió, cómo se midió y dónde falla.
El peldaño de abajo, de verdad

El decodificador real, compilado a WebAssembly

Todo lo que hay por encima de esto es un recorrido guionizado por la escalera de abstracción. Este es el primer peldaño funcionando de verdad: Capstone — el mismo desensamblador que enlaza la compilación nativa de RetDec — decodificando los bytes que pegues.

capstone — WebAssembly

791 kilobytes (KB) porque un decodificador x86 de verdad lleva todo el juego de instrucciones — cada codificación, prefijo y extensión. Ese es el tamaño honesto de la cosa.

Decodificador
—
Instrucciones
—
Esto es el decodificador, no el descompilador. Los peldaños de arriba — elevar a la representación intermedia (IR) de LLVM, estructurar el flujo de control, poner nombre al algoritmo — son trabajo de LLVM, y LLVM no cabe en una página web a ningún tamaño. Decir lo contrario sería la mentira más fácil de este sitio.
Capstone 5, compilado con Emscripten, solo x86. La compilación nativa enlaza la misma biblioteca desde deps/capstone.
Front end

Formatos nativos, de bytecode y emergentes

La salida depende del formato, porque fingir que todo se descompila a C no ayuda a nadie. El front end acepta binarios nativos en Formato Ejecutable y Enlazable (ELF), Ejecutable Portable (PE) y Mach-O; bytecode, incluidos los archivos class de la Máquina Virtual de Java (JVM), Ejecutable de Dalvik (DEX) y Lenguaje Intermedio Común (CIL); y objetivos más nuevos como la Ejecución Paralela de Hilos (PTX) de CUDA.

Nativo

ELF · PE · Mach-O

Produce pseudocódigo C, más la capa semántica que es el motivo del fork.

Bytecode

Python · Lua · JVM · DEX · CIL

El bytecode de Python y Lua vuelve a sus propios lenguajes; las rutas de código gestionado emiten salida de la familia Java o de la familia C#.

Emergentes

WebAssembly · CUDA PTX

WebAssembly se convierte al formato de texto de WebAssembly (WAT). PTX se trata como una entrada de primera clase y no como un añadido.

Interactivo

Mira cómo una función sube la escalera de abstracción

Elige una función binaria y hazla avanzar por la cadena: bytes en crudo, desensamblado, IR elevado, pseudocódigo C y, al final, el veredicto semántico — el algoritmo con nombre, con las pruebas que lo identificaron.

Cinco peldaños de abstracción: bytes en crudo, desensamblado, IR elevado, pseudocódigo C y el algoritmo con nombre junto a su referencia de especificación
desplaza para ver el diagrama completo →
El último peldaño es el producto. Todo lo que hay encima es lo que ya te dan otros descompiladores.

retdec — extracción de especificaciones


          

Veredicto semántico

Todavía no recuperado
Avanza hasta la etapa semántica.

Pruebas

Confianza
—
Modo
sin nombres

Con los símbolos eliminados, la recuperación tiene que salir solo de la estructura — constantes, número de rondas, forma del flujo de control. Ese es el caso difícil, y al que se refiere el F1 medido de 0,056.

Un recorrido guionizado por etapas reales de recuperación, escrito para esta página. El descompilador en sí es C++ y funciona sin conexión.
Lo que recupera

Seis familias de estructura

Runtime

Contenedores de la Biblioteca Estándar de Plantillas (STL) y estructuras del runtime de C++ — la forma de un std::vector reapareciendo a partir del patrón de asignación.

Criptografía

AES, la familia de algoritmos de hash seguro (SHA), ChaCha20, Rivest–Shamir–Adleman (RSA) y primitivas de curva elíptica, identificadas por constantes y estructura de rondas.

Ordenación y búsqueda

Introsort, merge sort, búsqueda binaria — incluido el cambio por límite de profundidad que delata a introsort.

Grafos

Algoritmos de grafos, más patrones de recorrido de búsqueda en anchura (BFS) y en profundidad (DFS).

Concurrencia

std::thread, pthreads, OpenMP, Threading Building Blocks (TBB) y atómicos en crudo.

Serialización

Protobuf, FlatBuffers, MessagePack, Notación de Objetos de JavaScript (JSON) y encuadre de Lenguaje de Marcado Extensible (XML).

Medido

216 binarios, y el número que duele

Los 216 binarios ELF del corpus de pruebas producen C compilable con --buildable, que está activado por defecto. La recuperación de algoritmos es otra historia, y la forma honesta de contarla es poner los dos números uno al lado del otro.

MétricaResultadoCondición
Salida en C compilable216 / 216--buildable, activado por defecto
F1 de recuperación de algoritmos0.056Sin nombres, intervalo de confianza del 95% 0,034–0,083
F1 de recuperación de algoritmos1.000Con ayuda de nombres, binarios con símbolos
El .c por defecto recompilaNoNi este fork ni el RetDec original
Lee esos dos números F1 juntos. 1,000 con símbolos significa que el detector coincide con la tabla de símbolos. 0,056 sin ellos significa que hoy la recuperación estructural sobre binarios sin símbolos está cerca de adivinar al azar. Citar solo el primero sería marketing; citar solo el segundo escondería que la cadena funciona cuando tiene algo a lo que agarrarse.
Refinamiento neuronal

Opcional, sin conexión y con controles

El refinamiento pasa por llama.cpp con modelos GGUF, del todo sin conexión, solo cuando RETDEC_NEURAL_REFINE=1 y se indica una ruta a un modelo. Está desactivado por defecto y nunca sustituye a la línea base.

  • Control de compilación. La salida refinada tiene que pasar gcc -fsyntax-only antes de que se acepte.
  • Validación estructural. El refinamiento tiene que seguir correspondiéndose con la estructura elevada.
  • Se conserva la línea base determinista. La salida sin refinar del descompilador sigue siendo el artefacto auditable. Si tienes que defender un hallazgo, defiendes esa.
  • Sin red. Inferencia GGUF local. Nada de tu binario sale de la máquina.
$ export RETDEC_NEURAL_REFINE=1
$ export RETDEC_NEURAL_MODEL=/models/qwen-coder.gguf
$ retdec-decompiler --buildable ./target.elf
Para quién es

Averigua lo que hace un programa cuando ya no está el código fuente

El software se distribuye como algo que una máquina puede leer y una persona no. Esto lo vuelve a desmontar y te dice, en términos llanos, qué está haciendo el programa en realidad.

01

Equipos de seguridad que desmontan malware

En lugar de páginas de código ilegible, obtienes la respuesta: esta parte revuelve datos, esta parte es cómo llama a casa, esta parte es cómo se esconde. Eso es lo que un analista necesita primero.

02

Empresas con software viejo y sin código fuente

El sistema sigue llevando el negocio, y quien lo escribió se fue hace años. Esto recupera una descripción de lo que hace, que es lo que hace falta antes de que nadie pueda reconstruirlo o sustituirlo con seguridad.

03

Cualquiera atascado con un formato de archivo que nadie documentó

Registros antiguos, una máquina que solo habla con su propio software, el archivo de exportación de un competidor. Esto averigua la estructura para que tu propio software pueda leerlo.

¿Reconoces aquí tu situación? Esto está abierto a pruebas beta ahora, y las personas para las que está hecho son aquellas cuyos comentarios de verdad lo cambian. Hazte probador beta →
Interfaz

Interfaz gráfica de usuario (GUI) en Qt 6, o ninguna

Vistas de código sincronizadas entre C, ensamblador, IR y grafos de flujo de control, con navegación de funciones, inspección de cadenas, un explorador de binarios y un panel asistente. El modo sin interfaz elimina toda dependencia de GUI, así que la misma compilación funciona en integración continua (CI).

Doble licencia

La Licencia Pública General Affero de GNU (AGPL-3.0+) para uso de código abierto, o una licencia comercial para despliegue propietario. Copyright Odin Loch, que opera como Imortek, 2025–2026.

Distribuible en v2.0.21. Los controles de CI reflejan estándares de madurez de desarrollo, no de producción — lo dice el proyecto, no es una inferencia.