YouMind
Iniciar sessão

Como fazer engenharia reversa de qualquer coisa com Opus 5.5 (Curso completo)

@0xMovez
INGLÊS12/10/2026
171K
271
38
8
557

TL;DR

Este guia detalha um fluxo de trabalho de 11 etapas para usar o Claude Opus 5.5 e o conjunto de ferramentas REA para fazer engenharia reversa de binários. Ele cobre instalação, análise, tratamento de ofuscação e execução de reconstruções legais em clean-room.

A maioria das pessoas que tenta fazer engenharia reversa de um binário abre o arquivo num editor hexadecimal, rola a tela por vinte minutos e desiste.

Elas não sabem qual ferramenta carrega o arquivo. Não sabem qual prompt extrai a lógica. Não sabem como transformar um paredão de assembly em algo que realmente dê para reconstruir.

Este curso de 11 passos vai transformar o Claude Opus 5.5 numa máquina de código aberto capaz de recriar qualquer coisa.

Siga meu Substack para receber as melhores dicas de IA em primeira mão:

movez.substack.com

Engenharia reversa não é sobre quebrar proteções. É sobre entender algo tão bem a ponto de conseguir construir a sua própria versão.

Em 7 de outubro de 2026, Amjad Masad, CEO da Replit, publicou uma única linha:

https://x.com/amasad/status/2107671204639465961

Logo abaixo, um desenvolvedor chamado @morluto respondeu com as provas: um conjunto de ferramentas que permite aos agentes controlar o Hopper e o Ghidra e ir muito longe.

Esse projeto é o REA, e ele ultrapassou 110.000 estrelas no GitHub em poucos dias.

Movez - inline image

https://github.com/morluto/rea

Não é exagero. Na mesma semana, um projeto open-source chamado WordCraft lançou uma recriação "clean-room" do Microsoft e do Adobe em Rust puro:

Movez - inline image

https://getartcraft.com/apps

Ele foi construído observando o comportamento do Word e do Adobe e lendo as especificações públicas dos formatos de arquivo, sem nunca olhar o código deles.

Movez - inline image

Este curso mostra o caminho completo, de um binário fechado até uma reconstrução como essa, com o Opus 5.5 fazendo a leitura.

01. O motor - como um agente lê um binário

O Opus 5.5 não consegue rodar um disassembler por conta própria. Ele lê texto e escreve texto.

A engenharia reversa com um agente funciona porque existe uma ferramenta entre o modelo e o binário: ela carrega o arquivo num motor de desmontagem real, expõe os resultados como funções chamáveis e permite que o modelo faça perguntas.

Movez - inline image

Essa ferramenta é o REA, e o motor por trás dela é o Hopper, o Ghidra ou o IDA.

O ciclo é simples e se repete: o modelo pede ao REA para inspecionar o alvo, o REA devolve as descobertas com as evidências exatas (endereços, bytes, pseudocódigo, pontos de chamada), e o modelo usa essas informações para fazer a próxima pergunta ou para escrever e testar uma reimplementação.

Movez - inline image

Tudo roda localmente na sua máquina. Nada é enviado para fora, exceto as descobertas que o modelo precisa para raciocinar, e cada conclusão é classificada como observação, inferência ou incógnita.

**

02. A instalação - rea-agents mais um disassembler

A configuração registra o servidor MCP do REA no seu agente e instala as instruções de fluxo de trabalho correspondentes.

Um único comando faz isso, mostra todas as alterações antes de gravar qualquer coisa e cria backup do que for modificado.

Movez - inline image

Você escolhe o seu próprio disassembler: o Hopper no macOS é o caminho mais fácil, o Ghidra é gratuito e multiplataforma, e o IDA serve se você já tiver uma licença.

