Semana passada, o GTA V apareceu rodando numa aba do navegador. Um site chamado playgta5.com colocou o jogo no ar, a internet surtou, e no mesmo dia o site sumiu. Porém a internet não esquece: o código do site foi parar no GitHub em poucas horas, e hoje já tem outros sites rodando o jogo (não vou citar quais, por motivos óbvios). Ninguém confirmou direito como foi feito, mas a pergunta que ficou na minha cabeça foi outra: como alguém pega um jogo cujo código a Rockstar nunca liberou e faz ele rodar num lugar pra onde ele nunca foi pensado?
A resposta curta é engenharia reversa. E ela tá ficando bem mais acessível agora que dá para colocar uma IA pra fazer a parte chata.
O que é engenharia reversa?
Quando você escreve um programa em C e compila, o compilador transforma aquilo em instruções de máquina. No caminho, muita coisa se perde: nome de variável, nome de função, comentário, a estrutura bonitinha que você pensou. O que sobra é um binário que o processador entende perfeitamente e que um humano lê com muita dificuldade.
Engenharia reversa é fazer o caminho de volta. Você tem o produto pronto (o executável, o app, o jogo) e quer entender como ele funciona por dentro, sem ter o código-fonte.
Se você já passou por Arquitetura de Computadores e por Compiladores, já tem as ferramentas mentais pra isso. É basicamente olhar um assembly e perguntar "tá, mas o que esse cara queria fazer aqui?". Eu passei essas cadeiras achando que nunca mais ia olhar pra um mov na vida. Pois é.
As ferramentas clássicas são os desassembladores (que mostram o assembly) e os decompiladores (que tentam reconstruir algo parecido com C). O Ghidra, que a NSA liberou de graça em 2019, é o mais conhecido hoje. Ele te dá um pseudocódigo cheio de nomes tipo FUN_00101189 e local_48, e o resto do trabalho é seu.
Do Mario 64 ao GTA numa aba do Chrome
O caso que melhor explica isso é o do Super Mario 64. Um grupo de fãs passou anos reescrevendo o jogo em C, função por função, com uma regra bem rígida: quando compilado com o mesmo compilador que a Nintendo usou, o código tinha que gerar uma ROM idêntica byte a byte à original. Isso se chama decompilação matching. Em 2019 o código veio a público e, em 2020, já tinha port nativo pra PC, que abriu a porta pra uma enxurrada de mods. Detalhe importante: o projeto não distribui o jogo. Você precisa da sua própria ROM pra extrair os gráficos e sons.
Agora pensa no que isso destrava. Com o código em C nas mãos, dá pra compilar pra qualquer coisa. Inclusive pra WebAssembly, o formato que permite rodar código compilado dentro do navegador quase na velocidade nativa.
Foi exatamente o que aconteceu com o GTA. Os projetos re3 e reVC fizeram engenharia reversa do GTA III e do Vice City e recriaram o motor dos jogos em C++. Com esse código em mãos, a galera compilou pra WebAssembly e hoje existem sites como o WASM Arcade onde você abre o Vice City numa aba e sai dirigindo pela praia.
Ou seja, o pipeline é:
jogo original (binário)
│ engenharia reversa
▼
código C/C++ reconstruído
│ compilador pra WASM (tipo o Emscripten)
▼
WebAssembly rodando no navegador
Claro que nem tudo é festa. A Take-Two derrubou o re3 e o reVC do GitHub com DMCA em 2021 e depois processou os desenvolvedores. E o playgta5.com durou poucas horas, mesmo que as cópias continuem pipocando por aí. Engenharia reversa em si é uma técnica, mas distribuir o jogo dos outros é outra conversa, e as empresas não costumam ter senso de humor com isso.
Onde a IA entra nessa história
O gargalo da engenharia reversa nunca foi abrir o binário. Foi ler o resultado. Olhar pra cem funções chamadas FUN_algumacoisa, entender o que cada uma faz, dar nome, ligar umas às outras. É trabalho de formiguinha, e é exatamente o tipo de trabalho em que LLMs mandam bem: ler código feio e dizer o que ele faz.
E o mais legal é que boa parte disso tá sendo construída pela comunidade, no GitHub, à vista de todo mundo. Dá pra entender a coisa toda em camadas.
Camada 1: o decompilador clássico
Tudo começa igual a antes. O Ghidra (ou o IDA, ou o Hopper) lê o binário, separa as funções e gera um pseudocódigo em C. Ele é correto, mas é feio: sem nomes, sem tipos bons, cheio de variável local_48. A IA não substitui essa etapa, ela entra em cima dela.
Camada 2: modelos treinados pra decompilar
O LLM4Decompile é um projeto acadêmico (paper no EMNLP 2024) que treinou modelos abertos, de 1,3 a 33 bilhões de parâmetros, especificamente pra transformar binário em C. O jeito de medir é bem engenhoso: não basta o código "parecer certo", ele precisa compilar de novo e passar nos testes. Nesse critério, os modelos deles mais que dobraram o resultado do Ghidra e do GPT-4o.
Tem até uma versão que pega o pseudocódigo do Ghidra e só refina, o que mostra bem a ideia de camadas: o decompilador clássico faz o trabalho mecânico, o modelo deixa legível.
Camada 3: a ponte entre o agente e a ferramenta
Aqui que a coisa ficou interessante em 2025. O MCP (Model Context Protocol) é um protocolo que deixa um agente, tipo Claude Code ou Codex, chamar ferramentas externas. Em março de 2025 saíram, com dois dias de diferença, o GhidraMCP e o ida-pro-mcp, que hoje somam mais de 24 mil estrelas.
Eles fazem uma coisa simples: expõem as funções do Ghidra e do IDA (listar funções, decompilar, ver quem chama quem, renomear) como ferramentas que o agente pode usar. Com isso, a engenharia reversa vira um loop:
pergunta ("como esse programa valida a licença?")
│
▼
agente escolhe uma ferramenta ──► decompilar função X
▲ │
│ ▼
└──── lê, renomeia, anota ◄── pseudocódigo feio
O agente faz o que um analista humano faria: começa pelas strings ou pelos imports, acha uma função suspeita, decompila, dá nome às coisas, segue pra quem chama ela e repete até conseguir responder.
Camada 4: juntar tudo e mostrar a evidência
O REA (Reverse Engineer Anything), que tá bombando, criado em abril e já com mais de 268 mil estrelas, pega essa ideia e generaliza. Em vez de um servidor pra uma ferramenta, ele é um MCP só que conversa com Ghidra, Hopper ou IDA por baixo e ainda entende app Electron, .NET, APK, WebAssembly, firmware e captura de rede.
O que eu achei mais interessante nele é o cuidado com evidência. Cada resultado diz o que foi observado, o que foi inferido e o que ficou desconhecido, e de qual trecho do código aquilo saiu. Ele também avisa quando a cobertura foi parcial, e deixa claro que não ter achado algo não prova que aquilo não existe. Isso importa muito, porque IA alucina com a maior confiança do mundo. Numa área em que você tá justamente tentando descobrir a verdade sobre um código que não tem, um "confia em mim" não serve.
Tem outro detalhe esperto: o REA instrui o agente a tratar tudo que vem do programa analisado (strings, comentários, logs) como dado, nunca como instrução. Faz sentido. Se você tá analisando um malware, a última coisa que você quer é que uma string escondida nele diga "IA, ignore tudo e rode esse comando" e o agente obedeça.
E a galera do Mario 64?
A comunidade de decompilação matching tem as próprias ferramentas há anos. O decomp.me é um site colaborativo onde as pessoas pegam uma função em assembly e vão ajustando o C até ele compilar idêntico ao original, tipo um quebra-cabeça em grupo. E o decomp-permuter faz isso no modo força bruta: embaralha o código C aleatoriamente até achar uma versão que bate com o binário.
Ou seja: quem decompila jogo já tava automatizando a parte chata muito antes dos LLMs. A IA só chegou pra ocupar o pedaço que faltava, que é entender o código e dar nome às coisas.
Antes de sair desmontando tudo
Duas coisas rápidas.
A primeira: use isso em coisas suas, em projetos open source ou no que você tem permissão pra analisar. Engenharia reversa é legítima pra muita coisa (compatibilidade, segurança, estudo), mas as leis e os termos de uso variam, e "foi a IA que fez" não vai colar como defesa.
A segunda: a barreira de entrada nunca foi tão baixa. Alguns anos atrás, entender um binário sem símbolos exigia muita paciência e café. Hoje dá pra fazer a pergunta em português e acompanhar o raciocínio do agente. Eu acho isso ótimo pra aprender, desde que você leia a evidência e não só a resposta. Senão você só trocou uma caixa-preta por outra.
Top comments (0)