العودة إلى التحديثات
New releaseJul 21, 2026

diaphora-mcp v1.0.6

خادم MCP للتباين الثنائي الآلي.

مشاركة

Читать на русском языке

Diaphora MCP

Diaphora MCP هو خادم MCP (بروتوكول سياق النموذج) للمقارنة الثنائية الآلية. يربط بين Diaphora (محرك المقارنة) و IDA Pro (مفكك التجميع) عبر بروتوكول MCP، مما يسمح للوكلاء الذكيين (مثل Claude Code) بإجراء مقارنة الملفات الثنائية، والعثور على التصحيحات الأمنية، وتحليل التغييرات.

الميزات

  • التصدير: يحول قواعد بيانات .i64 / .idb التي تم تحليلها إلى تنسيق Diaphora SQLite (عبر وضع idat.exe بدون واجهة)
  • المقارنة: يقارن بين قاعدتي بيانات تم تصديرهما، ويصفّي النتائج حسب نوع المطابقة والنسبة
  • تحليل الثغرات: يبحث عن التغييرات ذات الصلة بالأمان باستخدام مطابقة الكلمات الرئيسية والإرشادات الاستدلالية
  • كشف التصحيحات: يكتشف تلقائياً عمليات التحقق الجديدة من الحدود، والتحقق من القيم الفارغة، ومعالجة الأخطاء، والتغييرات في التشفير
  • الترتيب: يرتب الدوال المتغيرة حسب الأهمية بناءً على CFG، والقفزات المعقدة، والمؤشرات الأمنية
  • رسم بياني للاستدعاءات: يقارن مسارات الاستدعاء (BFS، حتى N مستويات)، ويكشف تغييرات السبب الجذري في تسلسلات الاستدعاء
  • نقل البيانات الوصفية: يهيئ الأسماء والتعليقات والنماذج الأولية للنقل بين قواعد البيانات
  • التكامل مع IDA Pro MCP: جميع الأدوات تُرجع العناوين ومسارات قواعد البيانات الجاهزة للإرسال مباشرة إلى أدوات IDA Pro MCP

التثبيت

1. المتطلبات

  • Python 3.10+
  • IDA Pro 8.x / 9.x (للتصدير بدون واجهة عبر idat.exe)
  • إضافة Diaphora المثبتة في IDA
  • Claude Code (أو أي عميل متوافق مع MCP)

2. تثبيت الحزمة

git clone https://github.com/xTeardx/diaphora-mcp.git
cd diaphora-mcp
pip install -e .

3. إعداد المسارات

يحاول الحزمة العثور تلقائياً على IDA Pro و Diaphora في مواقع التثبيت القياسية. إذا لم يتم العثور عليهما، يمكنك تعيين متغيرات البيئة التالية:

المتغيرالوصفمثال
IDAT_PATHالمسار الكامل لـ idat.exeC:\Program Files\IDA Pro 9.3\idat.exe
DIAPHORA_DIRالمجلد الذي يحتوي على diaphora.pyC:\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 (ساعتين).

3.1. Codex و IDA MCP بدون واجهة

يستخدم 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

4. تحضير قواعد البيانات للمقارنة

يجب على 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/                           # سجلات التصدير الآلية (تُنشأ ديناميكياً)

مرجع أدوات MCP (21 أداة)

التصدير

الأداةالوصف
export_idb_to_diaphoraيصدر قاعدة بيانات .i64/.idb إلى تنسيق SQLite باستخدام IDA بدون واجهة
batch_export_and_diffمسار كامل: تصدير أساسي → تصدير ثانوي → مقارنة → ملخص

المقارنة

الأداةالوصف
diff_diaphora_dbsيقارن بين قاعدتي بيانات Diaphora SQLite تم تصديرهما
get_diff_resultsيقرأ ملف المقارنة .diaphora مع إمكانية التصفية
get_diff_summaryيعيد إحصائيات المطابقة

الفئات