python
1# 1. Registre o REA no seu agente (Claude Code, Codex, Cursor, Gemini CLI...)
2npx rea-agents setup # mostra as mudanças planejadas e pede confirmação antes de gravar
3
4# 2. Um provedor de análise profunda. O Hopper é o mais tranquilo no macOS;
5# o setup pode instalá-lo após aprovação. Ghidra e IDA ficam por sua conta.
6# 3. Instale a CLI do rea para usar no terminal e em scripts
7npm install --global rea-agents
8rea --help
9
10# 4. Reinicie seu agente e confirme que as ferramentas estão ativas
11claude
12> /mcp
13 rea: connected
14 open_binary, binary_overview, analyze_function, decompile,
15 list_procedures, search, xrefs, trace, inspect_artifact,
16 analyze_javascript_application, inspect_managed_artifact ...

Os requisitos são modestos: Node.js 22 ou superior e npm. A análise nativa exige um dos três motores; a inspeção estática de JavaScript e .NET não precisa de motor nenhum. Mantenha o REA atualizado, porque as versões trazem correções frequentes.

python
1# Regras da casa para engenharia reversa ( CLAUDE.MD )
2
3## Autoridade
4- Analise apenas alvos que eu possuo ou tenho autorização para examinar. Declare o motivo uma vez.
5- Toda afirmação deve ser classificada: observação (vi isso), inferência (deduzi isso) ou incógnita.
6- Cite as evidências: endereço, bytes, pseudocódigo ou ponto de chamada. Nada de afirmações sem fonte.
7
8## Fluxo de trabalho
9- Comece pela visão geral mais enxuta, não por um dump completo. Expanda apenas quando houver uma lacuna concreta.
10- Reaproveite a sessão aberta; nunca refaça uma análise idêntica.
11- Separe fatos estáticos de fatos de execução. Nunca deduza comportamento em tempo de execução a partir de leituras estáticas.
12
13## Reconstrução
14- Construa a partir do COMPORTAMENTO e de especificações públicas, nunca copiando código ou recursos.
15- Mantenha um registro de obrigações: todo comportamento recuperado precisa passar num teste antes de ser considerado "pronto".

O Opus 5.5 vem com cinco níveis de esforço: low, medium, high, xhigh e max. Use:

  • Medium para inspecionar e navegar
  • High para anotar funções comuns
  • Max para código ofuscado e qualquer coisa com muita matemática de ponteiros.

O nível de esforço é o principal ajuste de qualidade em todo este curso.

03. O roteador - 20 tipos de alvo, uma ferramenta para cada

O primeiro erro dos iniciantes é abrir um disassembler quando o alvo é um app Electron cujo JavaScript está ali, escancarado.

O REA direciona o alvo para a ferramenta certa, e o seu primeiro prompt deve fazer o mesmo. Diga o nome do arquivo, diga o recurso desejado e deixe o agente escolher a ferramenta de entrada.

Movez - inline image
python
1Quero entender como o [RECURSO] funciona no [APP], que está em [CAMINHO ABSOLUTO].
2
3Primeiro, me diga que tipo de alvo é esse (nativo, Electron/JS, .NET, Go, APK, WASM)
4e escolha a ferramenta certa do REA para abri-lo. Não comece uma análise profunda ainda.
5
6Depois, me dê um mapa de um parágrafo: com o que o app foi feito, qual o tamanho dele e
7onde você procuraria primeiro pelo [RECURSO]. Mantenha observações, inferências e incógnitas
8separadas e cite evidências para tudo o que afirmar.

Apontar o REA para um app Electron devolve módulos, imports e limites de IPC em segundos, sem precisar de nenhum disassembler.

Apontá-lo para um Mach-O ou ELF nativo abre um banco de dados do Hopper e segue o caminho nativo, mais difícil, porém mais profundo. Saber em qual dos dois você está economiza horas.

https://x.com/_vmlops/status/2106690704244420687

04. Reconhecimento - visão geral, strings e grafo de chamadas

Não abra nenhum código ainda. Primeiro, peça ao REA um mapa do arquivo inteiro. Um único comando diz em que tipo de máquina ele roda, quantas funções existem lá dentro e todo o texto legível escondido nele.

Esse texto é a pista mais rápida que você tem: endereços web, mensagens de erro e nomes de recursos revelam o que o app faz antes mesmo de você ler uma linha de código.

