YouMind
Entrar

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

@0xMovez
INGLÊS12 de out. de 2026
171K
271
38
8
557

TL;DR

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

A maioria das pessoas que tenta fazer engenharia reversa de um binário abre o arquivo em um 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 uma parede de assembly em algo que realmente possam reconstruir.

Este curso de 11 passos vai transformar o Claude Opus 5.5 em uma máquina de código aberto para qualquer coisa.

Siga meu Substack para receber as melhores dicas de IA:

movez.substack.com

Engenharia reversa não é sobre quebrar proteções. É sobre entender algo bem o suficiente para 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 a prova: 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 de marketing. Na mesma semana, um projeto open-source chamado WordCraft lançou uma reconstrução "clean room" do Microsoft e do Adobe em Rust puro:

Movez - inline image

https://getartcraft.com/apps

Ele foi criado 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 todo o caminho, 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 em um 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 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, mostrando todas as alterações antes de gravar qualquer coisa e criando 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 uso 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 nenhum motor. Mantenha o REA atualizado, pois 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 a base disso uma vez.
5- Toda afirmação recebe uma tag: 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 assets.
15- Mantenha um registro de obrigações: todo comportamento recuperado precisa passar em um 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 controle de qualidade de 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 [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 REA correta 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 construído, 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 e todo o texto legível escondido ali dentro.

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 de você ler uma única 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 + refs 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 se torne importante. 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 decompilador 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, casts por todos os lados. 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 dentro 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 nomear cada variável

Aquele código rústico é só metade do trabalho. Agora entregue-o ao 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 o propósito da 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 para um nome significativo com base 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, state machine, observer...).
85. Reescreva-a como um Swift limpo e idiomático (ou a linguagem que as convenções
9 de chamada sugerirem), com comentários de documentação.
106. Sinalize qualquer falta de tratamento de erros, validação de entrada ou verificação de segurança.
11
12Pense bem com 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 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 pelo 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 única 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, apontando o Claude Opus para o ofuscador Tigress em 20 tarefas. Guarde esses 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 cada vez mais forte antes de desistir. Então defina um limite de gastos 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 do
7 dispatch, 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 necessária.

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 relate-o 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 que você copia o que o app faz, nunca o código dentro dele. Faça isso 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ê do lado seguro, e a equipe do WordCraft verifica todas as quatro automaticamente em cada build.

  1. Observe, nunca copie. Rode o alvo como caixa preta, observe 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 simples dos recursos.
  2. Especificações, não código-fonte. Os formatos de arquivo vêm de padrões públicos (OOXML é ECMA-376 / ISO 29500, além das specs publicadas de RTF e ODF), nunca da leitura do parser de um concorrente ou de qualquer código GPL/LGPL.
  3. Somente assets originais. Cada ícone, fonte, template e som é desenhado em código, de domínio público ou com licença aberta, com uma linha em um arquivo de atribuição. Caso contrário, um check de CI reprova o build.
  4. Separe as duas tarefas. Um agente recupera o comportamento e escreve uma especificação. Um contexto diferente implementa a partir apenas da spec, 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(pelo comportamento observado e pela spec 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 usando apenas este documento.
10
11Gere um 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 em uma 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 de forma aberta no GitHub.

O lema deles é "Doze apps. Um ofício", e esse ofício é 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 retorno 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 em uma 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á abaixo dela, desde as 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 e exporte para PDF
13 ✓ select.all-headings -> 12 selecionados
14 ✓ format.font-size 14 · format.bold
15 ✓ export report.pdf (texto selecionável, marcadores mantidos)

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

11. Valide e lance - 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: passe as mesmas entradas para o original e 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 (vazia, 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, e semanticamente nos outros casos. Relate 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 slot de RE no topo do 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 em uma 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 em um 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 esconde a lógica real no meio do ruído e estoura 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 em um contexto, implemente a partir da spec 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 a superfície dele, 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, documente a spec de forma limpa e lance a reconstrução via MCP.

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

Salvar com um clique

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

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

Explorar o YouMind
Para criadores

Transforme seu Markdown em um artigo 𝕏 impecável

Quando você publica 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 em um artigo 𝕏 impecável e pronto para publicar.

Experimente Markdown para 𝕏

Mais padrões para decifrar

Artigos virais recentes

Explorar mais artigos virais