
عامل هندسة عكسية باستخدام الذكاء الاصطناعي مفتوح المصدر يستخدم Ghidra و LLMs لإعادة بناء والتحقق من دوال C/C++ من الملفات الثنائية.
وكيل عكسي ذاتي — حلقة عكسي/مدقق واعية بالمصدر، مُدقق أهداف، محرك تكافؤ، ونظام خلفي لـ Ghidra.
عرض توضيحي: YouTube
يقوم re-agent بأتمتة سير عمل الهندسة العكسية عبر دمج حلقة عكسي/مدقق مع تفكيك Ghidra من خلال ghidra-ai-bridge. كما يقوم خط الأنابيب الحالي باسترجاع سياق المشروع المصدر القريب أثناء التوليد وتشغيل مدقق هيكلي محافظ قبل قبول تمريرات المدقق.
re-agent reverse --class CTrain
│
├── التكوين (re-agent.yaml + env + CLI)
│ └── project_profile (stub_markers, hook_patterns, source_layout)
│
├── المُنسّق (منفرد / مشغل صف)
│ ├── منتقي الدوال (يرتب حسب عدد المستدعين، يصفى المكتملة)
│ ├── جامع السياق (تفكيك + مراجع متقاطعة + هياكل + استرجاع المصدر)
│ │
│ ├── حلقة الوكيل (عكسي → مدقق → إصلاح، بحد أقصى N جولة)
│ │ ├── مزودو LLM: Claude | واجهات برمجة متوافقة مع OpenAI | CLI Codex
│ │ └── قوالب الأوامر (ملفات .md قابلة للتخصيص)
│ │
│ ├── مُدقق الأهداف (فحوصات عدد الاستدعاءات وسلامة تدفق التحكم)
│ │
│ ├── محرك التكافؤ (بوابة تحقق أخضر/أصفر/أحمر)
│ │ ├── مفهرس المصدر (محلل جسم C++)
│ │ ├── 11 إشارة استدلالية (قابلة للتكوين والتبديل)
│ │ └── قواعد دلالية + موافقات يدوية
│ │
│ └── حالة الجلسة (ملف تقدّم JSON)
│
└── النظام الخلفي للهندسة العكسية: ghidra-ai-bridge
└── أعلام القدرة → تدهور سلس
re-agent reverse.ANTHROPIC_API_KEY لـ ClaudeOPENAI_API_KEY لواجهات برمجة متوافقة مع OpenAIcodex CLI لمزود Codexpip 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: يتم تعيينه عبر متغير البيئة 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"
راجع docs/configuration.md لجميع الخيارات.
ANTHROPIC_API_KEYOPENAI_API_KEY، اختيارياً عيّن base_urlcodex exec المحلي مع بيانات اعتماد تسجيل الدخول إلى ChatGPT؛ لا حاجة لمفتاح 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 | المصدر يحتوي على علامات stub (مثل 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 | الدالة هي غلاف inline رفيع |