python
1rea.open_binary { path: "/Applications/Target.app/Contents/MacOS/Target" }
2rea.binary_overview {}
3 arch: arm64
4 functions: 1,284 identified
5 segments: __TEXT __DATA __LINKEDIT
6 entry: _main @ 0x1000051c0
7
8rea.search { query: "http" } # strings + referências no código
9 0x10004a2c0 "https://api.target.app/v3/sync"
10 0x10004a300 "Authorization: Bearer "
11 0x10004a330 "offline cache miss, falling back"
12
13rea.xrefs { address: "0x100012ab0" } # quem chama isso?
14 147 references -> core config loader, called everywhere

O REA também conta quantas vezes cada função é chamada (essa contagem é chamada de referências cruzadas, ou xrefs).

Movez - inline image

Uma função chamada 147 vezes é o coração do app e merece o seu melhor esforço. Uma chamada duas vezes é uma função auxiliar pequena que você pode ignorar até que ela importe. Comece pelo topo dessa lista e vá descendo.

05. Descompilar - uma função em pseudocódigo

Agora escolha uma dessas funções movimentadas e transforme-a em algo legível. Um descompilador pega as instruções de máquina brutas e as reescreve como um código próximo ao C.

A aparência é rústica: nomes como var_28, lógica embaralhada, conversões de tipo por toda parte. Mas dá para ler, e ser legível é tudo o que o Opus 5.5 precisa.

Rode pela linha de comando para salvar o resultado, ou direto de um chat.

python
1# Descompila uma função pelo endereço, em JSON para redirecionar ou salvar
2rea decompile /Applications/Target.app/.../Target 0x100012ab0 \
3 --provider hopper --json > fn_config_loader.json
4
5# Ou busca uma função pelo nome e segue as referências
6rea function /path/to/Target parseConfig --provider hopper --json
7rea xrefs /path/to/Target 0x100012ab0 --provider hopper --json
8rea trace /path/to/Target "sync" --provider hopper --json
python
1// 0x100012ab0 xrefs: 147
2void sub_100012ab0(void* arg0) {
3 void* var_20 = objc_msgSend(cls_NSJSONSerialization,
4 sel_JSONObjectWithData_options_error, arg0, 0x0, 0x0);
5 if (var_20 != 0x0) {
6 void* var_28 = objc_msgSend(var_20, sel_objectForKey, @"endpoints");
7 void* var_30 = objc_msgSend(var_20, sel_objectForKey, @"auth_mode");
8 void* var_38 = objc_msgSend(var_20, sel_objectForKey, @"retry_count");
9 objc_msgSend(g_sharedConfig, sel_setEndpoints, var_28);
10 objc_msgSend(g_sharedConfig, sel_setAuthMode, var_30);
11 objc_msgSend(g_sharedConfig, sel_setRetryCount,
12 objc_msgSend(var_38, sel_intValue));
13 }
14}

A demonstração oficial do REA rastreia uma chamada de som no jogo antigo DX-Ball até a função auxiliar que decide o balanço de áudio esquerda-direita e, em seguida, transforma o pseudocódigo incompleto em C.

Movez - inline image

O resultado passa em todos os 3.205 casos de teste originais e reproduz cada um dos 63 bytes compilados.

Movez - inline image

Passo a passo completo em rea.tools/showcase.

06. Anotar - faça o Opus dar nome a cada variável

Aquele código rústico é só metade do trabalho. Agora passe-o para o Opus 5.5 e peça para ele explicar e limpar tudo.

Ele renomeia as variáveis enigmáticas para nomes reais, resume em uma frase para que serve a função, identifica o padrão utilizado e até aponta bugs que o app original deixou passar.

Cole este prompt no Claude:

python
1Aqui está o pseudocódigo descompilado de uma função com 147 referências cruzadas.
2
3Para esta função:
41. Renomeie cada variável com um nome significativo baseado em como ela é usada.
52. Explique o propósito dela em uma frase.
63. Liste as estruturas de dados que ela lê e escreve.
74. Nomeie o padrão (singleton, factory, máquina de estados, observer...).
85. Reescreva-a em Swift limpo e idiomático (ou na linguagem que as convenções de
9 chamada sugerirem), com comentários de documentação.
106. Sinalize qualquer tratamento de erro, validação de entrada ou verificação de segurança ausente.
11
12Pense bem usando esforço xhigh antes de responder: raciocine sobre o que cada
13valor representa antes de definir os nomes. Marque tudo de que não tiver certeza.
14
15[cole o pseudocódigo]

