Como analisar JavaScript e apps Electron com o REA sem instalar Ghidra, IDA ou Hopper

Grafo de código JavaScript gerado por ferramenta de análise estática em app Electron
Resposta rápida

Com o pacote rea-agents instalado e o Node.js na faixa suportada (22.19+, 24.11+ ou 26+), você roda rea analyze apontando para o diretório ou o .asar do app, sempre com --approved. O REA monta um grafo do app sem executar o código e sem precisar de Ghidra, IDA ou Hopper. O resultado vem num envelope Evidence v2, com o grafo e um resumo da fronteira Electron (preload, contextBridge, IPC e por aí vai). Pelo Claude Code, a ferramenta MCP analyze_javascript_application entrega o mesmo serviço.

Fala aí, beleza? Dá pra investigar um app JavaScript ou Electron com o REA sem instalar Ghidra, IDA ou Hopper, e esse é o jeito mais leve de começar com a ferramenta 🙂

O REA (Reverse Engineer Anything) é um servidor MCP e CLI de código aberto, com licença MIT

Ele conecta agentes de código a ferramentas que inspecionam binários nativos, apps JavaScript e Electron, assemblies .NET e sites

Se tu ainda não sabe por que o REA é um MCP e não uma ferramenta solta, vale ler esse contexto antes

A análise de JavaScript do REA trabalha só com os arquivos que você fornece, um diretório ou um arquivo .asar, e não executa o código do app

Ou seja: nada de montar ambiente de binário pra começar

Este post é pra quem quer dar os primeiros passos em engenharia reversa pelo lado dos apps web e Electron, bora ver na prática?

O que você precisa antes de começar

A lista é curta e cabe em qualquer máquina de dev, não precisa de PC da Nasa haha

  • Node.js 22 (22.19+), 24 (24.11+) ou 26+: no npm a faixa aparece como node ^22.19.0 || >=24.11.0
  • Pacote npm rea-agents: a versão mais recente é a 6.5.0, e os limites isolados de heap e timeout existem desde a 6.4.0
  • Um diretório ou arquivo .asar de um app que você tem autorização pra analisar
  • Opcional: um agente compatível com MCP, como o Claude Code

E o que NÃO precisa?

Ghidra, IDA, Hopper, navegador ou o app Electron rodando

A análise estática de JS não exige engine de análise nativa nem processo ativo, o REA projeta os arquivos num JavaScript Application Graph sem executar nada

A fonte oficial é o repositório morluto/rea, mantido pela conta morluto, com documentação em morluto.github.io/rea

Passo a passo: analisar um app Electron ou JavaScript com o REA

  1. Instalar o comando rea
npm install --global rea-agents

Erro comum deste passo: instalar a partir de fork ou espelho

Existem vários por aí (NabilRFG12, shijianzhong, IronSuit, mattburnham) e nenhum é oficial

O oficial é morluto/rea e o pacote é rea-agents, Tome cuidado!

  1. Checar o host com o rea doctor
rea doctor

Ele verifica os pré-requisitos do host e a configuração do agente SEM alterar nada, então pode rodar tranquilo

Erro comum deste passo: versão de Node fora da faixa suportada (22.19+, 24.11+ ou 26+)

  1. Conectar o REA ao agente
npx rea-agents@latest setup

Você escolhe o cliente e revisa o plano

Aí o REA adiciona a conexão MCP e a skill de investigação correspondente, faz backup da configuração existente e pede confirmação antes de aplicar

Nada de next, next e finish às cegas, o que é ótimo 😀

  1. Verificar no Claude Code

Dentro do Claude Code, digite /mcp

Ou, no terminal:

claude mcp list

O REA tem que aparecer como servidor MCP conectado

  1. Rodar a análise pela CLI

Forma genérica, que escolhe sozinha o provider de JavaScript estático quando o alvo é um diretório ou um .asar:

rea analyze /absolute/path/to/releases/app.asar --approved --json

Forma explícita:

rea analyze-javascript-application /absolute/path/to/releases/app.asar --approved --json

Erro comum deste passo: esquecer o --approved

Ele aparece em todos os exemplos oficiais e indica que o alvo foi aprovado por você, o operador

  1. Rodar a análise pelo agente

