RetDec Imortek · v2.0.21

Um descompilador que recupera o algoritmo, não só o código

Muitas vezes uma organização precisa entender um software de que não tem o código-fonte: um sistema antigo, um componente comprado, algo que chegou e parece suspeito. Já existem ferramentas que devolvem o código de máquina como passos legíveis. O RetDec Imortek tenta ir um passo além e nomear o que esses passos são — esta parte é o Padrão de Criptografia Avançada (AES), esta parte é uma ordenação, esta parte é como os dados são empacotados para envio.

LinguagemC++
Versãov2.0.21
UpstreamRetDec v5.0
Estrelas2
Último enviohá pouco
Por que forkar o RetDec

O RetDec v5.0 upstream está inativo desde 2022. Continua sendo um dos poucos descompiladores abertos com um front end genuinamente amplo — e vale a pena manter essa amplitude viva.

AcrescentadoRecuperação semântica de bibliotecas
AcrescentadoInterface Qt 6
AcrescentadoRefinamento neural offline opcional
AcrescentadoDetecção de algoritmo, concorrência e serialização
Em português claro

O que isto é, em um minuto

O problema

O software é entregue como algo que a máquina lê e a pessoa não. Quando não há código-fonte — o fornecedor sumiu, o contrato nunca o incluiu, o arquivo veio de um lugar em que você não confia — ninguém pode dizer o que o programa faz de fato. Conferir à mão significa ler instruções de máquina uma a uma.

A solução

Ele desmonta o arquivo compilado e reconstrói C a partir dele: todos os 216 binários do corpus de teste voltam como C compilável. Depois vai atrás do significado — qual criptografia, qual ordenação, qual uso de threads, qual formato de arquivo — e relata com que frequência isso funciona, inclusive o caso em que mal funciona.

Para quem é

Equipes de segurança desmontando malware, que precisam da resposta antes de precisar do código. Empresas que rodam software de que ninguém tem o fonte e precisam de uma descrição dele antes que algo seja reconstruído ou substituído com segurança. Quem ficou preso a um formato de arquivo que nunca foi documentado — registros antigos, uma máquina que só fala com o software dela.

Nomear o algoritmo é a parte difícil, e os dois números disso estão aqui. Dado um binário que ainda carrega seus próprios rótulos, o detector concorda com eles; com os rótulos removidos, ele fica perto de adivinhar. O resto desta página é a engenharia: o que foi acrescentado, como foi medido e onde ele falha.
O degrau de baixo, de verdade

O decodificador de verdade, compilado para WebAssembly

Tudo acima disto é um passeio roteirizado pela escada de abstração. Este é o primeiro degrau rodando de verdade: Capstone — o mesmo desmontador que o build nativo do RetDec linka — decodificando bytes que você cola aqui.

capstone — WebAssembly

791 kilobytes (KB) porque um decodificador x86 de verdade carrega todo o conjunto de instruções — cada codificação, prefixo e extensão. Esse é o tamanho honesto da coisa.

Decodificador
—
Instruções
—
Este é o decodificador, não o descompilador. Os degraus acima — elevar à Representação Intermediária (IR) do LLVM, estruturar o fluxo de controle, nomear o algoritmo — são trabalho do LLVM, e o LLVM não cabe em uma página web em tamanho nenhum. Dizer o contrário seria a mentira mais fácil deste site.
Capstone 5, compilado com Emscripten, só x86. O build nativo linka a mesma biblioteca de deps/capstone.
Front end

Formatos nativos, bytecode e emergentes

A saída depende do formato, porque fingir que tudo descompila para C não ajuda ninguém. O front end aceita binários nativos em Formato Executável e Ligável (ELF), Executável Portátil (PE) e Mach-O; bytecode, incluindo arquivos class da Máquina Virtual Java (JVM), Executável Dalvik (DEX) e Linguagem Intermediária Comum (CIL); e alvos mais novos como a Execução Paralela de Threads (PTX) do CUDA.

Nativo

ELF · PE · Mach-O

Produz pseudocódigo C, mais a camada semântica que é o ponto do fork.

Bytecode

Python · Lua · JVM · DEX · CIL

Bytecode de Python e Lua volta nas próprias linguagens; os caminhos de código gerenciado emitem saída da família Java ou da família C#.

Emergentes

WebAssembly · CUDA PTX

WebAssembly converte para o formato texto do WebAssembly (WAT). O PTX é tratado como entrada de primeira classe, não como algo pensado depois.

Interativo

Veja uma função subir a escada de abstração

Escolha uma função binária e avance com ela pelo pipeline: bytes brutos, desmontagem, IR elevada, pseudocódigo C e, por fim, o veredito semântico — o algoritmo nomeado, com a evidência que o identificou.

Cinco degraus de abstração: bytes brutos, desmontagem, IR elevada, pseudocódigo C e o algoritmo nomeado com a sua referência de especificação
role para ver o diagrama inteiro →
O último degrau é o produto. Tudo acima dele é o que outros descompiladores já entregam.

retdec — extração de especificação


          

Veredito semântico

Ainda não recuperado
Avance até o estágio semântico.

Evidência

Confiança
—
Modo
cego a nomes

