
ओपन-सोर्स AI रिवर्स-इंजीनियरिंग एजेंट जो Ghidra और LLMs का उपयोग करके बाइनरी से C/C++ फ़ंक्शन को पुनर्निर्माण और सत्यापित करता है।
स्वायत्त रिवर्स-इंजीनियरिंग एजेंट — स्रोत-जागरूक रिवर्सर/चेकर लूप, उद्देश्य सत्यापनकर्ता, समता इंजन, और Ghidra बैकएंड।
डेमो: YouTube
re-agent एक रिवर्सर/चेकर लूप को ghidra-ai-bridge के माध्यम से Ghidra डीकंपाइलेशन के साथ जोड़कर रिवर्स-इंजीनियरिंग वर्कफ़्लो को स्वचालित करता है। वर्तमान पाइपलाइन जनरेशन के दौरान पास के प्रोजेक्ट स्रोत संदर्भ को भी पुनर्प्राप्त करती है और चेकर पास स्वीकार करने से पहले एक रूढ़िवादी संरचनात्मक सत्यापनकर्ता चलाती है।
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 चलाने से पहले इसे इंस्टॉल करें और इसे अपने Ghidra प्रोजेक्ट पर इंगित करें।ANTHROPIC_API_KEY Claude के लिएOPENAI_API_KEY OpenAI-संगत API के लिएcodex CLI लॉगिनpip install auto-re-agent
# 1. प्रोजेक्ट कॉन्फ़िग इनिशियलाइज़ करें
re-agent init
# 2. अपनी प्रोजेक्ट सेटिंग्स के साथ re-agent.yaml संपादित करें
# 3. एकल फ़ंक्शन को रिवर्स करें
re-agent reverse --address 0x6F86A0
# 4. एक क्लास के सभी फ़ंक्शन को रिवर्स करें
re-agent reverse --class CTrain --max-functions 10
# 5. पैरिटी जाँच चलाएँ
re-agent parity --address 0x6F86A0
# 6. प्रगति देखें
re-agent status
re-agent एक स्तरित कॉन्फ़िगरेशन सिस्टम का उपयोग करता है (सर्वोच्च प्राथमिकता पहले): CLI फ़्लैग > पर्यावरण चर (RE_AGENT_*) > re-agent.yaml > डिफ़ॉल्ट।
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"
सभी विकल्पों के लिए docs/configuration.md देखें।
ANTHROPIC_API_KEY सेट करेंOPENAI_API_KEY सेट करें, वैकल्पिक रूप से base_url सेट करेंcodex exec का उपयोग करता है; किसी API कुंजी की आवश्यकता नहींपैरिटी इंजन रिवर्स किए गए कोड को मूल बाइनरी से मिलाने के लिए 11 कॉन्फ़िगरेबल ह्यूरिस्टिक सिग्नल चलाता है:
रिवर्सल लूप LLM चेकर पास होने के बाद एक रूढ़िवादी संरचनात्मक सत्यापनकर्ता भी चलाता है। यह केवल मजबूत बेमेल पर स्वीकृति को रोकता है जैसे:
यह जानबूझकर पूर्ण समतुल्यता जांच से संकीर्ण है, लेकिन यह सफल रिवर्सल के रूप में दर्ज होने से पहले स्पष्ट झूठी सकारात्मकता को पकड़ता है।
व्यवहार में यह मायने रखता है क्योंकि एक LLM चेकर अभी भी ऐसे कोड पर झूठी सकारात्मकता दे सकता है जो प्रशंसनीय दिखता है जबकि बाइनरी से वास्तविक शाखा या कॉल संरचना को याद कर रहा हो।
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
| कमांड | विवरण |
|---|
re-agent init | re-agent.yaml कॉन्फ़िग फ़ाइल उत्पन्न करें |
re-agent reverse --address ADDR | एकल फ़ंक्शन को रिवर्स करें |
re-agent reverse --class CLASS | एक क्लास के सभी फ़ंक्शन को रिवर्स करें |
re-agent reverse --dry-run | दिखाएँ कि क्या रिवर्स किया जाएगा |
re-agent parity --address ADDR | एक फ़ंक्शन पर पैरिटी जाँच चलाएँ |
re-agent parity --filter REGEX | पैटर्न से मेल खाने वाली पैरिटी जाँच चलाएँ |
re-agent status | रिवर्सल प्रगति दिखाएँ |
re-agent status --class CLASS | विशिष्ट क्लास के लिए प्रगति दिखाएँ |
| सिग्नल | स्तर | विवरण |
|---|
| Missing source | RED | हुक किए गए फ़ंक्शन के लिए कोई स्रोत बॉडी नहीं मिली |
| Stub markers | RED | स्रोत में स्टब मार्कर हैं (जैसे, NOTSA_UNREACHABLE) |
| Trivial stub | RED | प्लगइन-कॉल भारी, छोटी बॉडी और कोई नियंत्रण प्रवाह नहीं |
| Large ASM tiny source | RED | ASM >= 80 निर्देश लेकिन स्रोत <= 12 पंक्तियाँ |
| Plugin-call heavy | YELLOW | प्लगइन कॉल फ़ंक्शन बॉडी पर हावी हैं |
| Short body | YELLOW | बॉडी में 6 से कम पंक्तियाँ हैं |
| Low call count | YELLOW | डीकंपाइल में कई कैली दिखते हैं लेकिन स्रोत में कम |
| FP sensitivity | YELLOW | ASM में फ़्लोटिंग-पॉइंट ऑप्स हैं लेकिन स्रोत में नहीं |
| Call count mismatch | YELLOW | स्रोत कॉल काउंट ASM से काफी भिन्न है |
| NaN logic | YELLOW | डीकंपाइल में NaN हैंडलिंग है लेकिन स्रोत में नहीं |
| Inline wrapper | INFO | फ़ंक्शन एक पतला इनलाइन रैपर है |