No agente, a ferramenta MCP analyze_javascript_application expõe o mesmo serviço da CLI

Via MCP, o agente pede a análise ao servidor local e recebe os achados com evidências e limites declarados

Resultado esperado e checagem final:

As três portas de entrada (a ferramenta MCP, o rea analyze-javascript-application PATH --approved --json e o rea analyze PATH --approved --json) devolvem a mesma coisa: um envelope Evidence v2 com o grafo e um resumo da fronteira Electron

A checagem é simples: confirme que o envelope traz o grafo E o resumo da fronteira

Se os dois estão lá, a análise rodou

E tudo isso local, na sua máquina, o REA não envia o app pra um serviço de análise hospedado

O que dá para investigar em um app JavaScript ou Electron com a análise estática

O grafo responde as perguntas que todo mundo faz quando abre um app desconhecido, se liga:

Onde está a fronteira de segurança do Electron?

O REA reconstrói BrowserWindow, scripts de preload, contextBridge e canais IPC

É ali que você enxerga o que o lado web do app consegue pedir pro lado com acesso ao sistema

O app carrega código nativo?

Os native add-ons aparecem no grafo

E isso é a pista de quando a investigação vai sair do JavaScript (falo disso no fim)

Como o app é organizado?

Pacotes, entry points e imports de módulos

Pensa num mapa do projeto, só que montado a partir do que foi empacotado, não do código-fonte original

E apps web empacotados com bundler?

O REA reconstrói registros de chunks e module factories do Webpack e do Rspack quando estão representados como literais de AST

Também entram imports estáticos, imports dinâmicos, chamadas require (CommonJS), workers e service workers, além de source maps e rotas

Um detalhe importante: o agente não recebe só um "achei isso", ele recebe o achado com a evidência e com o limite declarado do que não foi possível afirmar

Isso muda MUITO a conversa com a IA, porque fica claro o que é fato e o que é lacuna

Por que a análise voltou com partes marcadas como desconhecidas

Sintoma: em um app grande, o resultado traz trechos registrados como desconhecidos

Causa: desde a v6.4.0, a análise de JavaScript roda em processo próprio isolado, com limites configuráveis de heap e timeout

Quando os recursos acabam, ela mantém os fatos já concluídos e registra explicitamente o que ficou desconhecido

Solução: trate o desconhecido como lacuna declarada, não como ausência de código

"Desconhecido" não quer dizer "não existe", quer dizer que a análise não chegou lá

Se precisar ir mais fundo, ajuste os limites de heap e timeout seguindo a documentação oficial do REA

Como prevenir: aponte para o .asar ou o diretório exato do app, não pra uma pasta enorme com tudo dentro, e mantenha o rea-agents atualizado

Vídeo de apoio

Se tu tá chegando agora no mundo dos apps web, esse vídeo do canal Hora de Codar mostra o que estudar depois de JavaScript, Vue ou React, e ajuda a entender os apps que você vai acabar investigando 🙂

Vídeo complementar do canal Hora de Codar, sobre um assunto relacionado.

Quando sair do JavaScript e partir para Ghidra, IDA ou Hopper

O JS estático cobre apps web e Electron, mas uma hora o grafo pode apontar um native add-on

Aí sim entra uma engine nativa: o REA integra Ghidra, IDA Pro e Hopper pra binários nativos

Pra testar se o Ghidra está pronto, tem o comando:

rea doctor --provider ghidra --json

E se o seu alvo for .NET, a inspeção estática também funciona sem engine nativa, então dá pra continuar no modo leve

O próximo passo prático: roda o rea doctor e faz a primeira análise num .asar que você tem autorização pra investigar, faça o teste!

Até o próximo post! =)

Perguntas frequentes

Preciso de um agente de IA conectado pra usar o REA?

Não, o agente compatível com MCP (como o Claude Code) é opcional. Dá pra rodar a análise só pela CLI, com rea analyze ou rea analyze-javascript-application, sem precisar de nenhum agente.


Quer aprender mais sobre inteligência artificial e programação na prática? Conheça o canal Hora de Codar no YouTube e acompanhe os próximos vídeos.

Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 30min

Blog | Mais populares