
خادم MCP محلي أولاً وحتمي لـ IDA Pro/Home: 109 عمليات هندسة عكسية بمخطط صارم، ونتائج مدعومة بالأدلة، وتعديلات IDB مقيّدة بالسياسات.

IDA Pro MCP هو خادم محلي لبروتوكول سياق النموذج (Model Context Protocol) الخاص بـ IDA Pro. يتيح لعميل MCP فحص قاعدة بيانات IDB، وطلب نتائج تحليل حتمية من IDA، وعند السماح الصريح، كتابة التعليقات التوضيحية أو التغييرات الأخرى مرة أخرى إلى IDB. تعمل العملية المضيفة خارج IDA وتبدأ عملية IDA منفصلة بدون واجهة رسومية لكل جلسة افتراضيًا.
ida_* بمخططات صارمة مع اكتشاف مباشر عبر tools/list و ida_help.الإصدار الحالي هو 1.0.0a3. هذا برنامج ألفا. قد تتغير أسماء عمليات العامة والمخططات وتنسيق مساحة العمل قبل إصدار 1.0.0 المستقر. يحتوي سطح العميل الافتراضي على 109 عمليات بمخططات دقيقة. استخدم الاكتشاف المباشر للحصول على العقد الكامل: يعدّد كل عملية مع مخططها، و يعيد الوسائط الدقيقة ومثالاً لعملية واحدة.
ida_*tools/listida_help(topic="...")تحتاج إلى:
idat/idat64. تغطي أدلة الاختبار المباشر في المستودع IDA 9.3 و 9.4؛ الإصدار 9.2 هو الحد الأدنى المعلن للتوافق.لا يتطلب التحليل العادي نموذجًا لغويًا أو نموذج تضمين. تستخدم ميزات البحث الدلالي الاختيارية نموذجًا محليًا افتراضيًا وتبقى معطلة عند عدم تكوين نموذج.
بيئة التشغيل الافتراضية هي idat: عملية IDA واحدة بدون واجهة رسومية لكل جلسة. الواجهة الخلفية idalib تجريبية، وتتطلب تثبيت IDA 9.3 أو أحدث مع تفعيل حزمة idapro، وليست ضرورية للتثبيت الأول.
ينشئ المثبّت بيئة مُدارة تحت جذر التثبيت، ويثبّت نسخة مجمّدة من نسخة المصدر فيها، ويكتب تكوين العميل لمواقع العملاء المدعومة. من جذر المستودع، شغّل:
python3 install.py
للتثبيت المعروف لـ IDA، مرّره صراحةً:
python3 install.py --ida-dir /path/to/ida-pro-9.3
لتشغيل غير تفاعلي:
python3 install.py --yes --no-ida-prompt --ida-dir /path/to/ida-pro-9.3
يمكن للمثبّت أيضًا العثور على IDA عبر IDADIR و IDA_DIR، والملفات التنفيذية لـ IDA على PATH، وأدلة التثبيت الشائعة. يختار --ida-version إصدارًا عند وجود أكثر من تثبيت واحد. استخدم --dry-run لفحص التغييرات المخطط لها أولاً.
لا يقوم المثبّت بتنزيل نموذج تضمين إلا إذا اخترت أو طلبت واحدًا. قد ينشئ أو يحدّث ملفات التكوين لكل موقع عميل في خريطة العملاء المدمجة، بما في ذلك العملاء غير المثبتين على جهازك. تحقق من install-report.json في جذر التثبيت وأزل الإدخالات غير المستخدمة إذا لزم الأمر. يتم نسخ ملفات التكوين العادية الموجودة احتياطيًا قبل تغييرها؛ يتم رفض الملفات التالفة أو المرتبطة رمزيًا أو غير العادية بدلاً من الكتابة فوقها.
أعد تشغيل عميل MCP بعد التثبيت لإعادة تحميل تكوينه.
تكتشف أطر الوكلاء سطح الأدوات مباشرةً: tools/list يعدّد كل عملية مع مخططها، و ida_help(topic="...") يعيد الوسائط الدقيقة ومثالاً. لا يتم تثبيت ملفات مهارات ثابتة.
جذر التثبيت الافتراضي هو:
~/.local/share/ida-pro-mcp%LOCALAPPDATA%/ida-pro-mcpعيّن IDA_PRO_MCP_HOME أو مرّر --install-root لاختيار موقع آخر.
يتم بناء إصدارات ألفا بواسطة GitHub Actions ونشرها يدويًا كإصدارات أولية. عند توفر إصدار، نزّل أصل bundle.zip أو bundle.tar.gz وملف SHA256SUMS الخاص به من صفحة الإصدارات. تحقق من المجموع الاختباري، واستخرج الحزمة، وشغّل المثبّت من دليلها الأعلى:
python3 install.py --yes --no-ida-prompt --ida-dir /path/to/ida-pro-9.3
يحتوي الإصدار أيضًا على wheel وتوزيع مصدري لتثبيتات Python النصية. الحزمة هي المسار الأبسط لأنها تتضمن المثبّت وجميع ملفات المشروع اللازمة لتكوين عميل MCP. الإصدارات بجودة ألفا؛ احتفظ بالملف الثنائي الأصلي و IDB واقرأ ملاحظات الإصدار قبل الترقية.
يكتب المثبّت إدخال الخادم لمسارات تكوين العميل التي يعرفها. يدعم Gemini CLI و Antigravity و Antigravity IDE و Antigravity CLI و Claude Code و Codex و Copilot CLI و OpenCode و Claude Desktop و Cursor و VS Code و Windsurf و Cline و Roo Code. يستخدم OpenCode وعملاء عائلة Copilot أشكال تكوين مختلفة؛ دع المثبّت يكتب تلك الملفات أو اتبع دليل إعداد OpenCode.
لعميل يستخدم تنسيق JSON الشائع، يكون الإدخال مكافئًا لـ:
{
"mcpServers": {
"ida-pro-mcp": {
"command": "/path/to/ida-pro-mcp/.venv/bin/python",
"args": ["-u", "-m", "ida_pro_mcp.host.server"],
"env": {
"IDA_PRO_MCP_HOME": "/path/to/ida-pro-mcp",
"IDADIR": "/path/to/ida-pro-9.3",
"IDA_MCP_TOOL_SURFACE": "agent"
}
}
}
}
على Windows، استخدم المفسّر المُدار في <install-root>/.venv/Scripts/python.exe. التفاصيل المهمة هي المفسّر المُدار، و -u -m ida_pro_mcp.host.server، ودليل IDA المحدد، و IDA_MCP_TOOL_SURFACE=agent. لا توجّه العميل إلى install.py؛ هذا الملف هو المثبّت، وليس خادم MCP.
بعد تغيير تكوين العميل، أعد تشغيل العميل بالكامل وتحقق من ظهور ida_help في عملياته المتاحة. إذا أظهر العميل فقط واجهة tool(action=...) القديمة الواسعة، فتحقق من أن البيئة تحدد سطح agent الافتراضي بدلاً من IDA_MCP_TOOL_SURFACE=legacy.
استخدم مسارًا مطلقًا لملف ثنائي اختباري أولاً. فتح ملف ثنائي ينتظر عادةً انتهاء التحليل الأولي لـ IDA؛ قد يستغرق الملف الثنائي الكبير وقتًا.
ida_open_binary(binary_path="/absolute/path/to/sample")
ida_session_status()
ida_overview()
ida_list_imports(limit=30)
ida_list_strings(query="http", limit=30)
ida_find(query="main", limit=20)
ida_decompile(address="<address returned by IDA>")
ida_xrefs_to(address="<same address>")
استخدم ida_help(topic="ida_decompile") كلما احتجت إلى مخطط الوسائط الدقيق. مخططات العمليات العامة صارمة: يتم رفض الوسائط غير المعروفة. قد يتم قبول العناوين كأعداد صحيحة أو سلاسل وفقًا لعقد العملية الفردية؛ استخدم الشكل الموضح بواسطة ida_help للعملية في عميلك.
لسجل تحقيق صغير، عمليات نتائج مساحة العمل هي:
ida_write_finding(title="Input reaches parser", address="<address returned by IDA>", kind="finding", status="confirmed", confidence=0.8, evidence=[{"type":"call", "value":"recv", "address":"<evidence address>"}])
ida_analysis_brief()
ida_next_target()
ida_export_findings(format="markdown")
يتم الاحتفاظ بنتائج مساحة العمل بشكل منفصل عن تعديلات IDB. إذا سمحت السياسة النشطة بكتابة مساحة العمل، يسجل ida_write_finding نتيجة محليًا؛ وإلا يعيد الخادم خطأ سياسة. يعاين ida_publish_findings(dry_run=true) تغييرات IDB. النشر وإعادة التسمية والترقيع وتعديلات IDB الأخرى محكومة بالسياسة وتتطلب الإقرار الموثق للعملية حيثما تعرض العملية ذلك.
تبقى الصفحة الرئيسية موجهة نحو المهام، لكن هذا الفهرس المدمج يبقي السطح العام سهل المسح. كل اسم أدناه مسبوق بـ ida_ عند الاستدعاء. المخططات والأمثلة الكاملة متاحة مباشرة عبر tools/list و ida_help(topic="...").
| المجموعة | العمليات |
|---|---|
| الجلسة | open_binary, open_background, session_state, session_status, session_health, close_session, session_get, session_list, sso_activate, agent_login, agent_logout, session_switch |
| الاكتشاف | overview, find, semantic_search, reranker_status, function_families, index_functions, index_status, cancel_index, list_functions, list_strings, list_imports, list_types, list_segments, list_sigs, sreg_get, sreg_list, auto_wait, events, registers, search_data_value, search_query_lang, r2_status, r2_bininfo, r2_load_hints, r2_disassemble_hypothesis, r2_vxrefs, fw_detect_vector_table, fw_detect_load_base, fw_detect_mmio, fw_rtos_scan, fw_carve |
| الكود | decompile, disassemble, compare_functions, diff_sessions, xrefs_to, callers, callees, read_bytes, get_type, callgraph, emulate |
| النتائج |
سياسة الخادم الأساسية هي assist. قد تشدد الجلسة سياسة المشغل الأساسية لكن لا يمكنها تخفيفها. السياسة حتمية؛ لا تقرر أن عملية محفوفة بالمخاطر آمنة لأن عميلاً يطلب ذلك.
الفحص للقراءة فقط هو نقطة البداية العادية. تشمل الأمثلة ida_overview و ida_find و ida_list_functions و ida_list_strings و ida_list_imports و ida_decompile و ida_disassemble و ida_xrefs_to و ida_callers و ida_callees و ida_callgraph و ida_read_bytes وعمليات الحساب. لا تزال هذه تستهلك الملفات المحلية وموارد IDA، ويتلقى عميل MCP نتائجها.
الإجراءات التالية تغير الحالة الدائمة أو تنفذ كودًا ويجب التعامل معها على أنها عالية التأثير:
ida_rename و ida_comment و ida_patch_bytes وتغييرات الدوال/الأنواع/المقاطع/البيانات وتطبيق التوقيعات و ida_save_idb واللقطات وعمليات التراجع/الاستعادة يمكن أن تغير IDB أو الحالة ذات الصلة.ida_publish_findings يكتب النتائج في IDB. شغّل نموذج التشغيل التجريبي أولاً؛ النموذج غير التجريبي محكوم.ida_close_session ينهي بيئة تشغيل IDA الحية وهو مدمر من وجهة نظر الجلسة.ida_python ينفذ Python عشوائيًا في عملية IDA النشطة. يتم حظره في الوضع الآمن ويتطلب إقرار مخاطر صريحًا بموجب السياسة العادية.ida_emulate مفيد للفحوصات المتحكم بها، لكن إجراءات المحاكي المعدلة تتطلب الإقرار المقابل.ida_til_export و ida_til_import يصلان إلى نظام الملفات وهما محكومان. مسارات نظام الملفات مقيدة بجذر الذاكرة المكوّن حيث ينطبق هذا الحارس.لا تستخدم --disable-policy كعلامة راحة. إنها تعيّن IDA_MCP_POLICY_MODE=off وتعطل جميع بوابات السياسة، بما في ذلك إقرارات الكتابة وضوابط سير العمل الأخرى. إذا تم رفض استدعاء، اقرأ إدخال ida_help للعملية وقدّم الوسيطة المؤكدة الدقيقة فقط عندما يدعم مخطط تلك العملية ذلك.
بينما لا يزال IDA يقوم بالتحليل الأولي، يحظر الوضع الآمن بعض عمليات تحليل الملف الثنائي الكامل والفهرسة والعمليات النصية. يهدف إلى إبقاء استدعاءات الجلسة المبكرة ضيقة؛ استقصِ ida_session_status أو ida_session_health بدلاً من تجاوز الحارس.
يستمع الجسر على loopback ويستخدم رمزًا مميزًا لكل جلسة. إنه ليس خدمة شبكة: لا تعرض أو تمرر منفذ الجسر إلى شبكة غير موثوقة. تعامل مع النصوص المستوردة والتتبعات والملفات الثنائية وبيانات المجموعة وطلبات العميل كمدخلات غير موثوقة.
المسار العادي من المضيف إلى IDA محلي. لا يشغّل المشروع خدمة LLM مدمجة في مسار التحليل، والتضمين المحلي اختياري. هذا لا يجعل سير العمل بأكمله غير متصل تلقائيًا:
llama-server الاختيارية، وتنزيلات مجموعة التهديدات الاختيارية، وتكاملات Rizin/radare2 الخارجية يمكن أن تجري طلبات شبكة عند التمكين.لإعداد محلي فقط، استخدم بيئة التشغيل المحلية الافتراضية، واترك Gemini والتنزيلات الاختيارية الأخرى معطلة، وكوّن عميل MCP ونموذجه وفقًا لسياسة بيانات مؤسستك. "محلي فقط" لا يزال يتطلب التحقق مما يرسله العميل إلى مزود نموذجه الخاص.
مرّر دليل التثبيت صراحةً:
python3 install.py --ida-dir /path/to/ida-pro-9.3
يمكنك أيضًا تعيين IDADIR أو IDA_DIR. إذا تم العثور على عدة تثبيتات، استخدم --ida-version 9.3 أو --no-ida-prompt للتحكم في الاختيار. تأكد من أن الدليل المحدد يحتوي على idat أو idat64 قابل للتشغيل.
أعد تشغيل العميل وافحص إدخال تكوينه. تأكد من أن أمره يستخدم Python الخاص بـ venv المُدار و -u -m ida_pro_mcp.host.server، وأن كتلة env تحتوي على IDADIR الصحيح. راجع install-report.json؛ يسجل المثبّت إخفاقات تحديث العميل ويحتفظ بالنسخ الاحتياطية بجوار الملفات المعدلة. تختلف أشكال تكوين OpenCode وعائلة Copilot عن مثال JSON الشائع.
استدعاء ida_open_binary العادي ينتظر التحليل الأولي. تحقق من ida_session_status و ida_session_health، وامنح وقتًا أطول لملف ثنائي كبير، وافحص سجلات كل جلسة تحت دليل التثبيت/البيانات. عملية الفتح في الخلفية متاحة، لكنها مخصصة للحالات التي تفهم فيها سلوكها غير المتزامن وقيود الوضع الآمن.
هذا عادةً هو عمل السياسة كما تم تكوينها. استخدم ida_help لفحص المخطط الدقيق للعملية ومتطلبات الإقرار الخاصة بها. لا تضف وسائط عشوائية: المخططات صارمة. راجع IDA_MCP_POLICY_MODE وملف سياسة المشغل قبل تغيير السياسة. تعطيل جميع بوابات السياسة خيار منفصل وغير آمن عن قصد.
البحث الدلالي اختياري ويتطلب فهرسًا وواجهة خلفية تضمين متوافقة. لا يتطلبه السرد العادي والبحث والتفكيك والمراجع المتبادلة. لإعداد المسار المحلي الاختياري، استخدم خيارات المُضمّن الصريحة للمثبّت، على سبيل المثال:
python3 install.py --setup-embedder
يمكن للمثبّت أيضًا تشغيل --embedder-doctor، أو استخدام مسار نموذج صريح، أو تنزيل نموذج محدد و llama-server عند الطلب. تراخيص النماذج واستخدام القرص وتنزيلات الشبكة هي مسؤوليتك. إذا كان النموذج مفقودًا، يجب أن يبلغ الخادم عن البحث الدلالي كغير متاح بدلاً من التظاهر بأنه تم تشغيله.
أصلح صيغة JSON أو JSONC أو TOML المُبلغ عنها وأعد تشغيل المثبّت. كما يرفض مسارات التكوين المرتبطة رمزيًا وغير العادية لتجنب الكتابة فوق هدف غير متوقع. يتم نسخ الملفات العادية الموجودة احتياطيًا؛ يمكن لسلوك التراجع الافتراضي للمثبّت استعادة تلك النسخ الاحتياطية إذا فشلت مرحلة لاحقة.
تحقق من ida_session_health وسجل الجلسة وسجل الجسر. تأكد من أن العميل يستخدم نفس جذر التثبيت و IDADIR الذي سجله المثبّت. الواجهة الخلفية الافتراضية idat تمنح كل جلسة عمليتها الخاصة؛ لا تنتقل إلى idalib التجريبية أثناء تشخيص تثبيت أساسي.
tools/list و ida_help يعرضان كل عملية عامة ومخططها ومثالها.للحصول على أسماء العمليات الدقيقة، استخدم المرجع المولد أو اسأل الخادم قيد التشغيل باستخدام ida_help. تبقى الواجهة الخلفية الأقدم tool(action=...) متاحة للتوافق ويتم اختيارها بـ IDA_MCP_TOOL_SURFACE=legacy؛ يجب أن تستخدم التكاملات الجديدة سطح ida_* بالمخططات الدقيقة.
write_finding, mark_examined, list_findings, search_findings, update_finding, export_findings, publish_findings, import_annotations, analysis_brief, next_target |
| التعديل | create_function, change_function, rename, comment, patch_bytes, save_idb, make_code, undefine, rename_local, declare_type, apply_type, add_segment, set_segment_attrs, apply_sig, sreg_set, create_data, create_strlit, undo_begin, undo_end, add_entry, idb_snapshot, idb_restore_snapshot, struct_member_add, struct_member_del, struct_member_rename, struct_member_set_type, enum_member_add, enum_member_rename, enum_member_revalue, til_delete, til_export, til_import, mark_dangerous |
| الحساب | calc_eval, calc_offset, calc_convert, calc_resolve, calc_deref, calc_chain, calc_align, calc_bitops |
| الدعم | python, continue, help |
| سير العمل | batch |