
خادم MCP للتباين الثنائي الآلي.
Diaphora MCP هو خادم MCP (بروتوكول سياق النموذج) للمقارنة الثنائية الآلية. يربط بين Diaphora (محرك المقارنة) و IDA Pro (مفكك التجميع) عبر بروتوكول MCP، مما يسمح للوكلاء الذكيين (مثل Claude Code) بإجراء مقارنة الملفات الثنائية، والعثور على التصحيحات الأمنية، وتحليل التغييرات.
.i64 / .idb التي تم تحليلها إلى تنسيق Diaphora SQLite (عبر وضع idat.exe بدون واجهة)idat.exe)git clone https://github.com/xTeardx/diaphora-mcp.git
cd diaphora-mcp
pip install -e .
يحاول الحزمة العثور تلقائياً على IDA Pro و Diaphora في مواقع التثبيت القياسية. إذا لم يتم العثور عليهما، يمكنك تعيين متغيرات البيئة التالية:
| المتغير | الوصف | مثال |
|---|---|---|
IDAT_PATH | المسار الكامل لـ idat.exe | C:\Program Files\IDA Pro 9.3\idat.exe |
DIAPHORA_DIR | المجلد الذي يحتوي على diaphora.py | C:\Program Files\IDA Pro 9.3\plugins\diaphora-3.4.1 |
DIAPHORA_OUTPUT_ROOT | الدليل الجذر المسموح به لملفات التصدير الجديدة | D:\\diaphora-outputs |
DIAPHORA_PYTHON | مترجم Python لعملية المقارنة | /usr/bin/python3 (الافتراضي هو sys.executable) |
بالنسبة لـ Claude Code، يمكنك تحديدها في ~/.claude.json (أو ملف التكوين المطابق لعميل MCP الخاص بك):
{
"mcpServers": {
"diaphora": {
"command": "python",
"args": ["path/to/repo/diaphora_mcp_server.py"],
"env": {
"IDAT_PATH": "C:\\Program Files\\IDA Pro 9.3\\idat.exe",
"DIAPHORA_DIR": "C:\\Program Files\\IDA Pro 9.3\\plugins\\diaphora-3.4.1"
},
"timeout": 7200
}
}
}
ملاحظة: بالنسبة للملفات الثنائية الكبيرة جداً (>100 MB)، تأكد من أن
timeoutلا يقل عن 7200 (ساعتين).
يستخدم Codex عادةً خادمي MCP متكاملين:
diaphora-mcp — هذا المشروع: التصدير، مقارنة Diaphora، وتحليل النتائج؛ida-pro-mcp — خادم فحص IDA الأساسي لـ idb_open، وإعادة التجميع، والتحليل على مستوى العنوان.idalib-mcp هو الجزء الخلفي بدون واجهة لـ ida-pro-mcp، وليس خادماً منفصلاً لـ Diaphora. بعد تثبيته، أعد تشغيل Codex:
uv run ida-pro-mcp --install codex --transport streamable-http --scope global --ida-rpc http://127.0.0.1:8745/mcp
بالنسبة لهذا المشروع، يكفي تكوين stdio:
[mcp_servers.diaphora-mcp]
command = "python"
args = ["D:\\path\\to\\diaphora-mcp\\diaphora_mcp_server.py"]
startup_timeout_sec = 120
يجب على IDA Pro تحليل الملفات الثنائية أولاً (إنشاء ملفات .i64 أو .idb). بعد ذلك:
┃ export_idb_to_diaphora(idb_path="old_version.i64")
┃ export_idb_to_diaphora(idb_path="new_version.i64")
أو تشغيل المسار الكامل في أمر واحد:
┃ batch_export_and_diff(idb1="old.i64", idb2="new.i64")
لا تمرر .i64 مباشرة إلى أدوات النتائج: إنها قاعدة بيانات IDA، وليست SQLite. قم بتصديرها أولاً.
┃ # 1. مسار كامل: تصدير ملفين .i64 → مقارنة → تقرير ملخص
┃ batch_export_and_diff(idb1="v1.0.i64", idb2="v1.1.i64")
┃ # 2. إذا كانت قواعد البيانات مصدرة بالفعل
┃ diff_diaphora_dbs(db1="v1.0.sqlite", db2="v1.1.sqlite")
┃ # 3. تحليل أمني لنتائج المقارنة
┃ analyze_diff_results(results_path="v1.0_vs_v1.1.diaphora")
┃ # 4. ترتيب التغييرات حسب الأهمية
┃ rank_changes(results_path="v1.0_vs_v1.1.diaphora", top_n=20)
┃ # 5. العثور على تغييرات السبب الجذري
┃ find_patch_root(results_path="v1.0_vs_v1.1.diaphora")
┃ # 6. كشف التصحيحات الأمنية المحتملة
┃ detect_security_patches(results_path="v1.0_vs_v1.1.diaphora")
┃ # 7. إنشاء تقرير كامل
┃ summarize_patch(results_path="v1.0_vs_v1.1.diaphora")
انظر examples/basic-session.md للحصول على نص كامل خطوة بخطوة لجلسة حقيقية مع Diaphora MCP — من تصدير قاعدتي بيانات IDB إلى مقارنة الدوال الفردية. متوفر أيضاً باللغة الروسية.
إليك لمحة سريعة عما يعيده الخادم:
الإدخال — مقارنة ملفي SQLite3 DLL (2015 مقابل 2023):
{"idb1_path": "old.i64", "idb2_path": "new.i64", "use_decompiler": false}
الإخراج — ملخص بعد التصدير + المقارنة:
{
"best_matches": 60,
"partial_matches": 993,
"multimatches": 52,
"unmatched_primary": 2647
}
تستعرض الجلسة 6 استدعاءات لأدوات MCP، مع إظهار JSON الدقيق لكل خطوة، إلى جانب منطق الوكيل.
┃ # الحصول على معلومات تصدير قاعدة البيانات
┃ get_export_info(db_path="app.sqlite")
┃ # البحث عن الدوال
┃ search_export_db(db_path="app.sqlite", name_pattern="%crypt%", min_instructions=50)
┃ # استرجاع الكود الزائف
┃ get_function_pseudocode(db_path="app.sqlite", address="401000")
diaphora-mcp/
├── diaphora_mcp_server.py # نقطة الدخول الرئيسية
├── diaphora_mcp/
│ ├── diaphora_mcp_server.py # تسجيل أداة MCP
│ ├── config.py # تكوين المسار والكشف التلقائي
│ ├── models.py # الثوابت والنماذج
│ ├── core/
│ │ ├── export.py # التصدير بدون واجهة، المسار الدفعي
│ │ ├── diff.py # المقارنة وقارئ نتائج .diaphora
│ │ ├── analysis.py # البحث عن الدوال، المقارنة، التفسير
│ │ ├── security.py # مطابقة الكلمات الرئيسية، كشف التصحيحات
│ │ ├── ranking.py # ترتيب الأهمية
│ │ ├── graph.py # رسم الاستدعاءات، أشجار BFS، السبب الجذري
│ │ ├── metadata.py # إعداد البيانات الوصفية (الأسماء، التعليقات)
│ │ └── report.py # إنشاء تقرير التصحيح الكامل
│ └── utils/
│ ├── sqlite.py # مساعدات SQLite
│ ├── format.py # مقارنة الكود الزائف، استخراج متجه الميزات
│ └── log.py # أدوات تسجيل التصدير
├── _diaphora_headless.py # idat.exe -S غلاف رقيق
└── logs/ # سجلات التصدير الآلية (تُنشأ ديناميكياً)
| الأداة | الوصف |
|---|---|
export_idb_to_diaphora | يصدر قاعدة بيانات .i64/.idb إلى تنسيق SQLite باستخدام IDA بدون واجهة |
batch_export_and_diff | مسار كامل: تصدير أساسي → تصدير ثانوي → مقارنة → ملخص |
| الأداة | الوصف |
|---|---|
diff_diaphora_dbs | يقارن بين قاعدتي بيانات Diaphora SQLite تم تصديرهما |
get_diff_results | يقرأ ملف المقارنة .diaphora مع إمكانية التصفية |
get_diff_summary | يعيد إحصائيات المطابقة |