A descompilação mostra o que o código faz. O Opus 5.5 explica por quê, e entrega os nomes certos para você reconstruí-lo.

https://x.com/0x0SojalSec/status/2108389060192706674

https://x.com/0x0SojalSec/status/2108031166502896035

Nem todo alvo precisa de um disassembler. A demonstração do Notion feita com o REA encontra o recurso de área de transferência no JavaScript do app, acompanha o fluxo pelas camadas do Electron até o processo principal e mostra exatamente como a área de transferência rica é montada — um rastreamento completo sem uma linha de assembly. Veja:

07. Ofuscação - o benchmark Tigress

Alguns apps são feitos justamente para resistir ao que você está tentando fazer. O código é embaralhado de propósito: a lógica é misturada, o texto é criptografado e ramificações falsas são adicionadas para roubar seu tempo.

Isso se chama ofuscação, e é o único ponto em que até o melhor modelo sofre. A Elastic Security Labs mediu isso, colocando o Claude Opus contra o ofuscador Tigress em 20 tarefas. Guarde estes números.

Movez - inline image

Há duas lições práticas nesses números.

  • Primeiro, uma tentativa falha custa cerca do dobro de uma bem-sucedida, porque o modelo continua tentando com cada vez mais força antes de desistir. Então defina um limite de gasto por função e pare cedo.
  • Segundo, remova o lixo do código descompilado antes de enviá-lo (uma ferramenta gratuita chamada Caveman elimina cerca de 75% disso) para que o modelo gaste sua atenção na lógica real, e não no enchimento.

Os cinco truques que você vai encontrar na prática e como cada um aparece ao abrir o código:

Movez - inline image
python
1Esta função parece ofuscada. Trabalhe com esforço máximo.
2
31. Identifique as técnicas presentes (achatamento de fluxo de controle, predicados opacos,
4 código morto, criptografia de strings, divisão de funções) e aponte onde cada uma aparece
5 neste código específico.
62. Resolva-as: remova ramificações mortas, avalie predicados opacos, desfaça o achatamento
7 do despacho, descriptografe strings inline se a chave for recuperável.
83. Mostre a função limpa que restou.
94. Avalie sua confiança de 1 a 10. Abaixo de 6, me diga exatamente quais partes são incertas
10 e qual contexto vizinho as resolveria. Não chute em silêncio.
11
12[cole o pseudocódigo ofuscado]

08. O enxame - um controlador gerenciando workers

Um único chat não consegue ler 500 funções direito. Ele esquece o que viu, chama a mesma coisa por três nomes diferentes e começa a se contradizer.

A solução é uma equipe pequena: um chat controlador que distribui o trabalho e vários chats workers, cada um cuidando de uma função.

O controlador mantém a visão geral e costura as peças de volta.

Movez - inline image

Você não precisa criar nada especial para isso; os dois prompts abaixo são toda a configuração.

python
1Você é um controlador de engenharia reversa. O mapa de funções está em functions.json
2(endereço, nome, tamanho, xref_count).
3
41. Agrupe as funções por proximidade no grafo de chamadas; ordene os grupos por contagem de xrefs.
52. Distribua cada grupo para um worker. Nunca analise uma função você mesmo.
63. Injete as structs já resolvidas no briefing de cada worker para manter os nomes consistentes.
74. Quando um worker devolver confiança abaixo de 6, coloque na fila uma segunda passagem com o contexto
8 dos vizinhos já resolvidos.
95. Acompanhe o gasto acumulado de tokens e reporte após cada grupo.
python
1Você é um worker. Você recebe uma função descompilada e as structs resolvidas até agora.
2Devolva exatamente: endereço, propósito, confiança (1-10), structs_used, structs_new,
3clean_source, flags. Reutilize os nomes de struct existentes; nunca invente um segundo nome para
4uma struct que o controlador já te passou. Apenas uma função. Pare quando terminar.

https://x.com/victor_explore/status/2109466356454510612

