RetDec - Cheatsheet de Descompilador de Código de Máquina Retargetável
RetDec (Retargetable Decompiler, by Avast) é um descompilador de código de máquina de código aberto que converte binários compilados em código de alto nível legível. “Retargetável” é a propriedade chave: em vez de ser construído para uma arquitetura, ele levanta muitos conjuntos de instruções — x86, ARM, MIPS, PIC32, PowerPC — em LLVM IR, então descompila essa representação comum em C ou pseudocódigo semelhante a Python. Ele é executado de forma independente e se integra com IDA, Ghidra e radare2.
Instalação
| Método | Como |
|---|
| Build de lançamento | Download o pacote pré-compilado do GitHub Releases |
| Do fonte | Build CMake (veja docs de build do repo) |
| Docker | docker run -v "$PWD:/dst" retdec/retdec |
| Verificar | retdec-decompiler --version |
Descompilação Básica
| Comando | Descrição |
|---|
retdec-decompiler binary.exe | Descompila para binary.exe.c |
retdec-decompiler -o out.c binary | Escolhe o caminho de saída |
retdec-decompiler --backend-no-debug binary | Saída mais limpa |
retdec-decompiler --cleanup binary | Remove arquivos intermediários |
retdec-decompiler --help | Lista completa de opções |
# Descompila e lê o resultado
retdec-decompiler suspicious.exe
less suspicious.exe.c
| Flag | Produz |
|---|
| (padrão) | Fonte C |
-f py | Pseudocódigo semelhante a Python |
--backend-emit-cfg | Grafos de fluxo de controle |
--backend-emit-cg | Grafo de chamadas |
--config out.json | Config/resultados de análise estruturada |
| LLVM IR | Saída .ll intermediária durante descompilação |
Arquiteturas Suportadas
| Arquitetura | Formatos |
|---|
| x86 / x86-64 | PE, ELF, Mach-O |
| ARM / Thumb | ELF, PE, raw |
| MIPS | ELF, raw |
| PIC32 | ELF, Intel HEX |
| PowerPC | ELF |
A cobertura de arquitetura ampla torna RetDec particularmente útil para trabalho de firmware e embedded, onde binários MIPS e PIC32 são comuns e descompiladores mainstream oferecem menos.
Opções Úteis
| Opção | Efeito |
|---|
-a arch | Força uma arquitetura |
-e endian | Define endianness (little/big) |
-m mode | Modo: bin, raw, ll |
--raw-entry-point ADDR | Ponto de entrada para binários raw |
--raw-section-vma ADDR | Endereço de carregamento para código raw |
--select-ranges A-B | Descompila apenas um intervalo de endereço |
--select-functions f1,f2 | Descompila funções específicas |
# Blob de firmware raw: diga ao RetDec como carregá-lo
retdec-decompiler -m raw -a mips -e big \
--raw-entry-point 0x80000000 --raw-section-vma 0x80000000 firmware.bin
Recursos de Análise
| Recurso | Fornece |
|---|
| Detecção de formato de arquivo | Parsing PE/ELF/Mach-O |
| Detecção de compilador/packer | Fingerprinting de toolchain |
| ID de função baseada em assinatura | Reconhece código de biblioteca linkado estaticamente |
| Reconstrução de tipo | Recupera estruturas e tipos |
| Uso de info de debug | DWARF/PDB quando disponível |
A identificação de função de biblioteca importa muito na prática: permite que você pule os milhares de linhas de libc linkado estaticamente e se concentre na própria lógica da aplicação.
Integrações
| Ferramenta | Plugin |
|---|
| IDA Pro | Plugin RetDec IDA |
| Ghidra | Plugin RetDec Ghidra |
| radare2 | r2retdec |
| API | Descompila programaticamente via CLI/config |
RetDec vs Outros Descompiladores
| Aspecto | RetDec | Ghidra | Hex-Rays (IDA) | Binary Ninja |
|---|
| Custo | Gratuito/código aberto | Gratuito/código aberto | Comercial | Comercial |
| Arquiteturas | Muitas (incl. PIC32) | Muitas | Muitas (por licença de descompilador) | Muitas |
| Interativo | Não (batch) | Sim (GUI) | Sim | Sim |
| Melhor para | Descompilação batch/scripted, embedded | Trabalho RE interativo | Saída de qualidade mais alta | API/UX moderno |
Complementa Ghidra para trabalho interativo — RetDec brilha em pipelines automatizados e arquiteturas incomuns.
Recursos