
Reconstruct and validate C/C++ code from compiled programs with AI.
Autonomer Reverse-Engineering-Agent – quellcode-bewusste Reversier/Prüf-Schleife, Zielverifizierer, Parity-Engine und Ghidra-Backend.
Demo: YouTube
re-agent automatisiert einen Reverse-Engineering-Workflow, indem es eine Reversier/Prüf-Schleife mit Ghidra-Dekompilierung über ghidra-ai-bridge kombiniert. Die aktuelle Pipeline ruft während der Generierung auch den umliegenden Projektquellcode-Kontext ab und führt vor der Annahme von Prüfläufen einen konservativen strukturellen Verifizierer aus.
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 ausführen.ANTHROPIC_API_KEY für ClaudeOPENAI_API_KEY für OpenAI-kompatible APIscodex CLI-Login für den Codex-Anbieterpip install auto-re-agent
# 1. Projektkonfiguration initialisieren
re-agent init
# 2. re-agent.yaml mit Ihren Projekteinstellungen bearbeiten
# 3. Eine einzelne Funktion reversieren
re-agent reverse --address 0x6F86A0
# 4. Alle Funktionen einer Klasse reversieren
re-agent reverse --class CTrain --max-functions 10
# 5. Parity-Prüfungen ausführen
re-agent parity --address 0x6F86A0
# 6. Fortschritt anzeigen
re-agent status
re-agent verwendet ein mehrschichtiges Konfigurationssystem (höchste Priorität zuerst): CLI-Flags > Umgebungsvariablen (RE_AGENT_*) > re-agent.yaml > Standardwerte.
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"
Siehe docs/configuration.md für alle Optionen.
| Befehl | Beschreibung |
|---|---|
re-agent init | re-agent.yaml-Konfigurationsdatei erstellen |
re-agent reverse --address ADDR | Eine einzelne Funktion reversieren |
re-agent reverse --class CLASS | Alle Funktionen einer Klasse reversieren |
re-agent reverse --dry-run | Anzeigen, was reversiert würde |
re-agent parity --address ADDR | Parity-Prüfungen für eine Funktion ausführen |
re-agent parity --filter REGEX | Parity-Prüfungen für passendes Muster ausführen |
re-agent status | Reversierungsfortschritt anzeigen |
re-agent status --class CLASS | Fortschritt für eine bestimmte Klasse anzeigen |
ANTHROPIC_API_KEYOPENAI_API_KEY, optional base_urlcodex exec mit ChatGPT-Anmeldedaten; kein API-Schlüssel erforderlichDie Parity-Engine führt 11 konfigurierbare heuristische Signale aus, um zu überprüfen, ob der reversierte Code mit dem ursprünglichen Binärcode übereinstimmt:
| Signal | Stufe | Beschreibung |
|---|---|---|
| Fehlende Quelle | ROT | Kein Quellkörper für die eingehakte Funktion gefunden |
| Stub-Marker | ROT | Quelle enthält Stub-Marker (z. B. NOTSA_UNREACHABLE) |
| Trivialer Stub | ROT | Starker Plugin-Call-Anteil mit winzigem Körper und ohne Kontrollfluss |
| Große ASM, winzige Quelle | ROT | ASM >= 80 Anweisungen, aber Quelle <= 12 Zeilen |
| Plugin-Call-lastig | GELB | Plugin-Calls dominieren den Funktionskörper |
| Kurzer Körper | GELB | Körper hat weniger als 6 Zeilen |
| Niedrige Call-Anzahl | GELB | Dekompilierung zeigt viele Callees, aber Quelle hat wenige |
| FP-Empfindlichkeit | GELB | ASM enthält Gleitkommaoperationen, Quelle jedoch nicht |
| Call-Anzahl-Unterschied | GELB | Quell-Call-Anzahl weicht signifikant von ASM ab |
| NaN-Logik | GELB | Dekompilierung enthält NaN-Behandlung, Quelle jedoch nicht |
| Inline-Wrapper | INFO | Funktion ist ein dünner Inline-Wrapper |
Die Reversierungsschleife führt außerdem einen konservativen strukturellen Verifizierer aus, nachdem der LLM-Prüfer bestanden hat. Er blockiert die Annahme nur bei starken Abweichungen wie:
Dies ist bewusst enger gefasst als eine vollständige Äquivalenzprüfung, fängt aber offensichtliche Falschpositive ab, bevor sie als erfolgreiche Reversierungen aufgezeichnet werden.
Dies ist in der Praxis wichtig, da ein LLM-Prüfer immer noch fälschlicherweise Code als positiv bewerten kann, der plausibel aussieht, während die tatsächliche Verzweigungs- oder Call-Struktur des Binärcodes fehlt.
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