
ghidra-mcp v6.0.0
خادم MCP يربط بين الهندسة العكسية لـ Ghidra وأدوات الذكاء الاصطناعي: 256 أداة لفك التجميع، ومحاكاة P-code، والتصحيح المباشر، وتحليل تدفق البيانات، والعمليات الدفعية، وفرض الاتفاقيات عبر الوضع بدون واجهة رسومية ووضع واجهة المستخدم الرسومية.
خادم Ghidra MCP
إذا وجدت هذا مفيدًا، يُرجى ⭐ وضع نجمة على المستودع — فهذا يساعد الآخرين في اكتشافه!
إذا كان Ghidra MCP يوفر لك الوقت، فكِّر في دعم المشروع. كل من الدعم لمرة واحدة والدعم المتكرر يساعدان في تمويل تحديثات التوافق، وتقوية بيئة الإنتاج، والوثائق، والأدوات الجديدة.
خادم Model Context Protocol (MCP) جاهز للإنتاج يربط قدرات Ghidra القوية في الهندسة العكسية بأدوات الذكاء الاصطناعي الحديثة وأطر الأتمتة. 271 أداة MCP، وسير عمل ذكي مختبر في المعارك، وأشمل تكامل Ghidra-MCP متاح — يشمل الآن محاكاة P-code، وتكامل المٌصحح الحي، وتحليل تدفق البيانات عبر PCode-graph.
لماذا Ghidra MCP؟
معظم تطبيقات Ghidra MCP تمنحك حفنة من الأدوات للقراءة فقط وتعتبر المهمة منتهية. هذا المشروع مختلف — فقد بُني بواسطة مهندس عكسي يستخدمه يوميًا على ملفات ثنائية حقيقية، وليس كعرض تجريبي.
- 271 أداة MCP — أكثر بـ 3 مرات من أي تطبيق منافس. ليست عمليات قراءة فقط — بل وصول كامل للكتابة لإعادة التسمية، والتصنيف، والتعليق، وإنشاء الهياكل، وتنفيذ السكريبتات، ومحاكاة P-code، والتصحيح الحي.
- سير عمل ذكي مختبر في المعارك — سير عمل توثيق مثبت (الإصدار V5) تم تحسينه عبر مئات الدوال. يتضمن تعليمات خطوة بخطوة، ومرجع تسمية هنغارية، وأدلة معالجة دفعية، واكتشاف الكود اليتيم.
- موثوقية من الدرجة الإنتاجية — معاملات ذرية، وعمليات دفعية (تقليل استدعاءات API بنسبة 93%)، ومهل زمنية قابلة للتكوين، ومعالجة أخطاء لطيفة. لا توجد إخفاقات صامتة.
- نقل توثيق عبر الثنائيات — مطابقة هاش SHA-256 للدوال تنشر التوثيق عبر نسخ الثنائيات تلقائيًا. وثِّق مرة واحدة، طبق في كل مكان.
- تكامل كامل مع خادم Ghidra — الاتصال بخوادم Ghidra المشتركة، وإدارة المستودعات، والتحكم بالنسخ، وسير عمل السحب/الدفع، والتعاون متعدد المستخدمين.
- وضعي الرأس وواجهة المستخدم الرسومية — تشغيل مع أو بدون واجهة Ghidra الرسومية. جاهز لـ Docker لخطوط أنابيب CI/CD والتحليل الآلي على نطاق واسع.
- مصمم برأي محدد — الإصدار v5.0 ينقل اصطلاحات التسمية، وسلامة الأنواع، ومعايير التوثيق إلى طبقة الأدوات. وكلاء الذكاء الاصطناعي والمهندسون البشريون ينتجون مخرجات متسقة دون أدلة أسلوب في كل تعليمة.
فرض الاصطلاحات
لقد مررت بهذا: بعد ستة أشهر من المشروع تجد ProcessItem و process_items و handleItem و ItemProc في نفس قاعدة الكود — أربع دوال تفعل نفس الشيء، مسماة بأربع جلسات أو مهندسين مختلفين دون عقد مشترك. إصلاحها يستغرق وقتًا أطول مما ينبغي، وستتكرر المشكلة.
الإصدار v5.0 ينقل الاصطلاحات من "أشياء يجب تذكرها" إلى طبقة الأدوات، حيث يمكن فرضها فعليًا.
| المستوى | السلوك | مثال |
|---|---|---|
| تصحيح تلقائي | يُطبق بصمت | حقل count من نوع uint32 → يُضاف تلقائيًا البادئة dwCount عند الحفظ |
| تحذير | التغيير يُنفذ، ويُعاد تحذير | processData → "يجب أن يكون الاسم بـ PascalCase مع فعل: ProcessData" |
| رفض | يُمنع التغيير مع شرح | تغيير النوع undefined → undefined → "رفض بدون عملية، النوع لم يتغير" |
بالنسبة لوكلاء الذكاء الاصطناعي، يعني هذا مخرجات متسقة عبر كل جلسة، كل نموذج، كل تشغيل — دون لصق دليل أسلوب في كل تعليمة. الأداة تعرف القواعد؛ النموذج يحتاج فقط إلى اتخاذ القرار.
بالنسبة للفرق، يلغي هذا الفئة الكاملة من تعليقات المراجعة التي تقول "هذا ليس اصطلاح التسمية لدينا". يظل تحكيم الاصطلاحات في الأداة، وليس في مراجعة الكود.
بالنسبة للعمل الفردي على نطاق واسع، يمنحك analyze_function_completeness درجة 0–100% تقيس بصدق: الاستقطاعات الهيكلية (القمامات المترجمة غير القابلة للإصلاح) تُغتفر في درجتك الفعالة، والتدرج اللوغاريتمي يمنع فئة سيئة واحدة من دفن كل شيء آخر، وجودة تعليق الشريحة المتدرجة تعني أنك تعرف بالضبط ما هو مفقود ولماذا.
🌟 الميزات
تكامل MCP الأساسي
- توافق كامل مع MCP — تنفيذ كامل لبروتوكول سياق النموذج
- 271 أداة MCP — سطح API شامل يغطي كل جانب من جوانب تحليل الثنائيات
- موثوقية من الدرجة الإنتاجية — معاملات ذرية، وعمليات دفعية، ومهل زمنية قابلة للتكوين
- تحليل فوري — تكامل حي مع محرك تحليل Ghidra
ملاحظة التوافق: يتم تطبيع أسماء أدوات MCP لـ GitHub Copilot CLI والتحقق من CAPI. تستخدم أسماء الأدوات المعروضة أحرفًا صغيرة وأرقامًا وشرطات سفلية وواصلات فقط؛ يتم الإعلان عن المسارات HTTP المتداخلة مثل
/debugger/statusبأسماء مثلdebugger_status_2عند الحاجة لتجنب التصادم مع أدوات الجسر الثابتة.
قدرات تحليل الثنائيات
- تحليل الدوال — إعادة التجميع، رسوم بيانية للاستدعاءات، مراجع متقاطعة، تسجيل الاكتمال
- تحليل تدفق البيانات — نشر قيمة PCode-graph (أمامي/خلفي) من أي متغير أو سجل
- اكتشاف هياكل البيانات — إنشاء struct/union/enum مع تحليل الحقول واقتراحات التسمية
- استخراج السلاسل النصية — بحث بالتعبير المنتظم، تصفية الجودة، اكتشاف الدوال المرتكزة على السلاسل
- تحليل الاستيراد/التصدير — جداول الرموز، المواقع الخارجية، حل الاستيراد الترتيبي
- فحص الذاكرة والبيانات — قراءات الذاكرة الخام، بحث نمط البايت، اكتشاف حدود المصفوفات
- توثيق عبر الثنائيات — مطابقة هاش الدوال ونشر التوثيق عبر الإصدارات
التحليل الديناميكي (الإصدار v5.4.0)
- محاكاة P-code — تشغيل أي دالة بمعزل عبر
EmulatorHelperالخاص بـ Ghidra؛ حل هاش API بالقوة الغاشمة في ميلي ثانية - تكامل المٌصحح الحي — 17 نقطة نهاية Java + 22 أداة جسر Python عبر إطار TraceRmi الخاص بـ Ghidra (dbgeng على Windows PE، gdb/lldb بخلاف ذلك): الإرفاق، الخطوة، نقاط التوقف، السجلات، قراءات الذاكرة، تتبع الدوال غير المقطعي، ترجمة العناوين الثابتة↔الديناميكية الواعية بـ ASLR
سير عمل الهندسة العكسية المدعوم بالذكاء الاصطناعي
- سير عمل توثيق الدوال V5 — عملية من 7 خطوات لتوثيق كامل للدوال مع التسمية الهنغارية، وتدقيق الأنواع، وتسجيل التحقق الآلي
- التوثيق الدفعي — إرسال وكيل فرعي متوازي لتوثيق دوال متعددة في وقت واحد
- اكتشاف الكود اليتيم — ماسح آلي يجد دوال غير مكتشفة في الفجوات بين الكود المعروف
- التحقيق في أنواع البيانات — سير عمل منهجي لاكتشاف الهياكل وتحليل الحقول
- المطابقة عبر الإصدارات — مطابقة الدوال بالهاش عبر إصدارات ثنائيات مختلفة
التطوير والأتمتة
- إدارة سكريبتات Ghidra — إنشاء، تشغيل، تحديث، وحذف سكريبتات Ghidra بالكامل عبر MCP
- دعم البرامج المتعددة — التبديل بين برامج مفتوحة متعددة ومقارنتها
- العمليات الدفعية — إعادة تسمية، تعليق، تصنيف، وإدارة تسميات ضخمة (استدعاءات API أقل بنسبة 93%)
- خادم بدون رأس — تحليل كامل بدون واجهة Ghidra الرسومية — جاهز لـ Docker و CI/CD
- المشروع والتحكم بالنسخ — إنشاء مشاريع، إدارة ملفات، تكامل خادم Ghidra
- التحكم في التحليل — سرد، تكوين، وتشغيل محللات Ghidra برمجيًا
🚀 بداية سريعة
المتطلبات الأساسية
- Java 21 LTS (يوصى بـ OpenJDK)
- Apache Maven 3.9+
- Ghidra 12.1.2 (أو إصدار متوافق)
- Python 3.10+ مع uv (موصى به) أو pip + venv
مستخدمو خادم Ghidra المشترك: عملاء Ghidra 12.1.2 يحتاجون إلى خادم Ghidra إصدار 12.1 أو 12.0.5 أو إصدار أحدث متوافق. قم بترقية الخادم قبل استخدام هذه الإضافة من عميل 12.1.
Ghidra 12.1.2 يأتي مع Jython كإضافة اختيارية. تعمل سكريبتات Java افتراضيًا، لكن سكريبتات
.pyفيghidra_scripts/تتطلب تثبيت إضافة Jython من File > Install Extensions وإعادة تشغيل Ghidra.
التثبيت
موصى به لجميع المنصات: استخدم
python -m tools.setupمباشرة.
ensure-prereqsيثبت متطلبات Python وقت التشغيل بالإضافة إلى ملفات JAR الخاصة بـ Ghidra اللازمة في مستودع Maven المحلي.deployينسخ مخرجات البناء، ويُثبّت الإضافة في ملف تعريف المستخدم، ويُصحّح تكوين مستخدم Ghidra.
- استنساخ المستودع: ```bash
git clone https://github.com/bethington/ghidra-mcp.git
cd ghidra-mcp
- موصى به: تشغيل فحص البيئة المسبق أولاً: ```text
python -m tools.setup preflight --ghidra-path "F:\ghidra_12.1.2_PUBLIC"
- بناء ونشر إلى Ghidra: ```text
python -m tools.setup ensure-prereqs --ghidra-path "F:\ghidra_12.1.2_PUBLIC"
python -m tools.setup build
python -m tools.setup deploy --ghidra-path "F:\ghidra_12.1.2_PUBLIC"
deploy يحفظ/يغلق مثيل Ghidra المطابق الذي يعمل بالفعل عند الحاجة
، ويقوم بتثبيت الامتداد، ويبدأ Ghidra، وينتظر صحة MCP، ويقوم
بفحوصات دخان المخطط.
- الوضع الإجباري/اليدوي الاختياري (متقدم): ```text
Skip automatic prerequisite setup
python -m tools.setup build python -m tools.setup deploy --ghidra-path "F:\ghidra_12.1.2_PUBLIC" - إظهار تعليمات الأمر: ```text
python -m tools.setup --help
- وضع البناء الاختياري فقط (متقدم/استكشاف الأخطاء وإصلاحها): ```text
python -m tools.setup build
مسار البناء المدعوم: python -m tools.setup build يستخدم Maven داخليًا وهو سير العمل الأساسي المستخدم في مهام المستودع والمستندات. ```bash
Manual Maven build (requires Ghidra deps already installed in local .m2)
mvn clean package assembly:single -DskipTests
المدخلات: ```bash
# Secondary/manual Gradle build path only (not used by tools.setup or VS Code tasks)
GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension
التثبيت (لينكس — أوبونتو/ديبيان)
- استنساخ المستودع: ```bash
git clone https://github.com/bethington/ghidra-mcp.git
cd ghidra-mcp
- تثبيت المتطلبات الأساسية للنظام (إذا لم تكن مثبتة بالفعل): ```bash
sudo apt update && sudo apt install -y openjdk-21-jdk maven python3 python3-pip python3-venv curl jq unzip
ملاحظة دبيان/كالي/أوبونتو 23.04+ (PEP 668): هذه التوزيعات تميّز بايثون النظام بأنها مدارة خارجيًا، لذا فإن
pip installالمجردة تفشل معerror: externally-managed-environment. لا تتجاوزها باستخدام--break-system-packages— فقد يفسد الأدوات المدارة بواسطة apt. بدلاً من ذلك استخدم uv (موصى به — يقوم بإنشاء وإدارة.venvمحلي للمشروع تلقائيًا، وهو ما تستخدمه أوامر هذا المستودع):curl -LsSf https://astral.sh/uv/install.sh | sh uv run bridge-mcp-ghidra # يحل التبعيات داخل .venv ويبدأ الجسرأو بيئة افتراضية تقليدية:
python3 -m venv .venv && source .venv/bin/activate pip install -e . bridge-mcp-ghidra
- تشغيل فحص البيئة المبدئي: ```bash
python -m tools.setup preflight --ghidra-path ~/ghidra_12.1.2_PUBLIC
- بناء ونشر إلى Ghidra (أمر واحد): ```bash
python -m tools.setup ensure-prereqs --ghidra-path ~/ghidra_12.1.2_PUBLIC
python -m tools.setup build
python -m tools.setup deploy --ghidra-path ~/ghidra_12.1.2_PUBLIC
سيقوم هذا بما يلي:
- تثبيت تبعيات JAR الخاصة بـ Ghidra في مستودع
~/.m2/repositoryالمحلي - بناء
GhidraMCP-<version>.zipباستخدام Maven - استخراج الإضافة إلى
~/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/ - تحديث
preferencesبـLastExtensionImportDirectory - تثبيت متطلبات Python
- اختياري: إعداد تبعيات Maven فقط: ```bash
python -m tools.setup install-ghidra-deps --ghidra-path ~/ghidra_12.1.2_PUBLIC
- عرض تعليمات الأمر: ```bash
python -m tools.setup --help
مسارات Linux: تم تثبيت الامتداد في
$HOME/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/GhidraMCP/. ملفات تكوين Ghidra موجودة في$HOME/.config/ghidra/ghidra_<version>_PUBLIC/.
تثبيت (macOS — Homebrew)
- تثبيت المتطلبات الأساسية: ```bash
brew install openjdk@21 maven python ghidra
- استنساخ المستودع: ```bash
git clone https://github.com/bethington/ghidra-mcp.git
cd ghidra-mcp
- تثبيت Ghidra JARs في Maven المحلي: ```bash
python -m tools.setup install-ghidra-deps
--ghidra-path /opt/homebrew/opt/ghidra/libexec - البناء والنشر: ```bash
python -m tools.setup ensure-prereqs
--ghidra-path /opt/homebrew/opt/ghidra/libexec python -m tools.setup build python -m tools.setup deploy
--ghidra-path /opt/homebrew/opt/ghidra/libexec
تم تثبيت الامتداد إلى ~/Library/ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/.
ملاحظة:
--ghidra-versionمطلوب عند استخدام مسار Homebrew لأن المسار لا يحتوي على سلسلة إصدار.
- تشغيل Ghidra وتمكين الإضافة: ```bash
/opt/homebrew/opt/ghidra/libexec/ghidraRun
في نافذة المشروع الرئيسية: Tools > GhidraMCP > Start MCP Server
- تكوين Cursor/Claude MCP (
~/.cursor/mcp.json): ```json { "mcpServers": { "ghidra": { "command": "uv", "args": ["run", "--directory", "/path/to/ghidra-mcp", "bridge-mcp-ghidra"] } } }
التثبيت (Arch Linux — AUR)
@Pandoriaantje يحافظ على حزم AUR المجتمعية:
ghidra-mcp-git— يتتبعmainghidra-mcp— يتتبع الإصدارات الموسومة
قم بالتثبيت باستخدام مساعد AUR الذي تختاره، على سبيل المثال:```bash yay -S ghidra-mcp # or ghidra-mcp-git
### الاستخدام الأساسي
#### الخيار 1: نقل Stdio (موصى به لأدوات الذكاء الاصطناعي)```bash
uv run bridge-mcp-ghidra # or: python -m bridge_mcp_ghidra
لإضافة الجسر إلى Autohand Code من نسخة مستنسخة محلية:```bash autohand mcp add ghidra uv run --directory /path/to/ghidra-mcp bridge-mcp-ghidra
أضف `--scope project` قبل `ghidra` لحفظ الخادم في تكوين `.autohand` للمشروع الحالي بدلاً من تكوين المستخدم الخاص بك.
#### الخيار 2: نقل HTTP القابل للتدفق (موصى به لعملاء الويب/HTTP)```bash
uv run bridge-mcp-ghidra --transport streamable-http --mcp-host 127.0.0.1 --mcp-port 8081
إعدادات عميل MCP لنقل HTTP (أضف إلى ملف إعدادات MCP الخاص بعميلك):```json { "mcpServers": { "ghidra-mcp-http": { "url": "http://127.0.0.1:8081/mcp" } } }
العملاء المستندة إلى المتصفح (مثل [MCP Inspector](https://github.com/modelcontextprotocol/inspector))
تعمل بشكل مباشر: حيث تجيب وسائل النقل HTTP على طلبات CORS الأولية (`OPTIONS`) وتكشف
عن الترويسات `mcp-session-id` / `mcp-protocol-version` للنصوص البرمجية. تعكس الأصول المسموح بها
سياسة ترويسة المضيف — يُسمح دائمًا بالحلقة المحلية على أي منفذ، بالإضافة إلى مضيف الربط وأي
مضيفين مدرجين في `GHIDRA_MCP_ALLOWED_HOSTS`.
#### الخيار 3: نقل SSE (مهمل — استخدم streamable-http بدلاً من ذلك)```bash
uv run bridge-mcp-ghidra --transport sse --mcp-host 127.0.0.1 --mcp-port 8081
إشارات الجسر المتقدمة
| العلم | الافتراضي | الوصف |
|---|---|---|
--transport | stdio | stdio (أدوات الذكاء الاصطناعي)، streamable-http (عملاء الويب)، sse (مهمل) |
--mcp-host | 127.0.0.1 | مضيف الربط لبروتوكولات HTTP |
--mcp-port | — | منفذ لبروتوكولات HTTP |
--lazy | إيقاف | تحميل مجموعات الأدوات الافتراضية فقط عند الاتصال. بدء أسرع، لكن عملاء MCP الذين لا يدعمون tools/list_changed سيرون قائمة أدوات غير مكتملة. غير موصى به لـ Claude Code. |
--no-lazy | (افتراضي) | تحميل جميع مجموعات الأدوات فورًا عند الاتصال. مطلوب لمعظم عملاء الذكاء الاصطناعي. |
--default-groups | listing,function,program | المجموعات المفصولة بفواصل والمحمّلة عند الاتصال عند ضبط --lazy. |
توجيه البرنامج الصارم (أمان متعدد البرامج)
عيّن GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1 لجعل الجسر يرفض أي استدعاء محدد النطاق
لبرنامج يحذف محدد برنامج، مع إعادة خطأ واضح بدلاً من السماح للاستدعاء
باستخدام "البرنامج الحالي" المشترك للخادم (البرنامج الذي يحركه switch_program وعلامة تبويب واجهة المستخدم النشطة).```bash
export GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1
uv run bridge-mcp-ghidra
بدون هذا، فإن استدعاءً يحذف `program=` يعمل ضد البرنامج الحالي، وهو أمر جيد لسير عمل برنامج واحد ولكنه خطر بمجرد فتح عدة برامج: يمكن للاستدعاء قراءة أو تعديل الثنائي الخاطئ دون أي خطأ. ويزداد الخطر سوءًا عندما يشارك أكثر من عميل خادمًا واحدًا، لأن كل واحد منهم ينقل المتغير العام للبرنامج الحالي من تحت الآخرين.
مع تفعيل الوضع الصارم، يجب على كل استدعاء ضمن نطاق البرنامج تسمية هدفه. يغطي هذا كل محدد يختار برنامجًا مفتوحًا: `program=` العادي وأدوات البرامج المتقاطعة `source_program`/`target_program` أو `program_a`/`program_b` (مُعلنة كإلزامية، لكن الخادم لا يزال يتراجع إلى البرنامج الحالي عندما يصل أحدها فارغًا). يظهر المحدد المنسي كخطأ صاخب عند أول استدعاء خاطئ بدلاً من كتابة صامتة إلى الثنائي الخاطئ. الأدوات التي لا تحتوي على محدد برنامج (`open_program` و `close_program` تأخذان `path`/`name`) لا تتأثر. معطل بشكل افتراضي: مع عدم تعيين المتغير، يرسل الجسر الاستدعاءات دون تغيير.
#### تقليل الحمل الزائد لسياق الأداة
يُظهر الجسر فهرسًا كبيرًا. للحفاظ على سطح أداة النموذج صغيرًا، قم بتشغيله مع `--lazy` (يقوم بتحميل `listing,function,program` فقط عند الاتصال) واترك النموذج **يكتشف** الباقي حسب الطلب بدلاً من تسجيل كل شيء:
- `search_tools("rename function")` — بحث بالكلمات المفتاحية في **الفهرس بأكمله**، بما في ذلك الأدوات التي مجموعتها غير محملة. كل نتيجة تخبر ما إذا كان يمكن استدعاؤها الآن، وإذا لم يكن الأمر كذلك، الاستدعاء الدقيق `load_tool_group(...)` لتمكينها.
- `list_tool_groups()` — سرد جميع الفئات وحالة تحميلها.
- `load_tool_group("datatype")` / `unload_tool_group("datatype")` — تحميل أو إسقاط فئة في وقت التشغيل.
- `check_tools("rename_or_label,batch_set_comments")` — تأكيد أن أدوات محددة قابلة للاستدعاء الآن.
يعمل `search_tools` في كلا الوضعين eager و `--lazy`، لذا فإن الوكلاء الذين يحترمون `tools/list_changed` يحصلون على اكتشاف كامل دون تكلفة السياق المسبقة.
#### اختياري: بدء تشغيل خادم المصحح المستقل```bash
uv sync --group debugger
uv run python -m debugger
يستمع خادم التصحيح على http://127.0.0.1:8099/ افتراضيًا وهو مطلوب لأدوات الوكيل debugger_* التي يعرضها جسر MCP.
علامات خادم التصحيح:
| العلامة | الافتراضي | الوصف |
|---|---|---|
--port | 8099 | منفذ خادم HTTP |
--host | 127.0.0.1 | عنوان الربط (0.0.0.0 للتعريض على الشبكة المحلية) |
--exports-dir | — | مسار إلى دليل dll_exports/ لتحويل الأرقام الترتيبية إلى أسماء |
--log-level | INFO | DEBUG, INFO, WARNING, أو ERROR |
عيّن GHIDRA_DEBUGGER_URL في ملف .env إذا قمت بتغيير المنفذ أو المضيف الافتراضي حتى يتمكن الجسر من العثور عليه.
في Ghidra
- شغّل Ghidra وافتح نافذة CodeBrowser
- في CodeBrowser، فعّل الإضافة عبر File > Configure > Configure All Plugins > GhidraMCP
- اختياري: تكوين منفذ مخصص عبر CodeBrowser > Edit > Tool Options > GhidraMCP HTTP Server
- شغّل الخادم عبر Tools > GhidraMCP > Start MCP Server
- يعمل الخادم على
http://127.0.0.1:8089/افتراضيًا
تحقق من عمله```bash
Quick health check
curl http://127.0.0.1:8089/check_connection
Expected: "Connected: GhidraMCP plugin running with program ''"
Get version info
curl http://127.0.0.1:8089/get_version
## دعم هذا المشروع
إذا وفرت لك أداة Ghidra MCP وقتًا في الهندسة أو الهندسة العكسية، ففكر في [رعاية المشروع](https://github.com/sponsors/bethington).
- يساعد التبرع لمرة واحدة في تمويل الإصلاحات وتحديثات التوافق وأعمال الإصدار.
- يساعد التبرع المتكرر في استمرار الصيانة والتوثيق وتقوية الإنتاج.
- يساعد دعم الشركات في تحديد أولويات الموثوقية طويلة الأجل للجسر والخادم غير المرئي (headless) وتكامل المصحح وأدوات سير العمل.
## 🔒 الأمان
تم تصميم GhidraMCP للتطوير **على localhost فقط**. التكوين الافتراضي — خادم HTTP مرتبط بـ `127.0.0.1`، بدون مصادقة — آمن على محطة عمل موثوقة لمستخدم واحد ويتوافق مع سلوك ما قبل الإصدار v5.4.1.
**إذا قمت بتعريض الخادم خارج loopback، فقم بتكوين هذه المتغيرات البيئية الثلاثة أولاً.** يرفض الخادم البدء على ربط غير loopback بدون رمز مميز.
| متغير بيئي | التأثير |
|---|---|
| `GHIDRA_MCP_AUTH_TOKEN` | عند التعيين، يجب أن يحمل كل طلب HTTP `Authorization: Bearer <token>`. مقارنة آمنة زمنيًا. `/mcp/health` و `/health` و `/check_connection` معفاة. |
| `GHIDRA_MCP_ALLOW_SCRIPTS` | اضبط على `1` أو `true` أو `yes` لتمكين `/run_script_inline` و `/run_ghidra_script`. **معطل افتراضيًا اعتبارًا من v5.4.1** — تنفذ هذه النقاط الطرفية (endpoints) Java عشوائية ضد عملية Ghidra. في الوضع غير المرئي (headless) يؤدي هذا أيضًا إلى تشغيل تهيئة OSGi `BundleHost` عند بدء تشغيل الخادم (إطار Felix، ~مئات من ms); اتركه معطلاً إذا لم تكن بحاجة إلى تنفيذ البرامج النصية. |
| `GHIDRA_MCP_FILE_ROOT` | عند التعيين على مسار دليل، تقوم نقاط النهاية الخاصة بمسارات نظام الملفات (`/load_program` و `/import_file` و `/open_project` و `/delete_file` وما إلى ذلك) بتوحيد المدخلات (canonicalize) وتتطلب أن تكون ضمن هذا الجذر. يمنع traversal المسار. |
فرض جودة التسمية منفصل عن الأمان. افتراضيًا، ترفض `rename_function_by_address` ونقاط النهاية العالمية للكتابة الأسماء التي تفشل في اختبارات الجودة المدمجة، وتطبق كتابات حقول الهيكل (struct) اتفاقية البادئة المدمجة للحقول. قم بتعطيل طبقة الاتفاقية المدمجة من خلال **Edit > Tool Options > GhidraMCP HTTP Server > Strict Naming Enforcement**. تغطي نفس خانة الاختيار في خيارات الأداة `rename_data` و `rename_global_variable` و `set_global` و بادئة/حماية النوع لـ `apply_data_type`، والإصلاحات التلقائية للبادئة الهنغارية لحقول الهيكل في `create_struct` و `add_struct_field` و `modify_struct_field`. تتم قراءة الإعداد عند بدء تشغيل خادم MCP أو إعادة تشغيله. لا تزال تحذيرات اتفاقية التسمية للدوال/العالمية تُعاد عند تعطيل الفرض.
### مثال: التعريض لشبكة LAN خاصة مع المصادقة```bash
export GHIDRA_MCP_AUTH_TOKEN=$(openssl rand -hex 32)
export GHIDRA_MCP_ALLOW_SCRIPTS=1 # only if your workflow needs it
export GHIDRA_MCP_FILE_ROOT=/srv/ghidra/inputs
java -jar GhidraMCPHeadless.jar --bind 0.0.0.0 --port 8089
مصادقة خادم Ghidra
عند الاتصال بخادم Ghidra مشترك، يمكن لـ GhidraMCP إخفاء مربع حوار كلمة المرور تلقائيًا. يحل بيانات الاعتماد بهذا الترتيب (أول قيمة غير فارغة تفوز):
ملاحظة التوافق: يتطلب عملاء Ghidra 12.1.2 خادم Ghidra 12.1.2 أو 12.0.5 أو خادمًا أحدث متوافقًا. الخوادم المشتركة القديمة ليست أهدافًا آمنة لترقية عميل 12.1.
- متغير البيئة
GHIDRA_SERVER_PASSWORD(أو ملف.envفي دليل تثبيت Ghidra أو~) - ملف
~/.ghidra-cred— ملف كلمة مرور من سطر واحد في دليل المستخدم الرئيسي - ملف
<ghidra-install-dir>/.ghidra-cred
يتم حل اسم المستخدم بشكل مشابه: متغير البيئة GHIDRA_SERVER_USER ← خاصية النظام user.name.
إذا لم يتم العثور على كلمة مرور، يعرض Ghidra موجه واجهة المستخدم الرسومية العادي. قم بتعيين هذه في ملف .env (انظر .env.template للكتلة الكاملة) لتمكين المصادقة الصامتة.
الترحيل من الإصدار v5.4.0 → v5.4.1
- نقاط نهاية البرنامج النصي معطلة افتراضيًا الآن. إذا كنت تعتمد على
/run_script_inlineأو/run_ghidra_script، قم بتصديرGHIDRA_MCP_ALLOW_SCRIPTS=1. هذا تغيير متعمد مسبب للكسر؛ الإعداد الافتراضي السابق كان غير آمن. - عمليات النشر المحلية على المضيف المحلي لا تحتاج إلى تغييرات. المصادقة، رفض الربط، وفحوصات جذر المسار كلها اختيارية.
❓ استكشاف الأخطاء وإصلاحها
قائمة "GhidraMCP" لا تظهر في الأدوات
السبب: لم يتم تمكين الإضافة أو تثبيتها بشكل صحيح.
الحل:
- تحقق من تثبيت الإضافة: File > Install Extensions — يجب أن تظهر GhidraMCP
- قم بتمكين الإضافة: File > Configure > Configure All Plugins > GhidraMCP (حدد المربع)
- أعد تشغيل Ghidra بعد التثبيت/التمكين
الخادم لا يستجيب / رفض الاتصال
السبب: لم يتم بدء الخادم أو المنفذ خاطئ.
الحل:
- تأكد من بدء الخادم: Tools > GhidraMCP > Start MCP Server
- تحقق من المنفذ المهيأ: Edit > Tool Options > GhidraMCP HTTP Server
- تحقق مما إذا كان المنفذ قيد الاستخدام: ```bash
Linux/macOS
lsof -i :8089Windows
netstat -ano | findstr :8089 - ابحث عن الأخطاء في وحدة تحكم Ghidra: Window > Console
pip install fails with error: externally-managed-environment
السبب: PEP 668. توزيعات عائلة Debian (Debian 12+, Kali, Ubuntu 23.04+)
تحدد Python النظام كمدير خارجي، لذلك يتم حظر pip install العام
لحماية الحزم المدارة بواسطة apt.
الحل: استخدم بيئة افتراضية — لا تستخدم --break-system-packages أبدًا.
المسار الموصى به هو uv، والذي يدير
.venv محليًا للمشروع تلقائيًا:```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
cd ghidra-mcp
uv run bridge-mcp-ghidra
أو venv تقليدي:```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
bridge-mcp-ghidra
python -m debugger يفشل مع ModuleNotFoundError لـ pybag أو comtypes
السبب: يستخدم خادم التصحيح المستقل تبعيات Python اختيارية تعمل فقط على ويندوز، ولا يتم تثبيتها افتراضيًا.
الحل:```text uv sync --group debugger uv run python -m debugger
إذا كان لديك كل من Python العامة و venv للمشروع، فتأكد من التثبيت والتشغيل من نفس المفسر.
### 500 أخطاء الخادم الداخلي
**السبب:** استثناء من جانب الخادم، غالبًا بسبب فقدان بيانات البرنامج.
**الحل:**
1. تأكد من تحميل ملف ثنائي في CodeBrowser
2. قم بتشغيل التحليل التلقائي أولاً: **Analysis > Auto Analyze**
3. افحص وحدة تحكم Ghidra (**Window > Console**) بحثًا عن استثناءات Java
4. تتطلب بعض العمليات ملفات ثنائية محللة بالكامل
### 404 أخطاء غير موجودة
**السبب:** نقطة النهاية غير موجودة أو عنوان URL خاطئ.
**الحل:**
1. تحقق من وجود نقطة النهاية: `curl http://127.0.0.1:8089/get_version`
2. تحقق من وجود أخطاء إملائية في اسم نقطة النهاية
3. تأكد من استخدام طريقة HTTP الصحيحة (GET مقابل POST)
### فشل نصوص Ghidra Python مع "No script provider found"
**السبب:** في Ghidra 12.1.2، لم يعد دعم Jython ممكّنًا افتراضيًا. تحتاج نصوص `.py` إلى إضافة Jython المضمنة؛ ويجب أن تستخدم نصوص Python 3 PyGhidra بدلاً من Ghidra Script Manager.
**الحل:**
1. في الواجهة الأمامية لـ Ghidra، افتح **File > Install Extensions**.
2. حدد **Jython**، وأعد تشغيل Ghidra، ثم قم بتحديث مدير النصوص.
3. للأتمتة الجديدة، يُفضل نصوص Java Ghidra أو PyGhidra.
### الإضافة لا تظهر في Install Extensions
**السبب:** ملف JAR في موقع خاطئ.
**الحل:**
1. موقع التثبيت اليدوي: `~/.ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/lib/GhidraMCP.jar`
2. أو استخدم: **File > Install Extensions > Add** واختر ملف ZIP
3. تأكد من أن JAR/ZIP قد تم بناؤه لإصدار Ghidra الخاص بك
### فشل البناء مع "Ghidra dependencies not found"
**السبب:** لم يتم تثبيت ملفات JAR الخاصة بـ Ghidra في مستودع Maven المحلي.
**الحل:**```text
# Windows (recommended)
python -m tools.setup install-ghidra-deps --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
📊 أداء الإنتاج
- أدوات MCP: 271 أداة مطبقة بالكامل
- السرعة: استجابة دون الثانية لمعظم العمليات
- الكفاءة: تقليل بنسبة 93% في استدعاءات API عبر العمليات المجمعة
- الموثوقية: معاملات ذرية بدلالة الكل أو لا شيء
- سير عمل AI: مطالبات توثيق مثبتة تم تحسينها عبر مئات الوظائف الحقيقية
- النشر: نص برمجي آلي للنشر مع إدراك الإصدار
🛠️ مرجع API
271 أداة MCP مدعومة بنقاط نهاية HTTP، مجمعة حسب فئة الكتالوج. تم إنشاؤها من tests/endpoints.json بواسطة python -m tools.gen_readme_api_reference --write؛ المخطط الحي في /mcp/schema هو المرجعي في وقت التشغيل. أنماط الاستخدام: docs/prompts/TOOL_USAGE_GUIDE.md.
إدارة البرنامج والجلسة
analysis_status- الحصول على حالة التحليل التلقائي للبرامج المفتوحةclose_program- إغلاق برنامج مفتوح بواسطة مسار المشروع أو الاسمcreate_property_map- إنشاء خريطة خصائص مستخدم لتخزين القيم المقيدة بالنوع والمفهرسة حسب العنوانdelete_property_map- حذف خريطة خصائص مستخدم وجميع القيم التي تحتويهاexit_ghidra- حفظ وخروج من Ghidraget_address_spaces- سرد جميع مساحات العناوين الفعلية والتراكب في البرنامج (تتضمن التراكبات علامة is_overlay واسم overlayed_space)get_current_program_info- الحصول على معلومات البرنامج الحاليget_language_metadata- تفريغ وصف لغة البرنامج: مساحات العناوين، السجلات، الرموز الافتراضية، ترتيب البايتات، حجم المؤشر (الإصدار #192)get_program_options- قراءة جميع الخيارات في مجموعة خيارات برنامج مع الأنواع والقيم الحالية والافتراضية والأوصافget_property- قراءة القيمة المخزنة في عنوان داخل خريطة خصائصimport_file- استيراد ملف ثنائي من القرص إلى مشروع Ghidra الحالي وفتحهlist_open_programs- سرد البرامج المفتوحةlist_option_groups- سرد مجموعات خيارات البرنامج (مثلlist_project_files- سرد ملفات المشروعlist_properties- سرد الإدخالات (عنوان، قيمة) المخزنة في خريطة خصائص، مع ترقيم الصفحاتlist_property_maps- سرد خرائط الخصائص المعرفة من قبل المستخدم — مخازن قيمة ← مفتاح لكل عنوان مع نوعopen_program- فتح برنامج من المشروعreanalyze- تشغيل تحليل تلقائي كامل على برنامجremove_program_option- إزالة خيار من مجموعة خيارات برنامجremove_property- إزالة القيمة المخزنة في عنوان واحد داخل خريطة خصائصsave_all_programs- حفظ جميع البرامج المفتوحةsave_program- حفظ البرنامج الحاليset_image_base- تعيين العنوان الأساسي للبرنامج (يعيد تعيين جميع العناوين)set_program_option- تعيين خيار برنامج مقيد بالنوعset_property- تعيين قيمة في عنوان داخل خريطة خصائصswitch_program- تبديل البرنامج الحالي
تنظيم المشروع
create_folder- إنشاء مجلد في المشروعdelete_file- حذف ملف من المشروعdelete_project- حذف مشروع Ghidralist_projects- سرد مشاريع Ghidra المتاحةmove_file- نقل ملف إلى مجلد مشروع آخرmove_folder- نقل مجلد إلى موقع آخرproject_info- الحصول على معلومات مفصلة عن المشروع بما في ذلك الأدوات الجارية والبرامج المفتوحة
دورة حياة المشروع والبرنامج في وضع الرأس
متاحة على الخادم المستقل في وضع الرأس (GhidraMCPHeadlessServer).
archive_project- أرشفة المشروع المفتوح حاليًا إلى ملف .gar أصلي لـ Ghidracheckin_program- إعادة برنامج مفتوح إلى خادم Ghidra المشترك كإصدار جديدclose_project- إغلاق المشروع المفتوح حاليًاcreate_project- إنشاء مشروع Ghidra جديدexport_program- تصدير برنامج مفتوح أو مقيم في المشروع إلى ملف Ghidra Zip (.gzf)get_project_info- الحصول على معلومات حول المشروع المفتوح حاليًاimport_program- استيراد ملف Ghidra Zip (.gzf) إلى المشروع المفتوح حاليًا كملف DomainFile جديد تحت target_folder (الافتراضي '/')load_program- تحميل ملف ثنائي إلى الخادم في وضع الرأس للتحليلload_program_from_project- تحميل برنامج من مشروع Ghidra (وضع الرأس)open_project- فتح مشروع Ghidra موجود (.gpr file أو دليل)restore_project- استعادة أرشيف .gar لـ Ghidra إلى مشروع جديد على القرص فيparent_dir/project_nameserver_status- التحقق من حالة اتصال الخادم في وضع الرأس
القائمة والتعداد
list_bookmarks- سرد الإشارات المرجعيةlist_calling_conventions- سرد اصطلاحات الاستدعاء المتاحةlist_classes- سرد أسماء المساحات/الفئاتlist_data_items- سرد البيانات المعرفةlist_data_items_by_xrefs- سرد البيانات مرتبة حسب عدد المراجع المتقاطعةlist_exports- سرد الرموز المصدرةlist_external_locations- سرد المواقع الخارجيةlist_functions- سرد الوظائف مع العناوينlist_functions_enhanced- سرد الوظائف مع البيانات الوصفيةlist_globals- سرد المتغيرات العامةlist_imports- سرد الرموز المستوردةlist_methods- سرد جميع أسماء الوظائف مع ترقيم الصفحاتlist_namespaces- سرد جميع المساحاتlist_scripts- سرد نصوص Ghidra المتاحةlist_segments- سرد أجزاء الذاكرةlist_strings- سرد السلاسل المعرفة
السياق والبحث
get_current_address- الحصول على عنوان المؤشر (واجهة المستخدم الرسومية فقط)get_current_function- الحصول على الوظيفة عند المؤشر (واجهة المستخدم الرسومية فقط)get_current_selection- الحصول على نطاقات العناوين المميزة في قائمة CodeBrowser (واجهة المستخدم الرسومية فقط)get_entry_points- الحصول على نقاط الدخول للبرنامجget_enum_values- الحصول على قيم التعدادget_external_location- الحصول على تفاصيل الموقع الخارجيget_full_call_graph- الحصول على مخطط الاستدعاء الكاملget_function_by_address- الحصول على الوظيفة في عنوانget_function_call_graph- الحصول على مخطط الاستدعاءget_function_callees- الحصول على الوظائف التي يتم استدعاؤهاget_function_callers- الحصول على الوظائف التي تستدعيget_function_count- إرجاع عدد الوظائف في البرنامج المحملget_function_jump_targets- الحصول على أهداف القفزاتget_function_labels- الحصول على التسميات في الوظيفةget_function_variables- سرد جميع المتغيرات في وظيفةget_struct_layout- الحصول على تخطيط الهيكلget_valid_data_types- الحصول على أسماء أنواع البيانات الصالحة
البحث
find_similar_functions- العثور على وظائف مشابهةsearch_byte_patterns- البحث عن أنماط بايتsearch_data_types- البحث في أنواع البياناتsearch_functions- البحث عن وظائف بالاسمsearch_functions_enhanced- بحث متقدم عن الوظائفsearch_strings- البحث عن سلاسل معرفة بواسطة نمط تعبير عادي / سلسلة فرعية
فك التجميع والتفكيك
decompile_function- فك تجميع وظيفةdisassemble_bytes- تفكيك نطاق بايتdisassemble_function- تفكيك وظيفةforce_decompile- فرض فك تجميع جديد
علامات الوظائف والمتغيرات والسمات
add_function_tag- إرفاق علامة أو أكثر بوظيفةbatch_add_function_tags- إرفاق علامات بعدة وظائف في معاملة واحدةbatch_remove_function_tags- فصل العلامات عن عدة وظائف في معاملة واحدةclear_flow_and_repair- تشغيل إجراء 'Clear Flow and Repair' لواجهة المستخدم الرسومية لـ Ghidra على نطاق بذري: يمسح تدفق التعليمات الذي يمكن الوصول إليه من البذرة، ثم يصلح أجسام الوظائف ويعيد تفكيك التدفق المحتفظ به (ClearFlowAndRepairCmd مع clear_data=false, clear_labels=false, repair=true)create_function_tag- إنشاء تعريف علامة وظيفة على مستوى البرنامج مع تعليق اختياريdelete_function_tag- حذف تعريف علامة وظيفة على مستوى البرنامجget_function_tags- سرد جميع العلامات المخصصة لوظيفة معينةlist_class_members- سرد وظائف العضو لفئة C++list_function_tags- سرد جميع تعريفات علامات الوظائف على مستوى البرنامج مع أعداد استخدامهاremove_function_tag- فصل علامة أو أكثر عن وظيفةsearch_functions_by_tag- سرد جميع الوظائف التي تحتوي على علامة محددة مرفقةset_decompiler_variable_type- تعيين نوع متغير أو معامل على مستوى عالٍ (مفكك التجميع) بالاسمset_function_no_return- تعيين سمة عدم الإرجاعset_function_tag_comment- تحديث التعليق/الوصف على تعريف علامة وظيفة موجود على مستوى البرنامجset_function_this_type- تعيين نوع مؤشر 'this' الضمني في المفكك/قاعدة البيانات (ECX في x86 __thiscall/__fastcall)set_variables- تعيين الأنواع والأسماء لعدة متغيرات بشكل ذري
المراجع المتقاطعة
add_memory_reference- إنشاء مرجع متقاطع معرف من قبل المستخدم بين عنوانين من الذاكرة لا يمكن للمحلل التلقائي استنتاجه (جداول المؤشرات المعبأة في وقت التشغيل، جداول الوظائف الافتراضية، مؤشرات الوظائف المرتبطة متأخرًا، جداول القفز/التبديل المفقودة)get_bulk_xrefs- الحصول على مراجع متقاطعة لعناوين متعددةget_function_xrefs- الحصول على مراجع متقاطعة للوظيفةget_xrefs_from- الحصول على مراجع من عنوانget_xrefs_to- الحصول على مراجع إلى عنوانremove_reference- إزالة مرجع(مراجع) متقاطع من الذاكرة من عنوان إلى آخر — عكس add_memory_reference
أنواع البيانات والهياكل
add_struct_field- إضافة حقل هيكلanalyze_global_completeness- تسجيل درجة اكتمال توثيق متغير عام على مقياس 0-100 بميزانية — النظير لعنوان البيانات لـ analyze_function_completenessapply_data_type- تطبيق نوع بياناتaudit_global- تدقيق حالة توثيق متغير عامaudit_globals_in_function- تدقيق كل متغير عام مشار إليه من داخل وظيفة في استدعاء واحدbatch_set_variable_types- تعيين أنواع متغيرات متعددةclone_data_type- استنساخ نوع بياناتcreate_array_type- إنشاء نوع مصفوفةcreate_data_type_category- إنشاء فئة نوع بياناتcreate_enum- إنشاء تعدادcreate_function_signature- إنشاء نوع توقيع وظيفةcreate_pointer_type- إنشاء نوع مؤشرcreate_struct- إنشاء هيكلcreate_typedef- إنشاء typedefcreate_union- إنشاء اتحادdelete_data_type- حذف نوع بياناتembed_struct_field- استبدال حقل هيكل بنوع هيكل مضمّن بالقيمة (مثلاًget_data_type_size- الحصول على حجم نوع البيانات بالبايتاتget_type_size- الحصول على حجم نوع البيانات ومعلوماتهimport_data_types- استيراد أنواع البيانات من GDTlist_data_type_categories- سرد فئات أنواع البياناتlist_data_types- سرد أنواع البياناتmodify_struct_field- تعديل حقل هيكلmodify_struct_field_type- تعيين نوع حقل هيكل بالاسم أو الإزاحة (offset:N)move_data_type_to_category- نقل نوع بيانات إلى فئةrecreate_struct- استبدال هيكل في خطوة واحدة: إزالة نوع موجود بنفس الاسم اختياريًا، ثم إنشاء مع JSON للحقول (نفس شكل create_struct)remove_struct_field- إزالة حقل هيكلresize_struct- تكبير أو تصغير هيكل موجود حسب الحجم الكلي بالبايتresolve_duplicate_type- العثور على أنواع بيانات مكررة بالاسم البسيط؛ حذف العناصر النائبة غير المستخدمة /Demangler بحجم 1 عند وجود نوع قانوني أكبرset_function_prototype- تعيين النموذج الأولي للوظيفة (نوع الإرجاع، أنواع المعاملات، اصطلاح الاستدعاء)set_global- تطبيق الاسم + النوع + تعليق اللوحة + طول المصفوفة على متغير عام بشكل ذريset_local_variable_type- تعيين نوع متغيرset_parameter_type- تعيين نوع معاملset_variable_storage- تعيين تخزين متغيرvalidate_data_type- التحقق من صحة بناء جملة نوع البياناتvalidate_data_type_exists- التحقق مما إذا كان نوع البيانات موجودًاvalidate_function_prototype- التحقق من صحة النموذج الأولي للوظيفة
إعادة التسمية والتسميات
batch_create_labels- إنشاء عدة تسمياتbatch_delete_labels- حذف عدة تسمياتbatch_rename_function_components- إعادة تسمية مكونات الوظيفة بشكل مجمعcreate_label- إنشاء تسميةdelete_label- حذف تسمية في عنوانrename_data- إعادة تسمية رمز بياناتrename_external_location- إعادة تسمية موقع خارجيrename_function- إعادة تسمية وظيفة بالاسمrename_function_by_address- إعادة تسمية وظيفة بالعنوانrename_global_variable- إعادة تسمية متغير عامrename_label- إعادة تسمية تسميةrename_or_label- إعادة تسمية أو إنشاء تسميةrename_variable- إعادة تسمية متغير في وظيفةrename_variables- إعادة تسمية متغيرات بشكل مجمع
التعليقات والإشارات المرجعية
batch_set_comments- تعيين عدة تعليقاتclear_function_comments- مسح جميع التعليقات لوظيفةdelete_bookmark- حذف إشارة مرجعيةget_comment- الحصول على تعليقات القائمة (لوحة/قبل/نهاية السطر/بعد/قابل للتكرار) في أي عنوان، بما في ذلك عناوين البيانات (على عكس get_plate_comment الذي يتطلب وظيفة)get_plate_comment- الحصول على تعليق اللوحةset_bookmark- تعيين إشارة مرجعيةset_comment- تعيين تعليق قائمة من نوع معين (لوحة/قبل/نهاية السطر/بعد/قابل للتكرار) في أي عنوان، بما في ذلك عناوين البياناتset_decompiler_comment- تعيين PRE_COMMENTset_disassembly_comment- تعيين EOL_COMMENTset_plate_comment- تعيين تعليق اللوحة
التحليل
analyze_api_call_chains- تحليل سلاسل استدعاء APIanalyze_call_graph- تحليل أنماط مخطط استدعاء الوظائفanalyze_control_flow- تحليل تدفق التحكمanalyze_data_region- تحليل منطقة البياناتanalyze_dataflow- تتبع انتشار القيمة خلال وظيفة (رسم PCode، أمامي/خلفي)analyze_for_documentation- تحليل توثيق RE مركب (فك تجميع + تصنيف + متغيرات + اكتمال)analyze_function_complete- تحليل وظيفة شامل باستدعاء واحدanalyze_function_completeness- تحليل اكتمال التوثيقanalyze_struct_field_usage- تحليل استخدام حقول الهيكلapply_data_classification- تطبيق تصنيف البياناتbatch_analyze_completeness- تحليل الاكتمال بشكل مجمع لوظائف متعددةbatch_apply_documentation- تطبيق كل التوثيق على وظيفة في استدعاء واحدbatch_decompile- فك تجميع عدة وظائف مرة واحدةcan_rename_at_address- التحقق مما إذا كان يمكن إعادة تسمية عنوانclear_instruction_flow_override- مسح تجاوز التدفقconfigure_analyzer- تكوين إضافة تحليلcreate_function- إنشاء وظيفة في عنوانcreate_memory_block- إنشاء كتلة ذاكرةdelete_function- حذف وظيفة في عنوانdetect_array_bounds- اكتشاف حدود المصفوفاتdetect_crypto_constants- اكتشاف ثوابت التشفيرdetect_malware_behaviors- اكتشاف سلوكيات البرامج الضارةextract_iocs_with_context- استخراج مؤشرات الاختراق مع السياقfind_anti_analysis_techniques- العثور على تقنيات مكافحة التحليلfind_code_gaps- العثور على فجوات بايتات غير معرفة بين الوظائف في الذاكرة القابلة للتنفيذfind_dead_code- العثور على الكود الميتfind_next_undefined_function- العثور على الوظيفة التالية غير المعرفةget_assembly_context- الحصول على سياق لغة التجميعget_field_access_context- الحصول على سياق الوصول إلى الحقلget_function_pcode- تفريغ P-code الخام لوظيفة (الإصدار #192)inspect_memory_content- فحص بايتات الذاكرةlist_analyzers- سرد إضافات التحليل المتاحةread_memory- قراءة الذاكرة الخامrun_analysis- تشغيل التحليل التلقائي على البرنامج الحاليsearch_instructions- البحث عن تعليمات بواسطة رمز الذاكرة و/أو سلسلة فرعية للمعاملsuggest_field_names- اقتراح أسماء الحقول
التوثيق والأرشيف عبر الثنائيات
archive_ingest_function- استيعاب توثيق وظيفة واحدة في أرشيف متعدد الإصدارات (re_kb.functions على bsim Postgres)archive_ingest_program- استيعاب كل وظيفة في برنامج بشكل مجمع في أرشيف التوثيق متعدد الإصداراتbatch_string_anchor_report- تقرير عن سلاسل الملف المصدر ووظائف FUN_* الخاصة بهاbulk_fuzzy_match- مطابقة وظائف ضبابية عبر الثنائيات بشكل مجمعfind_similar_functions_fuzzy- مطابقة وظائف ضبابية عبر الثنائياتmerge_program_documentation- دمج مجمع: نسخ كل توثيق RE (أسماء الوظائف، التوقيعات، تعليقات اللوحة، تعليقات التعليمات في EOL/PRE/POST، التسميات غير الافتراضية والرموز العامة) من برنامج إلى آخر في العناوين المطابقة
الأداة المساعدة ونقل التوثيق
apply_function_documentation- تطبيق توثيق الوظيفةcheck_connection- نقطة نهاية فحص الصحةcompare_programs_documentation- مقارنة التوثيق عبر البرامجconvert_number- تحويل رقم بين الأساساتdiff_functions- مقارنة وظيفتينfind_undocumented_by_string- العثور على وظائف غير موثقة تشير إلى سلسلةget_bulk_function_hashes- الحصول على تجزئات الوظائف بشكل مجمعget_function_documentation- تصدير توثيق الوظيفةget_function_hash- الحصول على تجزئة الوظيفةget_function_signature- الحصول على توقيع ميزة الوظيفةget_metadata- الحصول على بيانات وصفية للبرنامجget_version- الحصول على إصدار الإضافةhealth- نقطة نهاية فحص الصحة لخادم وضع الرأسmcp_health- صحة خادم HTTP: إحصائيات التجمع، وقت التشغيل، الذاكرة، عدد الطلبات النشطةmcp_schema- مخطط API قابل للقراءة آليًا مع بيانات وصفية لنقطة النهايةtool_goto_address- التنقل في قائمة CodeBrowser والمفكك إلى عنوان محددtool_launch_codebrowser- فتح ملف في CodeBrowser، مع تشغيل ملف جديد إذا لزم الأمرtool_running_tools- سرد جميع نوافذ أدوات Ghidra الجارية
المحاكاة
emulate_function- محاكاة وظيفة واحدة مع إدخالات مسجلة/ذاكرة مسيطر عليهاemulate_hash_batch- القوة الغاشمة لحل تجزئة API
البرمجة النصية
run_ghidra_script- تشغيل نص مع التقاط المخرجاتrun_script_inline- تشغيل كود نص مضمن
خادم Ghidra والتحكم في الإصدارات
server_admin_set_permissions- تعيين أذونات المستخدم على مستودعserver_admin_terminate_all_checkouts- إنهاء جميع عمليات السحب في مجلد بشكل متكررserver_admin_terminate_checkout- إنهاء جميع عمليات السحب على ملف واحدserver_admin_users- سرد جميع المستخدمين على الخادمserver_authenticate- تسجيل بيانات اعتماد الخادم للمصادقة البرمجيةserver_checkouts- سرد جميع الملفات المسحوبة في مجلد، بما في ذلك عمليات السحب من جانب الخادمserver_connect- الاتصال بخادم Ghidraserver_disconnect- قطع الاتصال بخادم Ghidraserver_repositories- سرد المستودعات على الخادم المتصلserver_repository_create- إنشاء مستودع جديد على الخادمserver_repository_file- الحصول على معلومات ملف من مستودع الخادمserver_repository_files- سرد الملفات في مجلد مستودع الخادمserver_version_control_add- إضافة ملف إلى التحكم في الإصداراتserver_version_control_checkin- تسجيل ملف تحت التحكم في الإصداراتserver_version_control_checkout- سحب ملف تحت التحكم في الإصداراتserver_version_control_undo_checkout- التراجع عن سحب ملفserver_version_history- الحصول على تاريخ الإصدارات لملف
المصحح (Ghidra TraceRmi — واجهة المستخدم الرسومية فقط)
على مضيفات Windows حيث يكون وكيل مصحح WinDbg للجسر نشطًا (GHIDRA_DEBUGGER_URL)، تحصل الأسماء المتضاربة على لاحقة _2 (مثل debugger_status_2).
debugger_dynamic_to_static- ترجمة عنوان ديناميكي وقت التشغيل من التتبع الحالي إلى عنوان برنامج Ghidra ثابتdebugger_interrupt- مقاطعة (اختراق) الهدف الجاريdebugger_launch- تشغيل ملف قابل للتنفيذ من خلال مشغل مصحح Trace RMI لـ Ghidradebugger_launch_offers- سرد خيارات تشغيل/إرفاق المصحح المتاحة للبرنامج الحاليdebugger_list_breakpoints- سرد جميع نقاط التوقف في التتبع الحاليdebugger_modules- سرد الوحدات (DLLs/EXEs) المحملة في العملية المصححةdebugger_read_memory- قراءة الذاكرة من العملية المصححةdebugger_registers- قراءة سجلات وحدة المعالجة المركزية من لقطة التتبع الحاليةdebugger_remove_breakpoint- إزالة نقطة توقف في عنوانdebugger_resume- استئناف تنفيذ العملية المصححةdebugger_set_breakpoint- تعيين نقطة توقف تنفيذ برمجية في عنوان في التتبعdebugger_stack_trace- الحصول على التتبع العكسي لمكدس الاستدعاءات للخيط الحاليdebugger_static_to_dynamic- ترجمة عنوان برنامج Ghidra ثابت إلى عنوان ديناميكي وقت التشغيل في التتبع الحاليdebugger_status- الحصول على حالة المصحح: التتبع النشط، الخيط، حالة التنفيذ، عدد الوحداتdebugger_step_into- تنفيذ خطوة واحدة داخل التعليمات التالية (يتبع الاستدعاءات)debugger_step_out- الخروج من الوظيفة الحالية (التشغيل حتى الإرجاع)debugger_step_over- تخطي التعليمات التالية (لا يتبع الاستدعاءات)debugger_traces- سرد جميع تتبعات التصحيح المفتوحة
النظام
prompt_policy- تمكين أو تعطيل أو الاستعلام عن معالجة المطالبات الآلية الموسعة بشكل مؤقت
أدوات الجسر الثابتةمُعرّفة في جسر Python نفسه (اكتشاف المثيلات، إدارة مجموعات الأدوات)؛ متاحة دائمًا حتى قبل الاتصال بـ Ghidra. كما يقوم الجسر بتوكيل 22 أداة debugger_* من WinDbg عندما يشير GHIDRA_DEBUGGER_URL إلى خادم المُصحح المستقل.
check_tools- الإبلاغ عن الأدوات المسجلة والقابلة للاستدعاء حاليًاconnect_instance- توصيل الجسر بمثيل Ghidra معينimport_file- استيراد ملف ثنائي من القرص إلى المشروع الحالي وفتحهlist_instances- اكتشاف مثيلات Ghidra MCP قيد التشغيل (مسح منافذ UDS + TCP)list_tool_groups- سرد مجموعات الأدوات وحالة تحميلهاload_tool_group- تسجيل الأدوات الديناميكية لمجموعة أدوات لدى عميل MCPsearch_tools- البحث في كتالوج الأدوات الكامل حسب الكلمة المفتاحيةunload_tool_group- إلغاء تسجيل الأدوات الديناميكية لمجموعة أدوات
انظر CHANGELOG.md لتاريخ الإصدارات.
🏗️ الهيكل```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ AI/Automation │◄──►│ MCP Bridge │◄──►│ Ghidra Plugin │ │ Tools │ │ (bridge_mcp_ │ │ (GhidraMCP.jar) │ │ (Claude, etc.) │ │ ghidra/) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ MCP Protocol HTTP REST Ghidra API (stdio/streamable-http) (localhost:8089) (Program, Listing)
### المكونات
- **python/bridge_mcp_ghidra/** — حزمة خادم MCP بلغة بايثون (تُصدر كعجلة `ghidra-mcp-bridge`؛ النص البرمجي لوحدة التحكم `bridge-mcp-ghidra`) التي تترجم بروتوكول MCP إلى استدعاءات HTTP (225 إدخالاً في الكتالوج)
- **GhidraMCP.jar** — مكون إضافي لـ Ghidra يعرض إمكانيات التحليل عبر HTTP (175 نقطة نهاية واجهة المستخدم الرسومية)
- **GhidraMCPHeadlessServer** — خادم مستقل بدون واجهة — 183 نقطة نهاية، لا حاجة لواجهة المستخدم الرسومية
- **ghidra_scripts/** — مجموعة من نصوص الأتمتة للمهام الشائعة
## 🔧 التطوير
### البناء من المصدر```bash
# Recommended: direct Python-first workflow
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup build
python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
# Version bump (updates all maintained version references atomically)
python -m tools.setup bump-version --new X.Y.Z
نظام البناء المعتمد اليوم هو Maven. tools.setup ومهام VS Code وسير العمل الموثق للنشر كلها تبني عبر pom.xml وتكتب القطع الأثرية في target/. يبقى build.gradle في المستودع كخيار احتياطي يدوي للمستخدمين المباشرين لـ Ghidra/Gradle، لكنه ليس المسار الأساسي.
مرجع الأوامر
| الأمر | الوظيفة |
|---|---|
ensure-prereqs | تثبيت تبعيات Python و JARs الخاصة بـ Ghidra Maven دفعة واحدة. ابدأ من هنا على جهاز جديد. |
preflight | التحقق من صحة Python وأداة البناء ومسار Ghidra وتوفر JAR دون إجراء تغييرات. أضف --strict للتحقق أيضًا من إمكانية الوصول إلى الشبكة. |
build | بناء JAR الإضافة وZIP الامتداد عبر Maven (أو Gradle عندما يكون TOOLS_SETUP_BACKEND=gradle). |
deploy | نسخ الامتداد المبني إلى ملف تعريف Ghidra وتصحيح FrontEndTool.xml للتفعيل التلقائي. |
start-ghidra | تشغيل تثبيت Ghidra المهيأ. |
clean | إزالة مخرجات بناء Maven/Gradle (target/, build/). |
clean-all | إزالة مخرجات البناء بالإضافة إلى القطع الأثرية المخزنة محليًا (.m2 JARs لـ Ghidra، إلخ). |
install-ghidra-deps | تثبيت فقط JARs الخاصة بـ Ghidra في ~/.m2. مفيد عندما تتغير بيئة البناء. |
install-python-deps | تثبيت مجموعات تبعيات Python عبر uv sync. |
run-tests | تشغيل مجموعة اختبارات Java دون اتصال (لا حاجة لـ Ghidra المباشر). |
verify-version | التحقق من اتساق سلاسل الإصدار عبر pom.xml و CHANGELOG.md و README.md. |
bump-version --new X.Y.Z | تحديث جميع مراجع الإصدار بشكل ذري. مرر --tag لإنشاء علامة git. |
الأعلام الشائعة التي تقبلها معظم الأوامر:
| العلم | الوصف |
|---|---|
--ghidra-path PATH | دليل تثبيت Ghidra. الافتراضي هو GHIDRA_PATH من .env. |
--dry-run | طباعة الإجراءات دون تنفيذها. |
--force | إعادة تثبيت JARs الخاصة بـ Ghidra حتى لو كانت موجودة بالفعل (install-ghidra-deps, ensure-prereqs). |
--with-debugger | فرض تثبيت متطلبات مصحح أخطاء Python (Windows فقط). |
--use-debugger-toggle | قراءة INSTALL_DEBUGGER_DEPS من .env لتحديد ما إذا كان سيتم تثبيت تبعيات المصحح. |
--test TIER | (لـ deploy فقط) الاشتراك في طبقات الانحدار المباشر للنشر مثل release أو debugger-live. |
--strict | (لـ preflight فقط) التحقق أيضًا من إمكانية الوصول إلى الشبكة لـ Maven Central و PyPI. |
طبقات اختبار النشر اختيارية لأن طبقات المعيار يمكنها استيراد/إعادة تعيين Benchmark.dll و BenchmarkDebug.exe في مشروع Ghidra النشط. استخدم --test release قبل إصدار الإصدارات، أو قم بتعيين GHIDRA_MCP_DEPLOY_TESTS=release في .env المحلي عندما تريد أن يقوم كل نشر على جهازك بتشغيل انحدار المعيار المباشر. انظر اختبار وانحدار الإصدار.```text
Standard first-time setup and deploy
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC" python -m tools.setup build python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
Preflight check before deploying
python -m tools.setup preflight --strict --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
Version bump and tag
python -m tools.setup bump-version --new X.Y.Z --tag
Run offline Java tests
python -m tools.setup run-tests
Show full help
python -m tools.setup --help
### هيكل المشروع```
ghidra-mcp/
├── pyproject.toml # uv project (ghidra-mcp-bridge wheel + dependency groups)
├── python/bridge_mcp_ghidra/ # MCP server package (Python, 225 catalog entries)
├── src/main/java/ # Ghidra plugin + headless server (Java)
│ └── com/xebyte/
│ ├── GhidraMCPPlugin.java # GUI plugin (196 endpoints)
│ ├── headless/ # Headless server (183 endpoints)
│ └── core/ # Shared service layer (12 services)
├── debugger/ # Optional standalone debugger server (port 8099)
├── ghidra_scripts/ # Automation scripts for batch workflows
├── tests/ # Python unit tests + endpoint catalog
│ ├── unit/ # Catalog consistency, schema, tool function tests
│ └── endpoints.json # Endpoint specification (225 entries)
├── docs/ # Documentation
│ ├── prompts/ # AI workflow prompts (V5 documentation workflows)
│ ├── releases/ # Version release notes
│ └── project-management/ # Contributor planning docs (Gradle migration, etc.)
├── tools/setup/ # Build and deployment CLI (python -m tools.setup)
├── fun-doc/ # Internal RE curation tool — not part of the MCP plugin
│ # Priority-queue worker, LLM scoring, web dashboard.
│ # See fun-doc/README.md for details.
└── .github/workflows/ # CI/CD pipelines
تبعيات المكتبة
يجب تثبيت ملفات Ghidra JAR في مستودع Maven المحلي (~/.m2/repository) قبل التجميع.
هذا إعداد لمرة واحدة لكل جهاز، ويتكرر عند تغيير إصدار Ghidra.
الخيار -Deploy يقوم الآن بتثبيتها تلقائيًا بشكل افتراضي.
تفرض الأداة اتساق الإصدار بين:
pom.xml(ghidra.version)- مقطع إصدار
--ghidra-path(مثلghidra_12.1.2_PUBLIC)
إذا لم يتطابقا، يفشل النشر بسرعة مع رسالة خطأ واضحة.
استكشاف الأخطاء وإصلاحها: عدم تطابق الإصدار
إذا رأيت خطأ في عدم تطابق الإصدار، قم بمحاذاة القيمتين:
pom.xml→ghidra.version- مقطع إصدار
--ghidra-path(ghidra_X.Y.Z_PUBLIC)
ثم أعد التشغيل:```text python -m tools.setup preflight --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
### 4. WAF```text
# Windows
python -m tools.setup install-ghidra-deps --ghidra-path "C:\path\to\ghidra_12.1.2_PUBLIC"
المكتبات المطلوبة (14 ملف JAR، ~37 ميجابايت):
| المكتبة | المسار المصدر | الغرض |
|---|---|---|
| Base.jar | Features/Base/lib/ | وظائف Ghidra الأساسية |
| Decompiler.jar | Features/Decompiler/lib/ | محرك فك التجميع |
| PDB.jar | Features/PDB/lib/ | دعم رموز PDB من Microsoft |
| FunctionID.jar | Features/FunctionID/lib/ | تعريف الدوال |
| SoftwareModeling.jar | Framework/SoftwareModeling/lib/ | واجهة برمجة نموذج البرنامج |
| Project.jar | Framework/Project/lib/ | إدارة المشاريع |
| Docking.jar | Framework/Docking/lib/ | إطار الإرساء لواجهة المستخدم |
| Generic.jar | Framework/Generic/lib/ | أدوات عامة |
| Utility.jar | Framework/Utility/lib/ | أدوات أساسية |
| Gui.jar | Framework/Gui/lib/ | مكونات واجهة المستخدم الرسومية |
| FileSystem.jar | Framework/FileSystem/lib/ | دعم نظام الملفات |
| Graph.jar | Framework/Graph/lib/ | تحليل الرسوم البيانية / رسوم الاستدعاءات |
| DB.jar | Framework/DB/lib/ | عمليات قاعدة البيانات |
| Emulation.jar | Framework/Emulation/lib/ | محاكاة P-code |
ملاحظة: المكتبات غير مضمنة في المستودع (انظر
.gitignore). يجب تثبيتها من تثبيت Ghidra الخاص بك قبل البناء.
نقطة الدخول للأتمتة:
python -m tools.setupهي الواجهة المدعومة للإعداد/البناء/النشر/إدارة الإصدارات- استخدم
ensure-prereqsوbuildوdeployوpreflightوclean-allوbump-versionمباشرة- تستخدم هذه الأوامر حاليًا Maven كخلفية بناء Java القياسية
ميزات التطوير
- النشر الآلي: نص نشر واعٍ بالإصدار
- العمليات المجمعة: تقليل استدعاءات API بنسبة 93%
- المعاملات الذرية: دلالات الكل أو لا شيء
- التسجيل الشامل: إمكانيات التصحيح والتتبع
📚 التوثيق
التوثيق الأساسي
- فهرس التوثيق - تصفح كامل للتوثيق
- هيكل المشروع - دليل تنظيم المشروع
- الاختبار ومراجعة الإصدارات - الاختبارات المحلية، CI، مراجعة Ghidra الحية، وبوابات الإصدار
- اتفاقيات التسمية - معايير تسمية الكود
- التدوين المجري - دليل تسمية المتغيرات
موجهات سير عمل الذكاء الاصطناعي
- توثيق الدوال V5 — سير العمل الأساسي: عملية من 7 خطوات مع التدوين المجري، تدقيق الأنواع، وتسجيل التحقق
- توثيق الدفعي V5 — إرسال وكيل فرعي متوازي لمعالجة متعددة الدوال
- اكتشاف الكود اليتيم — ماسح آلي للدوال غير المكتشفة
- التحقيق في أنواع البيانات — اكتشاف هيكلي منهجي
- المطابقة عبر الإصدارات — مطابقة الدوال بناءً على التجزئة
- موجه البداية السريعة — سير عمل مبسط للمبتدئين
- جميع الموجهات — فهرس موجهات كامل
تاريخ الإصدارات
- سجل التغييرات الكامل - ملاحظات إصدار جميع الإصدارات
- ملاحظات الإصدار - توثيق إصدار مفصل
🐳 الخادم بدون واجهة (Docker)
يتضمن GhidraMCP وضع خادم بدون واجهة للتحليل الآلي دون واجهة Ghidra الرسومية.
بداية سريعة مع Docker```bash
Build and run
docker-compose up -d ghidra-mcp
Test connection
curl http://localhost:8089/check_connection
Connection OK - GhidraMCP Headless Server v5.17.0
### سير عمل API بدون رأس```bash
# 1. Load a binary
curl -X POST -d "file=/data/program.exe" http://localhost:8089/load_program
# 2. Run auto-analysis (identifies functions, strings, data types)
curl -X POST http://localhost:8089/run_analysis
# 3. List discovered functions
curl "http://localhost:8089/list_functions?limit=20"
# 4. Decompile a function
curl "http://localhost:8089/decompile_function?address=0x401000"
# 5. Get metadata
curl http://localhost:8089/get_metadata
نقاط النهاية الرئيسية بدون واجهة رسومية
| نقطة النهاية | الطريقة | الوصف |
|---|---|---|
/load_program | POST | تحميل ملف ثنائي للتحليل |
/run_analysis | POST | تشغيل التحليل التلقائي لـ Ghidra |
/list_functions | GET | سرد جميع الدوال المكتشفة |
/list_exports | GET | سرد الرموز المصدرة |
/list_imports | GET | سرد الرموز المستوردة |
/decompile_function | GET | فك ترجمة الدالة إلى كود C |
/create_function | POST | إنشاء دالة عند عنوان |
/get_metadata | GET | الحصول على بيانات البرنامج الوصفية |
/create_project | POST | إنشاء مشروع Ghidra |
/list_analyzers | GET | سرد المحللات المتاحة |
/server/status | GET | التحقق من اتصال خادم Ghidra |
التكوين
المتغيرات البيئية لـ Docker:
GHIDRA_MCP_PORT- منفذ الخادم (الافتراضي: 8089)GHIDRA_MCP_BIND_ADDRESS- عنوان الربط (الافتراضي: 0.0.0.0 في Docker)JAVA_OPTS- خيارات JVM (الافتراضي: -Xmx4g -XX:+UseG1GC)
🤝 المساهمة
راجع CONTRIBUTING.md للحصول على إرشادات المساهمة التفصيلية.
بداية سريعة
- انسخ (Fork) المستودع
- أنشئ فرع ميزة (
git checkout -b feature/amazing-feature) - ابنِ واختبر تغييراتك (
mvn clean package assembly:single -DskipTestsأوGHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension) - حدّث التوثيق حسب الحاجة
- ارتكب تغييراتك (
git commit -m 'Add amazing feature') - ادفع إلى الفرع (
git push origin feature/amazing-feature) - افتح طلب سحب (Pull Request)
📄 الترخيص
هذا المشروع مرخص بموجب رخصة Apache 2.0 - راجع ملف LICENSE للتفاصيل.
🏆 حالة الإنتاج
| المقياس | القيمة |
|---|---|
| الإصدار | 5.17.0 |
| أدوات MCP | 249 أداة منفذة بالكامل |
| نقاط النهاية لواجهة المستخدم الرسومية | 196 (GhidraMCPPlugin) |
| نقاط النهاية بدون واجهة رسومية | 195 (GhidraMCPHeadlessServer) |
| التجميع | ✅ نجاح 100% |
| كفاءة الدفعات | تقليل استدعاءات API بنسبة 93% |
| مهام سير عمل الذكاء الاصطناعي | 7 مهام سير عمل موثقة |
| نصوص Ghidra البرمجية | تتضمن نصوص أتمتة |
| التوثيق | شامل مع مطالبات الذكاء الاصطناعي |
راجع CHANGELOG.md لتاريخ الإصدار وملاحظات الإصدار.
🙏 الإقرارات
هذا المشروع اشتق في الأصل من LaurieWired/GhidraMCP في أغسطس 2025 ومنذ ذلك الحين تمت إعادة كتابته وتوسيعه بشكل كبير. نقر بالعمل الأصلي لـ LaurieWired كنقطة انطلاق. راجع NOTICE لإسناد الترخيص.
👥 المساهمون
استفاد هذا المشروع من عمل المساهمين المخلصين:
المساهمون الأساسيون
@heeen — مساهمات كبيرة تشمل:
- مطابقة الدوال التقريبية والفرق المنظم للمقارنة عبر الثنائيات (#13)
- تحسينات تنفيذ النصوص البرمجية وإصلاح الأخطاء (#12)
- نقاط نهاية API جديدة:
save_program,exit_ghidra,delete_function,create_memory_block,run_script_inline(#11) - الرؤية المعمارية: التصميم القائم على التعليقات التوضيحية، نقل UDS، مقترحات تحسين جسر Python
@huehuehuehueing — مساهمات كبيرة تشمل:
-
دعم بادئة مساحة العنوان — إضافة صيغة
<space>:<hex>(مثلmem:1000,code:ff00) لتحليل العناوين عبر سطح نقطة النهاية بالكامل، مما يفتح أهداف متعددة المساحات مثل البرامج الثابتة المضمنة (#84, يغلق #65) -
معلمة
programالاختيارية + إصلاحات مخطط المعلمات المطلوبة — جعلprogramاختيارية على كل نقطة نهاية مع fallback معقول currentProgram، وأصلح العديد من أخطاء المخطط بين المطلوب والاختياري التي ورثها الكتالوج (#92) -
بذر #44 (أدوات نوع البيانات/التعداد) — المشكلة التي حفزت طبقة فرض التعداد + الهيكل في v5.0
-
فريق Ghidra - لمنصة الهندسة العكسية المذهلة
-
بروتوكول سياق النموذج - لإطار تكامل الذكاء الاصطناعي المعياري
-
المساهمون - للاختبار والملاحظات والتحسينات
🔗 المشاريع ذات الصلة
- re-universe — منصة Ghidra BSim PostgreSQL لتحليل تشابه الثنائيات على نطاق واسع. تتزاوج بشكل مثالي مع GhidraMCP لسير عمل الهندسة العكسية المدعومة بالذكاء الاصطناعي.
- cheat-engine-server-python — خادم MCP لتحليل الذاكرة الديناميكي وتصحيح الأخطاء.
جاهز للنشر في الإنتاج بموثوقية على مستوى المؤسسات وقدرات تحليل ثنائي شاملة.