Com os símbolos removidos, a recuperação tem de funcionar só a partir da estrutura — constantes, contagem de rodadas, formato do fluxo de controle. Esse é o caso difícil, e é a ele que o F1 medido de 0,056 se refere.

Um passo a passo roteirizado dos estágios reais de recuperação, escrito para esta página. O descompilador em si é C++ e roda offline.
O que ele recupera

Seis famílias de estrutura

Runtime

Contêineres da Biblioteca Padrão de Templates (STL) e estruturas do runtime C++ — o formato de um std::vector reaparecendo a partir do padrão de alocação.

Criptografia

AES, a família do Algoritmo de Hash Seguro (SHA), ChaCha20, Rivest–Shamir–Adleman (RSA) e primitivas de curva elíptica, identificadas por constantes e pela estrutura de rodadas.

Ordenação e busca

Introsort, merge sort, busca binária — incluindo a troca por limite de profundidade que entrega o introsort.

Grafos

Algoritmos de grafos, mais os padrões de percurso em largura (BFS) e em profundidade (DFS).

Concorrência

std::thread, pthreads, OpenMP, Threading Building Blocks (TBB) e atômicos crus.

Serialização

Enquadramento Protobuf, FlatBuffers, MessagePack, Notação de Objetos JavaScript (JSON) e Linguagem de Marcação Extensível (XML).

Medido

216 binários, e o número que dói

Todos os 216 binários ELF do corpus de teste produzem C compilável com --buildable, que vem ligado por padrão. A recuperação de algoritmo é outra história, e o jeito honesto de relatá-la é pôr os dois números lado a lado.

MétricaResultadoCondição
Saída C compilável216 / 216--buildable, ligado por padrão
F1 de recuperação de algoritmo0.056Cego a nomes, intervalo de confiança de 95% 0,034–0,083
F1 de recuperação de algoritmo1.000Com ajuda de nomes, binários com símbolos
Padrão .c recompilaNãoNem este fork nem o RetDec original
Leia esses dois números de F1 juntos. 1,000 com símbolos significa que o detector concorda com a tabela de símbolos. 0,056 sem símbolos significa que a recuperação estrutural em binários sem símbolos está, hoje, perto da adivinhação. Citar só o primeiro seria marketing; citar só o segundo esconderia que o pipeline funciona quando tem qualquer coisa em que se apoiar.
Refinamento neural

Opcional, offline e sob controle

O refinamento roda via llama.cpp com modelos GGUF, inteiramente offline, só quando RETDEC_NEURAL_REFINE=1 e um caminho de modelo é fornecido. Vem desligado por padrão e nunca substitui a linha de base.

  • Controle de compilação. A saída refinada precisa passar por gcc -fsyntax-only antes de ser aceita.
  • Validação estrutural. O refinamento ainda precisa corresponder à estrutura elevada.
  • Linha de base determinística preservada. A saída não refinada do descompilador continua sendo o artefato auditável. Se você precisar defender um achado, é esse que você defende.
  • Sem rede. Inferência GGUF local. Nada sobre o seu binário sai da máquina.
$ export RETDEC_NEURAL_REFINE=1
$ export RETDEC_NEURAL_MODEL=/models/qwen-coder.gguf
$ retdec-decompiler --buildable ./target.elf
Para quem é

Descobre o que um programa faz quando o código-fonte se perdeu

O software é entregue como algo que a máquina lê e a pessoa não. Isto desmonta esse algo de volta e diz, em termos simples, o que o programa está de fato fazendo.

01

Equipes de segurança desmontando malware

Em vez de páginas de código ilegível, você recebe a resposta: esta parte embaralha dados, esta parte é como ele chama a casa, esta parte é como ele se esconde. É esse o pedaço de que um analista precisa primeiro.

02

Empresas com software antigo e sem código-fonte

O sistema ainda toca o negócio, e quem o escreveu foi embora anos atrás. Isto recupera uma descrição do que ele faz, que é o que você precisa antes que alguém possa reconstruí-lo ou substituí-lo com segurança.

03

Quem ficou preso a um formato de arquivo que ninguém documentou

Registros antigos, uma máquina que só fala com o software dela, o arquivo de exportação de um concorrente. Isto descobre a estrutura para que o seu próprio software consiga ler.

Reconhece a sua situação aqui? Isto está aberto para teste beta agora, e as pessoas para quem ele é construído são aquelas cujo retorno de fato o muda. Seja um testador beta →
Interface

Interface Gráfica de Usuário (GUI) em Qt 6, ou nenhuma GUI

Visões de código sincronizadas entre C, assembly, IR e grafos de fluxo de controle, com navegação por funções, inspeção de strings, um navegador de binários e um painel assistente. O modo headless descarta toda dependência de GUI, então o mesmo build roda em Integração Contínua (CI).

Licença dupla

A Licença Pública Geral Affero do GNU (AGPL-3.0+) para uso em código aberto, ou uma licença comercial para implantação proprietária. Copyright Odin Loch, atuando como Imortek, 2025–2026.

Entregável na v2.0.21. Os controles de CI refletem padrões de maturidade de desenvolvimento, não de produção — declarado pelo projeto, não inferido.