
خادم MCP يربط بين الهندسة العكسية لـ Ghidra وأدوات الذكاء الاصطناعي: 256 أداة لفك التجميع، ومحاكاة P-code، والتصحيح المباشر، وتحليل تدفق البيانات، والعمليات الدفعية، وفرض الاتفاقيات عبر الوضع بدون واجهة رسومية ووضع واجهة المستخدم الرسومية.
إذا وجدت هذا مفيدًا، يُرجى ⭐ وضع نجمة على المستودع — فهذا يساعد الآخرين في اكتشافه!
إذا كان Ghidra MCP يوفر لك الوقت، فكِّر في دعم المشروع. كل من الدعم لمرة واحدة والدعم المتكرر يساعدان في تمويل تحديثات التوافق، وتقوية بيئة الإنتاج، والوثائق، والأدوات الجديدة.
خادم Model Context Protocol (MCP) جاهز للإنتاج يربط قدرات Ghidra القوية في الهندسة العكسية بأدوات الذكاء الاصطناعي الحديثة وأطر الأتمتة. 271 أداة MCP، وسير عمل ذكي مختبر في المعارك، وأشمل تكامل Ghidra-MCP متاح — يشمل الآن محاكاة P-code، وتكامل المٌصحح الحي، وتحليل تدفق البيانات عبر PCode-graph.
معظم تطبيقات Ghidra MCP تمنحك حفنة من الأدوات للقراءة فقط وتعتبر المهمة منتهية. هذا المشروع مختلف — فقد بُني بواسطة مهندس عكسي يستخدمه يوميًا على ملفات ثنائية حقيقية، وليس كعرض تجريبي.
لقد مررت بهذا: بعد ستة أشهر من المشروع تجد ProcessItem و process_items و handleItem و ItemProc في نفس قاعدة الكود — أربع دوال تفعل نفس الشيء، مسماة بأربع جلسات أو مهندسين مختلفين دون عقد مشترك. إصلاحها يستغرق وقتًا أطول مما ينبغي، وستتكرر المشكلة.
الإصدار v5.0 ينقل الاصطلاحات من "أشياء يجب تذكرها" إلى طبقة الأدوات، حيث يمكن فرضها فعليًا.
بالنسبة لوكلاء الذكاء الاصطناعي، يعني هذا مخرجات متسقة عبر كل جلسة، كل نموذج، كل تشغيل — دون لصق دليل أسلوب في كل تعليمة. الأداة تعرف القواعد؛ النموذج يحتاج فقط إلى اتخاذ القرار.
بالنسبة للفرق، يلغي هذا الفئة الكاملة من تعليقات المراجعة التي تقول "هذا ليس اصطلاح التسمية لدينا". يظل تحكيم الاصطلاحات في الأداة، وليس في مراجعة الكود.
بالنسبة للعمل الفردي على نطاق واسع، يمنحك analyze_function_completeness درجة 0–100% تقيس بصدق: الاستقطاعات الهيكلية (القمامات المترجمة غير القابلة للإصلاح) تُغتفر في درجتك الفعالة، والتدرج اللوغاريتمي يمنع فئة سيئة واحدة من دفن كل شيء آخر، وجودة تعليق الشريحة المتدرجة تعني أنك تعرف بالضبط ما هو مفقود ولماذا.
ملاحظة التوافق: يتم تطبيع أسماء أدوات MCP لـ GitHub Copilot CLI والتحقق من CAPI. تستخدم أسماء الأدوات المعروضة أحرفًا صغيرة وأرقامًا وشرطات سفلية وواصلات فقط؛ يتم الإعلان عن المسارات HTTP المتداخلة مثل
/debugger/statusبأسماء مثلdebugger_status_2عند الحاجة لتجنب التصادم مع أدوات الجسر الثابتة.
EmulatorHelper الخاص بـ Ghidra؛ حل هاش API بالقوة الغاشمة في ميلي ثانيةمستخدمو خادم 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.
deploy يحفظ/يغلق مثيل Ghidra المطابق الذي يعمل بالفعل عند الحاجة
، ويقوم بتثبيت الامتداد، ويبدأ Ghidra، وينتظر صحة MCP، ويقوم
بفحوصات دخان المخطط.
مسار البناء المدعوم: python -m tools.setup build يستخدم Maven داخليًا وهو سير العمل الأساسي المستخدم في مهام المستودع والمستندات. ```bash
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
ملاحظة دبيان/كالي/أوبونتو 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
سيقوم هذا بما يلي:
~/.m2/repository المحليGhidraMCP-<version>.zip باستخدام Maven~/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/preferences بـ LastExtensionImportDirectoryمسارات Linux: تم تثبيت الامتداد في
$HOME/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/GhidraMCP/. ملفات تكوين Ghidra موجودة في$HOME/.config/ghidra/ghidra_<version>_PUBLIC/.
تم تثبيت الامتداد إلى ~/Library/ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/.
ملاحظة:
--ghidra-versionمطلوب عند استخدام مسار Homebrew لأن المسار لا يحتوي على سلسلة إصدار.
في نافذة المشروع الرئيسية: Tools > GhidraMCP > Start MCP Server
~/.cursor/mcp.json): ```json
{
"mcpServers": {
"ghidra": {
"command": "uv",
"args": ["run", "--directory", "/path/to/ghidra-mcp", "bridge-mcp-ghidra"]
}
}
}
@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
عيّن 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.
علامات خادم التصحيح:
عيّن GHIDRA_DEBUGGER_URL في ملف .env إذا قمت بتغيير المنفذ أو المضيف الافتراضي حتى يتمكن الجسر من العثور عليه.
http://127.0.0.1:8089/ افتراضيًاcurl http://127.0.0.1:8089/check_connection
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 مشترك، يمكن لـ 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 للكتلة الكاملة) لتمكين المصادقة الصامتة.
/run_script_inline أو /run_ghidra_script، قم بتصدير GHIDRA_MCP_ALLOW_SCRIPTS=1. هذا تغيير متعمد مسبب للكسر؛ الإعداد الافتراضي السابق كان غير آمن.السبب: لم يتم تمكين الإضافة أو تثبيتها بشكل صحيح.
الحل:
السبب: لم يتم بدء الخادم أو المنفذ خاطئ.
الحل:
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"
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 الحالي وفتحه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 إلى مشروع جديد على القرص في 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 - سرد جميع أسماء الوظائف مع ترقيم الصفحات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 - الحصول على الوظائف التي تستدعي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 - سرد جميع الوظائف التي تحتوي على علامة محددة مرفقةadd_memory_reference - إنشاء مرجع متقاطع معرف من قبل المستخدم بين عنوانين من الذاكرة لا يمكن للمحلل التلقائي استنتاجه (جداول المؤشرات المعبأة في وقت التشغيل، جداول الوظائف الافتراضية، مؤشرات الوظائف المرتبطة متأخرًا، جداول القفز/التبديل المفقودة)get_bulk_xrefs - الحصول على مراجع متقاطعة لعناوين متعددةget_function_xrefs - الحصول على مراجع متقاطعة للوظيفةget_xrefs_from - الحصول على مراجع من عنوانget_xrefs_to - الحصول على مراجع إلى عنوانremove_reference - إزالة مرجع(مراجع) متقاطع من الذاكرة من عنوان إلى آخر — عكس add_memory_referenceadd_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 - إنشاء نوع مؤشر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 - إعادة تسمية أو إنشاء تسمية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 - تحليل الاكتمال بشكل مجمع لوظائف متعددة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 - الحصول على إصدار الإضافةemulate_function - محاكاة وظيفة واحدة مع إدخالات مسجلة/ذاكرة مسيطر عليهاemulate_hash_batch - القوة الغاشمة لحل تجزئة APIrun_ghidra_script - تشغيل نص مع التقاط المخرجاتrun_script_inline - تشغيل كود نص مضمن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 - الحصول على معلومات ملف من مستودع الخادمعلى مضيفات 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 - تعيين نقطة توقف تنفيذ برمجية في عنوان في التتبعprompt_policy - تمكين أو تعطيل أو الاستعلام عن معالجة المطالبات الآلية الموسعة بشكل مؤقت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، لكنه ليس المسار الأساسي.
الأعلام الشائعة التي تقبلها معظم الأوامر:
طبقات اختبار النشر اختيارية لأن طبقات المعيار يمكنها استيراد/إعادة تعيين Benchmark.dll و BenchmarkDebug.exe في مشروع Ghidra النشط. استخدم --test release قبل إصدار الإصدارات، أو قم بتعيين GHIDRA_MCP_DEPLOY_TESTS=release في .env المحلي عندما تريد أن يقوم كل نشر على جهازك بتشغيل انحدار المعيار المباشر. انظر اختبار وانحدار الإصدار.```text
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"
python -m tools.setup preflight --strict --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup bump-version --new X.Y.Z --tag
python -m tools.setup run-tests
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 ميجابايت):
ملاحظة: المكتبات غير مضمنة في المستودع (انظر
.gitignore). يجب تثبيتها من تثبيت Ghidra الخاص بك قبل البناء.
نقطة الدخول للأتمتة:
python -m tools.setupهي الواجهة المدعومة للإعداد/البناء/النشر/إدارة الإصدارات- استخدم
ensure-prereqsوbuildوdeployوpreflightوclean-allوbump-versionمباشرة- تستخدم هذه الأوامر حاليًا Maven كخلفية بناء Java القياسية
يتضمن GhidraMCP وضع خادم بدون واجهة للتحليل الآلي دون واجهة Ghidra الرسومية.
docker-compose up -d ghidra-mcp
curl http://localhost:8089/check_connection
### سير عمل 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
المتغيرات البيئية لـ Docker:
GHIDRA_MCP_PORT - منفذ الخادم (الافتراضي: 8089)GHIDRA_MCP_BIND_ADDRESS - عنوان الربط (الافتراضي: 0.0.0.0 في Docker)JAVA_OPTS - خيارات JVM (الافتراضي: -Xmx4g -XX:+UseG1GC)راجع CONTRIBUTING.md للحصول على إرشادات المساهمة التفصيلية.
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)هذا المشروع مرخص بموجب رخصة Apache 2.0 - راجع ملف LICENSE للتفاصيل.
راجع CHANGELOG.md لتاريخ الإصدار وملاحظات الإصدار.
هذا المشروع اشتق في الأصل من LaurieWired/GhidraMCP في أغسطس 2025 ومنذ ذلك الحين تمت إعادة كتابته وتوسيعه بشكل كبير. نقر بالعمل الأصلي لـ LaurieWired كنقطة انطلاق. راجع NOTICE لإسناد الترخيص.
استفاد هذا المشروع من عمل المساهمين المخلصين:
@heeen — مساهمات كبيرة تشمل:
save_program, exit_ghidra, delete_function, create_memory_block, run_script_inline (#11)@huehuehuehueing — مساهمات كبيرة تشمل:
دعم بادئة مساحة العنوان — إضافة صيغة <space>:<hex> (مثل mem:1000, code:ff00) لتحليل العناوين عبر سطح نقطة النهاية بالكامل، مما يفتح أهداف متعددة المساحات مثل البرامج الثابتة المضمنة (#84, يغلق #65)
معلمة program الاختيارية + إصلاحات مخطط المعلمات المطلوبة — جعل program اختيارية على كل نقطة نهاية مع fallback معقول currentProgram، وأصلح العديد من أخطاء المخطط بين المطلوب والاختياري التي ورثها الكتالوج (#92)
بذر #44 (أدوات نوع البيانات/التعداد) — المشكلة التي حفزت طبقة فرض التعداد + الهيكل في v5.0
فريق Ghidra - لمنصة الهندسة العكسية المذهلة
بروتوكول سياق النموذج - لإطار تكامل الذكاء الاصطناعي المعياري
المساهمون - للاختبار والملاحظات والتحسينات
جاهز للنشر في الإنتاج بموثوقية على مستوى المؤسسات وقدرات تحليل ثنائي شاملة.
| المستوى | السلوك | مثال |
|---|
| تصحيح تلقائي | يُطبق بصمت | حقل count من نوع uint32 → يُضاف تلقائيًا البادئة dwCount عند الحفظ |
| تحذير | التغيير يُنفذ، ويُعاد تحذير | processData → "يجب أن يكون الاسم بـ PascalCase مع فعل: ProcessData" |
| رفض | يُمنع التغيير مع شرح | تغيير النوع undefined → undefined → "رفض بدون عملية، النوع لم يتغير" |
| العلم | الافتراضي | الوصف |
|---|
--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. |
| العلامة | الافتراضي | الوصف |
|---|
--port | 8099 | منفذ خادم HTTP |
--host | 127.0.0.1 | عنوان الربط (0.0.0.0 للتعريض على الشبكة المحلية) |
--exports-dir | — | مسار إلى دليل dll_exports/ لتحويل الأرقام الترتيبية إلى أسماء |
--log-level | INFO | DEBUG, INFO, WARNING, أو ERROR |
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 - تبديل البرنامج الحاليparent_dir/project_nameserver_status - التحقق من حالة اتصال الخادم في وضع الرأسlist_namespaces - سرد جميع المساحاتlist_scripts - سرد نصوص Ghidra المتاحةlist_segments - سرد أجزاء الذاكرةlist_strings - سرد السلاسل المعرفةget_function_count - إرجاع عدد الوظائف في البرنامج المحملget_function_jump_targets - الحصول على أهداف القفزاتget_function_labels - الحصول على التسميات في الوظيفةget_function_variables - سرد جميع المتغيرات في وظيفةget_struct_layout - الحصول على تخطيط الهيكلget_valid_data_types - الحصول على أسماء أنواع البيانات الصالحةset_decompiler_variable_type - تعيين نوع متغير أو معامل على مستوى عالٍ (مفكك التجميع) بالاسمset_function_no_return - تعيين سمة عدم الإرجاعset_function_tag_comment - تحديث التعليق/الوصف على تعريف علامة وظيفة موجود على مستوى البرنامجset_function_this_type - تعيين نوع مؤشر 'this' الضمني في المفكك/قاعدة البيانات (ECX في x86 __thiscall/__fastcall)set_variables - تعيين الأنواع والأسماء لعدة متغيرات بشكل ذري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 - التحقق من صحة النموذج الأولي للوظيفةrename_variable - إعادة تسمية متغير في وظيفةrename_variables - إعادة تسمية متغيرات بشكل مجمعbatch_apply_documentationbatch_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 - اقتراح أسماء الحقولhealth - نقطة نهاية فحص الصحة لخادم وضع الرأسmcp_health - صحة خادم HTTP: إحصائيات التجمع، وقت التشغيل، الذاكرة، عدد الطلبات النشطةmcp_schema - مخطط API قابل للقراءة آليًا مع بيانات وصفية لنقطة النهايةtool_goto_address - التنقل في قائمة CodeBrowser والمفكك إلى عنوان محددtool_launch_codebrowser - فتح ملف في CodeBrowser، مع تشغيل ملف جديد إذا لزم الأمرtool_running_tools - سرد جميع نوافذ أدوات Ghidra الجاريةserver_repository_files - سرد الملفات في مجلد مستودع الخادمserver_version_control_add - إضافة ملف إلى التحكم في الإصداراتserver_version_control_checkin - تسجيل ملف تحت التحكم في الإصداراتserver_version_control_checkout - سحب ملف تحت التحكم في الإصداراتserver_version_control_undo_checkout - التراجع عن سحب ملفserver_version_history - الحصول على تاريخ الإصدارات لملفdebugger_stack_trace - الحصول على التتبع العكسي لمكدس الاستدعاءات للخيط الحاليdebugger_static_to_dynamic - ترجمة عنوان برنامج Ghidra ثابت إلى عنوان ديناميكي وقت التشغيل في التتبع الحاليdebugger_status - الحصول على حالة المصحح: التتبع النشط، الخيط، حالة التنفيذ، عدد الوحداتdebugger_step_into - تنفيذ خطوة واحدة داخل التعليمات التالية (يتبع الاستدعاءات)debugger_step_out - الخروج من الوظيفة الحالية (التشغيل حتى الإرجاع)debugger_step_over - تخطي التعليمات التالية (لا يتبع الاستدعاءات)debugger_traces - سرد جميع تتبعات التصحيح المفتوحة| الأمر | الوظيفة |
|---|
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. |
| المكتبة | المسار المصدر | الغرض |
|---|
| 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 |
| نقطة النهاية | الطريقة | الوصف |
|---|
/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 |
| المقياس | القيمة |
|---|
| الإصدار | 5.17.0 |
| أدوات MCP | 249 أداة منفذة بالكامل |
| نقاط النهاية لواجهة المستخدم الرسومية | 196 (GhidraMCPPlugin) |
| نقاط النهاية بدون واجهة رسومية | 195 (GhidraMCPHeadlessServer) |
| التجميع | ✅ نجاح 100% |
| كفاءة الدفعات | تقليل استدعاءات API بنسبة 93% |
| مهام سير عمل الذكاء الاصطناعي | 7 مهام سير عمل موثقة |
| نصوص Ghidra البرمجية | تتضمن نصوص أتمتة |
| التوثيق | شامل مع مطالبات الذكاء الاصطناعي |