
Reconstrua e valide código C/C++ a partir de programas compilados com IA.
Agente autónomo de engenharia reversa — loop de reversão/verificação consciente do código-fonte, verificador de objetivos, motor de paridade e backend Ghidra.
Demonstração: YouTube
O re-agent automatiza um fluxo de trabalho de engenharia reversa combinando um loop de reversor/verificador com descompilação Ghidra através do ghidra-ai-bridge. O pipeline atual também recupera contexto do código-fonte do projeto próximo durante a geração e executa um verificador estrutural conservador antes de aceitar as passagens do verificador.
re-agent reverse --class CTrain
│
├── Config (re-agent.yaml + env + CLI)
│ └── project_profile (stub_markers, hook_patterns, source_layout)
│
├── Orchestrator (single / class runner)
│ ├── Function Picker (ranks by caller count, filters completed)
│ ├── Context Gatherer (decompile + xrefs + structs + source retrieval)
│ │
│ ├── Agent Loop (reverser → checker → fix, max N rounds)
│ │ ├── LLM Providers: Claude | OpenAI-compatible APIs | Codex CLI
│ │ └── Prompt Templates (customizable .md files)
│ │
│ ├── Objective Verifier (call-count + control-flow sanity checks)
│ │
│ ├── Parity Engine (GREEN/YELLOW/RED verification gate)
│ │ ├── Source Indexer (C++ body parser)
│ │ ├── 11 Heuristic Signals (all configurable/toggleable)
│ │ └── Semantic Rules + Manual Approvals
│ │
│ └── Session State (JSON progress file)
│
└── RE Backend: ghidra-ai-bridge
└── Capability flags → graceful degradation
re-agent reverse.ANTHROPIC_API_KEY para ClaudeOPENAI_API_KEY para APIs compatíveis com OpenAIcodex CLI para o provedor Codexpip install auto-re-agent
# 1. Inicializar a configuração do projeto
re-agent init
# 2. Editar re-agent.yaml com as configurações do seu projeto
# 3. Reverter uma única função
re-agent reverse --address 0x6F86A0
# 4. Reverter todas as funções de uma classe
re-agent reverse --class CTrain --max-functions 10
# 5. Executar verificações de paridade
re-agent parity --address 0x6F86A0
# 6. Verificar progresso
re-agent status
O re-agent utiliza um sistema de configuração em camadas (prioridade mais alta primeiro): flags CLI > variáveis de ambiente (RE_AGENT_*) > re-agent.yaml > padrões.
llm:
provider: claude # claude | openai | openai-compat | codex
model: claude-sonnet-4-5-20250929
# api_key: set via RE_AGENT_LLM_API_KEY env var
timeout_s: 1800
backend:
type: ghidra-bridge
cli_path: ~/ghidra-tools/ghidra
orchestrator:
max_review_rounds: 4
max_functions_per_class: 10
objective_verifier_enabled: true
project_profile:
source_root: ./source/game_sa
hook_patterns:
- 'RH_ScopedInstall\s*\(\s*(\w+)\s*,\s*(0x[0-9A-Fa-f]+)'
stub_markers: ["NOTSA_UNREACHABLE"]
stub_call_prefix: "plugin::Call"
Veja docs/configuration.md para todas as opções.
| Comando | Descrição |
|---|---|
re-agent init | Gerar arquivo de configuração re-agent.yaml |
re-agent reverse --address ADDR | Reverter uma única função |
re-agent reverse --class CLASS | Reverter todas as funções de uma classe |
re-agent reverse --dry-run | Mostrar o que seria revertido |
re-agent parity --address ADDR | Executar verificações de paridade numa função |
re-agent parity --filter REGEX | Executar verificações de paridade correspondendo ao padrão |
re-agent status | Mostrar progresso da reversão |
re-agent status --class CLASS | Mostrar progresso para uma classe específica |
ANTHROPIC_API_KEYOPENAI_API_KEY, opcionalmente defina base_urlcodex exec local com credenciais de login do ChatGPT; nenhuma chave de API necessáriaO motor de paridade executa 11 sinais heurísticos configuráveis para verificar se o código revertido corresponde ao binário original:
| Sinal | Nível | Descrição |
|---|---|---|
| Código-fonte ausente | VERMELHO | Nenhum corpo de fonte encontrado para a função com hook |
| Marcadores stub | VERMELHO | A fonte contém marcadores stub (ex.: NOTSA_UNREACHABLE) |
| Stub trivial | VERMELHO | Muitas chamadas de plugin com corpo pequeno e sem fluxo de controlo |
| ASM grande, fonte pequena | VERMELHO | ASM >= 80 instruções mas fonte <= 12 linhas |
| Muitas chamadas de plugin | AMARELO | Chamadas de plugin dominam o corpo da função |
| Corpo curto | AMARELO | Corpo tem menos de 6 linhas |
| Baixa contagem de chamadas | AMARELO | Descompilação mostra muitos callees mas a fonte tem poucos |
| Sensibilidade FP | AMARELO | ASM tem operações de ponto flutuante mas a fonte não |
| Incompatibilidade de contagem de chamadas | AMARELO | A contagem de chamadas na fonte difere significativamente da ASM |
| Lógica NaN | AMARELO | A descompilação tem tratamento NaN mas a fonte não |
| Wrapper inline | INFO | A função é um wrapper inline fino |
O loop de reversão também executa um verificador estrutural conservador após o verificador LLM passar. Ele só bloqueia a aceitação em incompatibilidades fortes, como:
Isto é intencionalmente mais restrito do que uma verificação completa de equivalência, mas capta falsos positivos óbvios antes de serem registados como reversões bem-sucedidas.
Isto é importante na prática porque um verificador LLM ainda pode dar falso positivo em código que parece plausível enquanto falta a verdadeira estrutura de ramos ou chamadas do binário.
git clone https://github.com/dryxio/auto-re-agent.git
cd auto-re-agent
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest tests/
ruff check src/
mypy src/re_agent/
MIT