Pular para o conteúdo

RetDec - Cheatsheet de Descompilador de Código de Máquina Retargetável

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étodoComo
Build de lançamentoDownload o pacote pré-compilado do GitHub Releases
Do fonteBuild CMake (veja docs de build do repo)
Dockerdocker run -v "$PWD:/dst" retdec/retdec
Verificarretdec-decompiler --version

Descompilação Básica

ComandoDescrição
retdec-decompiler binary.exeDescompila para binary.exe.c
retdec-decompiler -o out.c binaryEscolhe o caminho de saída
retdec-decompiler --backend-no-debug binarySaída mais limpa
retdec-decompiler --cleanup binaryRemove arquivos intermediários
retdec-decompiler --helpLista completa de opções
# Descompila e lê o resultado
retdec-decompiler suspicious.exe
less suspicious.exe.c

Formatos de Saída

FlagProduz
(padrão)Fonte C
-f pyPseudocódigo semelhante a Python
--backend-emit-cfgGrafos de fluxo de controle
--backend-emit-cgGrafo de chamadas
--config out.jsonConfig/resultados de análise estruturada
LLVM IRSaída .ll intermediária durante descompilação

Arquiteturas Suportadas

ArquiteturaFormatos
x86 / x86-64PE, ELF, Mach-O
ARM / ThumbELF, PE, raw
MIPSELF, raw
PIC32ELF, Intel HEX
PowerPCELF

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çãoEfeito
-a archForça uma arquitetura
-e endianDefine endianness (little/big)
-m modeModo: bin, raw, ll
--raw-entry-point ADDRPonto de entrada para binários raw
--raw-section-vma ADDREndereço de carregamento para código raw
--select-ranges A-BDescompila apenas um intervalo de endereço
--select-functions f1,f2Descompila 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

RecursoFornece
Detecção de formato de arquivoParsing PE/ELF/Mach-O
Detecção de compilador/packerFingerprinting de toolchain
ID de função baseada em assinaturaReconhece código de biblioteca linkado estaticamente
Reconstrução de tipoRecupera estruturas e tipos
Uso de info de debugDWARF/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

FerramentaPlugin
IDA ProPlugin RetDec IDA
GhidraPlugin RetDec Ghidra
radare2r2retdec
APIDescompila programaticamente via CLI/config

RetDec vs Outros Descompiladores

AspectoRetDecGhidraHex-Rays (IDA)Binary Ninja
CustoGratuito/código abertoGratuito/código abertoComercialComercial
ArquiteturasMuitas (incl. PIC32)MuitasMuitas (por licença de descompilador)Muitas
InterativoNão (batch)Sim (GUI)SimSim
Melhor paraDescompilação batch/scripted, embeddedTrabalho RE interativoSaída de qualidade mais altaAPI/UX moderno

Complementa Ghidra para trabalho interativo — RetDec brilha em pipelines automatizados e arquiteturas incomuns.

Recursos