09. Clean room - quatro regras para manter tudo legal

Uma reconstrução "clean room" significa copiar o que o app faz, nunca o código que há dentro dele. Faça certo e o que você lançar será totalmente seu. Faça errado e você estará carregando os direitos autorais de outra pessoa.

Movez - inline image

Quatro regras mantêm você no lado seguro, e a equipe do WordCraft verifica as quatro automaticamente em cada build.

  1. Observe, nunca copie. Rode o alvo como caixa preta, veja o que ele faz, tire prints apenas da janela dele. Nunca leia, desmonte ou cole o código dele. Nunca copie textos além dos nomes básicos dos recursos.
  2. Especificações, não fontes. Os formatos de arquivo vêm de padrões públicos (OOXML é ECMA-376 / ISO 29500, além das especificações publicadas de RTF e ODF), nunca da leitura do parser de um concorrente ou de qualquer código GPL/LGPL.
  3. Somente recursos originais. Cada ícone, fonte, template e som é desenhado em código, de domínio público ou com licença aberta, com uma linha num arquivo de atribuição. Caso contrário, uma verificação de CI reprova o build.
  4. Separe os dois trabalhos. Um agente recupera o comportamento e escreve uma especificação. Um contexto diferente implementa a partir apenas da especificação, sem nunca olhar a análise original. Essa separação é a fronteira do clean room.
python
1A partir da análise concluída, escreva uma especificação clean room para uma reimplementação.
2
3Descreva APENAS o COMPORTAMENTO. Inclua: toda interface pública, o modelo de dados, cada
4recurso visível ao usuário como um requisito testável, os formatos de arquivo lidos e gravados
5(por comportamento observado e especificação pública) e o comportamento de tratamento de erros.
6
7NÃO inclua: endereços ou offsets, nomes de variáveis da descompilação, assembly,
8ou qualquer coisa copiada do original. Um desenvolvedor que nunca viu o binário deve ser
9capaz de implementar uma versão compatível apenas com este documento.
10
11Gere markdown com as seções: Arquitetura, Modelo de Dados, API Pública, Formatos de Arquivo,
12Casos de Teste.

Trabalhar a partir de uma descrição não é só proteção jurídica. Isso permite que você faça as escolhas certas para a sua própria linguagem e necessidades, em vez de herdar decisões que o autor original tomou décadas atrás.

Movez - inline image

O WordCraft é mais rápido que o Word em alguns pontos justamente porque não copiou as entranhas do Word.

10. Criando Apps - doze ferramentas profissionais, um método

O WordCraft não é um caso isolado. É um app numa prateleira de doze da equipe ArtCraft, cada um sendo uma reconstrução clean room de uma ferramenta pela qual você já paga, todos escritos do zero em Rust e lançados gratuitamente e abertos no GitHub.

O lema deles é "Doze apps. Uma arte", e essa arte é o método do passo 9: observe o original, leia as especificações públicas, construa uma versão nova baseada apenas no comportamento.

Movez - inline image

O ganho desse método compartilhado é o mesmo em todos os lugares. Sem Electron: cada app é nativo no macOS, Windows e Linux, e todos, exceto o FilmCraft, também rodam numa aba do navegador via WebAssembly.

E como cada ação dentro deles é um comando nomeado, todos os doze podem ser controlados por um agente de IA imediatamente.

Todo app Craft é construído da mesma forma, e vale a pena copiar essa estrutura. Cada um é empilhado em camadas, e cada camada usa apenas a que está logo abaixo, desde medidas básicas na base até a janela na tela no topo.

Aqui estão as camadas do WordCraft:

Movez - inline image

E cada ação é apenas um comando nomeado, então um clique de mouse, um atalho de teclado e um agente de IA disparam exatamente a mesma coisa. É isso que torna qualquer um deles controlável por um agente.

