
Reconstruire et valider du code C/C++ à partir de programmes compilés grâce à l'IA.
Agent autonome de rétro-ingénierie — boucle de rétro-ingénierie/vérification consciente du code source, vérificateur d'objectif, moteur de parité, et backend Ghidra.
Démo : YouTube
re-agent automatise un flux de travail de rétro-ingénierie en combinant une boucle de rétro-ingénierie/vérification avec la décompilation Ghidra via ghidra-ai-bridge. Le pipeline actuel récupère également le contexte source du projet à proximité pendant la génération et exécute un vérificateur structurel conservateur avant d'accepter les passages de vérification.
re-agent reverse --class CTrain
│
├── Config (re-agent.yaml + env + CLI)
│ └── project_profile (stub_markers, hook_patterns, source_layout)
│
├── Orchestrateur (single / class runner)
│ ├── Sélecteur de fonctions (classe par nombre d'appelants, filtre les complétées)
│ ├── Collecteur de contexte (décompilation + xrefs + structures + récupération source)
│ │
│ ├── Boucle Agent (rétro-ingénierie → vérification → correction, max N tours)
│ │ ├── Fournisseurs LLM : Claude | APIs compatibles OpenAI | Codex CLI
│ │ └── Modèles de prompt (fichiers .md personnalisables)
│ │
│ ├── Vérificateur d'objectif (vérifications de cohérence du nombre d'appels + flux de contrôle)
│ │
│ ├── Moteur de parité (porte de vérification VERT/JAUNE/ROUGE)
│ │ ├── Indexeur source (analyseur de corps C++)
│ │ ├── 11 signaux heuristiques (tous configurables/activables)
│ │ └── Règles sémantiques + Approbations manuelles
│ │
│ └── État de session (fichier JSON de progression)
│
└── Backend RE : ghidra-ai-bridge
└── Drapeaux de capacités → dégradation progressive
re-agent reverse.ANTHROPIC_API_KEY pour ClaudeOPENAI_API_KEY pour les APIs compatibles OpenAIcodex CLI locale pour le fournisseur Codexpip install auto-re-agent
# 1. Initialiser la configuration du projet
re-agent init
# 2. Modifier re-agent.yaml avec les paramètres de votre projet
# 3. Rétro-ingénierie d'une seule fonction
re-agent reverse --address 0x6F86A0
# 4. Rétro-ingénierie de toutes les fonctions d'une classe
re-agent reverse --class CTrain --max-functions 10
# 5. Exécuter les vérifications de parité
re-agent parity --address 0x6F86A0
# 6. Vérifier la progression
re-agent status
re-agent utilise un système de configuration en couches (priorité la plus élevée en premier) : drapeaux CLI > variables d'environnement (RE_AGENT_*) > re-agent.yaml > valeurs par défaut.
llm:
provider: claude # claude | openai | openai-compat | codex
model: claude-sonnet-4-5-20250929
# api_key: défini via la variable d'env RE_AGENT_LLM_API_KEY
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"
Voir docs/configuration.md pour toutes les options.
| Commande | Description |
|---|---|
re-agent init | Générer le fichier de configuration re-agent.yaml |
re-agent reverse --address ADDR | Rétro-ingénierie d'une seule fonction |
re-agent reverse --class CLASS | Rétro-ingénierie de toutes les fonctions d'une classe |
re-agent reverse --dry-run | Afficher ce qui serait rétro-conçu |
re-agent parity --address ADDR | Exécuter les vérifications de parité sur une fonction |
re-agent parity --filter REGEX | Exécuter les vérifications de parité correspondant au motif |
re-agent status | Afficher la progression de la rétro-ingénierie |
re-agent status --class CLASS | Afficher la progression pour une classe spécifique |
ANTHROPIC_API_KEYOPENAI_API_KEY, éventuellement définir base_urlcodex exec local avec les identifiants de connexion ChatGPT ; aucune clé API requiseLe moteur de parité exécute 11 signaux heuristiques configurables pour vérifier que le code rétro-conçu correspond au binaire d'origine :
| Signal | Niveau | Description |
|---|---|---|
| Source manquante | ROUGE | Aucun corps source trouvé pour la fonction hookée |
| Marqueurs de stub | ROUGE | La source contient des marqueurs de stub (ex. NOTSA_UNREACHABLE) |
| Stub trivial | ROUGE | Forte dépendance aux appels plugin avec un corps minuscule et aucun flux de contrôle |
| Grand ASM petite source | ROUGE | ASM >= 80 instructions mais source <= 12 lignes |
| Forte dépendance aux appels plugin | JAUNE | Les appels plugin dominent le corps de la fonction |
| Corps court | JAUNE | Le corps a moins de 6 lignes |
| Faible nombre d'appels | JAUNE | La décompilation montre de nombreux appelés mais la source en a peu |
| Sensibilité aux virgules flottantes | JAUNE | L'ASM contient des opérations en virgule flottante mais pas la source |
| Déséquilibre du nombre d'appels | JAUNE | Le nombre d'appels source diffère significativement de l'ASM |
| Logique NaN | JAUNE | La décompilation contient une gestion NaN mais pas la source |
| Wrapper inline | INFO | La fonction est un mince wrapper inline |
La boucle de rétro-ingénierie exécute également un vérificateur structurel conservateur après les passes du vérificateur LLM. Il ne bloque l'acceptation que sur des incohérences fortes telles que :
Ceci est intentionnellement plus étroit qu'une vérification complète d'équivalence, mais cela permet d'attraper les faux positifs évidents avant qu'ils ne soient enregistrés comme des rétro-ingénieries réussies.
C'est important en pratique car un vérificateur LLM peut toujours produire des faux positifs sur du code qui semble plausible tout en manquant la véritable structure de branche ou d'appel du binaire.
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