Pular para o conteúdo

Reko - Cheatsheet de Descompilador Binário de Código Aberto

Reko - Cheatsheet de Descompilador Binário de Código Aberto

Reko é um descompilador binário de código aberto escrito em C# que converte código de máquina em C legível. Sua característica distintiva é amplitude de arquitetura, especialmente para plataformas legadas e exóticas: ao lado de x86, x64 e ARM, ele lida com 6502, Z80, 68000, VAX, PDP-11, SPARC, PowerPC e muitos mais. Isso o torna a escolha prática para retrocomputação, firmware vintage e alvo embedded onde ferramentas mainstream não têm suporte algum. Oferece tanto uma GUI quanto um descompilador de linha de comando.

Instalação

MétodoComo
LançamentoDownload do GitHub Releases (Windows/Linux/macOS)
GUIExecute reko (UI WPF/Avalonia)
CLIdecompile / reko-cli binary
Do fonteBuild a solução .NET
Verificarreko-cli --version

Descompilação de Linha de Comando

ComandoDescrição
reko-cli binary.exeDescompila com auto-detecção de formato
reko-cli --arch x86-protected-32 raw.binForça uma arquitetura
reko-cli --base 0x8000 raw.binDefine o endereço de carregamento
reko-cli --loader raw ...Trata entrada como imagem raw
reko-cli -o outdir binaryDiretório de saída
# Descompila um ROM Z80 raw carregado em 0x0000
reko-cli --loader raw --arch z80 --base 0x0000 game.rom

Artefatos de Saída

ArquivoContém
*.cFonte C descompilada
*.hDeclarações de tipo/struct recuperadas
*.disListagem de disassembly
*.rekoArquivo de projeto (recarregar na GUI)
Grafo de chamadasEstrutura do programa

Arquiteturas Suportadas (seleção)

ModernoLegado / embedded
x86 / x86-646502 / 65C02
ARM / AArch64Z80 / 8080
MIPS68000 (m68k)
PowerPCVAX, PDP-11
SPARC8051, AVR
RISC-VCray, Alpha e mais

Esta é a razão para usar Reko: quando o binary é de um console de 1980, um controlador industrial ou um mainframe, outros descompiladores simplesmente não o carregam.

O Pipeline de Descompilação

FaseFaz
CarregamentoParse o container (PE/ELF/raw/etc.)
ScanningDescobre código vs dados, encontra procedimentos
RewriteLevanta instruções para uma representação intermediária
AnáliseData flow, type inference, reconstrução de estrutura
EstruturaçãoReconstrói loops e condicionais
SaídaEmite C e headers

Entender as fases ajuda quando a saída é fraca — geralmente a correção é guiar a fase scanning com pontos de entrada corretos e endereços de carregamento.

Trabalhando na GUI

TarefaComo
Abrir um binaryFile → Open, escolha loader/arch se solicitado
Procurar procedimentosPane de lista de procedimentos
Ver C descompiladoPane de código por procedimento
Renomear/retipificarEditar símbolos para melhorar saída
Re-executar análiseReanalyze após anotações
Salvar projetoArquivo .reko preserva suas anotações

Iterar — anotar, re-analisar, ler novamente — é como você obtém saída genuinamente legível de um binary stripped.

Melhorando Qualidade de Saída

ProblemaCorreção
Código visto como dadosMarque entry points / começos de procedimento
Endereço de carregamento erradoDefine --base corretamente
Saída garbledConfirme arquitetura e endianness
Tudo sem nomeRenomeie procedimentos/variáveis conforme aprender
Assinaturas faltandoForneça arquivos de metadados de tipo/assinatura

Reko vs Outros Descompiladores

AspectoRekoGhidraRetDec
Arquiteturas legadasExcepcionalBomModerado
GUI interativoSimSim (mais rico)Não
Batch scriptableSim (CLI)SimSim
LinguagemC#JavaC++
Melhor paraAlvo retro/exóticoRE interativo geralBatch, pipelines embedded

Use Ghidra para trabalho RE interativo mainstream e RetDec para pipelines batch; Reko ganha seu lugar quando a arquitetura é incomum.

Recursos