python
1controlar o WordCraft via MCP
2
3# Automação de documentos headless
4claude mcp add wordcraft -- wordcraft-cli mcp
5
6# Ou controle o app desktop em execução
7wordcraft --control 7981 &
8claude mcp add wordcraft-app -- wordcraft-cli mcp --connect 127.0.0.1:7981
9
10# Ferramentas: list_commands, execute, batch, type_text, select_text,
11# inspect_document, render_page, save_document (+ screenshot/click/key ao vivo)
12> Abra report.docx, coloque todos os títulos em negrito 14pt, exporte para PDF
13 ✓ select.all-headings -> 12 selected
14 ✓ format.font-size 14 · format.bold
15 ✓ export report.pdf (selectable text, bookmarks kept)

https://x.com/yuhasbeentaken/status/2109235513102057828

11. Verificar e lançar - prove a paridade, exponha o MCP

Você nunca teve o código-fonte original, então não dá para comparar linha por linha.

Em vez disso, compare o comportamento: dê as mesmas entradas tanto para o original quanto para a sua reconstrução e verifique se produzem a mesma saída.

python
1Crie um ambiente de testes comportamentais comparando o binário original e minha reconstrução.
2
3Gere 50 entradas: 30 normais, 10 extremas (vazio, tamanho máximo, unicode, caracteres especiais),
410 de erro (malformadas, campos ausentes, corrompidas). Rode cada uma em ambos. Compare a saída
5byte a byte quando possível, semanticamente nos demais casos. Reporte a taxa de acerto, uma lista
6de divergências e a gravidade de cada uma (cosmética / comportamental / crítica). Salve em report.md.

Essa também é a prova mais convincente que você pode mostrar a qualquer pessoa (o trecho de RE no topo deste artigo).

Movez - inline image

Depois, lance sua reconstrução da mesma forma que o REA e o WordCraft fizeram: como um servidor MCP, para que o agente da próxima pessoa possa controlá-lo assim como você controlou o REA.

Dê a cada função um nome e uma descrição claros, envolva tudo numa ferramenta de linha de comando simples e permita a instalação com uma única linha.

https://x.com/0xMovez/status/2108884063515746410

E teste durante o processo, não só no final, porque um erro descoberto depois de você ter construído três camadas em cima dele sai muito mais caro para corrigir.

Seis erros que desperdiçam um fim de semana

  1. Abrir um disassembler num app Electron. Se o JavaScript está ali na sua frente, direcione para analyze_javascript_application e pule completamente o caminho nativo.
  2. Extrair tudo antes de ler qualquer coisa. Peça um resumo ao REA primeiro. Puxar o app inteiro de uma vez soterra a lógica real em ruído e infla sua conta.
  3. Ler as funções na ordem do arquivo. Ordene pela contagem de referências cruzadas. A função com 147 xrefs é a arquitetura; a auxiliar com 2 xrefs pode esperar.
  4. Insistir na ofuscação de estágio 3. O benchmark resolve 0% das multicamadas. Defina um orçamento, guarde o contexto dos vizinhos e volte depois.
  5. Deixar o modelo copiar código para a sua reconstrução. Isso quebra o clean room. Especifique primeiro num contexto, implemente a partir da especificação em outro.
  6. Lançar sem um relatório de paridade. "Acho que bate" não é evidência. 50 testes comportamentais e uma taxa de acerto são.

Conclusão:

Instale o REA. Leia o binário. Reconstrua-o como seu.

Direcione o alvo, mapeie sua superfície, descompile as funções críticas, deixe o Opus 5.5 nomear tudo, quebre a ofuscação que valer a pena quebrar, escale com um enxame, especifique de forma limpa e lance a reconstrução via MCP.

Onze passos. Um modelo. Zero código copiado.

Guardar com um clique

Faça leitura aprofundada de artigos virais com IA no YouMind

Guarde a fonte, faça perguntas específicas, resuma o argumento e transforme um artigo viral em notas reutilizáveis num único espaço de trabalho com IA.

Explorar o YouMind
Para criadores

Transforme o seu Markdown num artigo 𝕏 impecável

Quando publica os seus próprios textos longos, formatar imagens, tabelas e blocos de código para o 𝕏 é uma dor de cabeça. O YouMind transforma um rascunho completo em Markdown num artigo 𝕏 impecável e pronto a publicar.

Experimente Markdown para 𝕏

Mais padrões para decifrar

Artigos virais recentes

Explorar mais artigos virais