Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
pyghidra-mcp — سطر أوامر بايثون Ghidra MCP | Kitploit
أدوات/GitHubGitHub/clearbluejar/pyghidra-mcp
أمان الأنظمة المدمجةالتحليل الثابتتحليل الكودالهندسة العكسيةمصممي الأخطاءتحليل البرمجيات الخبيثةتحليل الملفات الثنائيةالتعلم والتعليمالهندسة العكسية بمساعدة الذكاء الاصطناعيتحليل البرامج الثابتة
GitHubclearbluejar/pyghidra-mcp
40455منذ 11 أيامتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

pyghidra-mcp

سطر أوامر بايثون Ghidra MCP

عرض المستودع

GitHub Workflow Status (with event) PyPI - Downloads

PyGhidra-MCP - خادم بروتوكول سياق النموذج (MCP) لـ Ghidra

نظرة عامة

pyghidra-mcp هو خادم بروتوكول سياق النموذج (MCP) يعمل من سطر الأوامر، يجلب القوة التحليلية الكاملة لـ Ghidra، وهي مجموعة قوية لهندسة البرمجيات العكسية (SRE)، إلى عالم الوكلاء الأذكياء والأدوات القائمة على نماذج اللغة الكبيرة (LLM). يعمل كجسر بين ProgramAPI و FlatProgramAPI الخاصين بـ Ghidra إلى بايثون باستخدام pyghidra و jpype، ثم يعرض هذه الوظائف عبر بروتوكول سياق النموذج.

MCP هو واجهة موحدة تسمح لنماذج اللغة وأدوات التطوير (مثل VS Code) والوكلاء المستقلين بالوصول إلى سياق منظم، واستدعاء الأدوات، والتعاون بذكاء. فكر في MCP على أنه الجسر بين أدوات التحليل القوية ونظام LLM البيئي.

مع pyghidra-mcp، يصبح Ghidra خلفية ذكية - جاهزة للاستجابة لاستعلامات غنية بالسياق، وأتمتة مهام هندسة عكسية عميقة، والتكامل مع سير العمل المعزز بالذكاء الاصطناعي.

يدعم pyghidra-mcp الآن وضعين للتشغيل:

  • وضع headless للتحليل والأتمتة عبر CLI
  • وضع --gui، الذي يطلق Ghidra عبر pyghidra-mcp ويشارك حالة البرنامج الحية مع واجهة المستخدم الرسومية قيد التشغيل

[!ملاحظة] هذا المشروع التجريبي قيد التطوير النشط. نحن نرحب بتعليقاتك، وتقارير الأخطاء، وطلبات الميزات، والمساهمات البرمجية.

MCP آخر لـ Ghidra؟

نعم، ghidra-mcp الأصلي رائع. لكن pyghidra-mcp يتبع نهجًا مختلفًا:

  • 🐍 بدون واجهة رسومية أولاً، مع قدرة على الواجهة – يعمل بالكامل عبر CLI لأتمتة انسيابية، أو قم بإطلاق Ghidra باستخدام --gui عندما تحتاج إلى تنقل وتحرير حي في الواجهة.
  • 🔁 مُصمم للأتمتة – مثالي للتكامل مع LLMs وخطوط أنابيب CI والأدوات التي تحتاج سلوكًا متكررًا.
  • ✅ متوافق مع CI/CD – مبني على اختبارات وحدة واختبارات تكامل قوية لكل من جلسات العميل والخادم.
  • 🚀 بدء تشغيل سريع – يسمح بدء التشغيل غير المتزامن للخادم ببدء معالجة الطلبات بينما لا تزال الملفات الثنائية تُحلل في الخلفية. يدعم الإطلاق السريع من سطر الأوامر بأقل إعداد.
  • 📦 تحليل على مستوى المشروع – يتيح إجراء هندسة عكسية متزامنة لجميع الملفات الثنائية في مشروع Ghidra
  • 🤖 جاهز للوكلاء – مبني لسير العمل القائمة على الوكلاء الأذكياء وأتمتة الهندسة العكسية على نطاق واسع.
  • 🔍 بحث دلالي في الكود – يستخدم التضمينات المتجهة (عبر ChromaDB) لتمكين البحث السريع والغامض عبر الدوال المفككة والتعليقات والرموز - مثالي لاستكشاف الكود الزائف C والفرز القائم على الوكلاء.

هذا المشروع يوفر تجربة قائمة على بايثون أولاً مُحسّنة للتطوير المحلي والبيئات بدون واجهة رسومية وسير عمل قابل للاختبار.

رسومات بيانية للإعداد

كيف ترتبط القطع```mermaid

flowchart LR subgraph Clients["Clients"] Agent["MCP host / agent"] Cli["pyghidra-mcp-cli"] User["Ghidra user"] end

root@kitploit:~
subgraph Process["pyghidra-mcp process"]
    Transport["stdio or streamable-http"]
    Tools["MCP tools"]
    Context["PyGhidra context"]
end

Project["Ghidra project<br/>.gpr / .rep"]
Artifacts["MCP artifacts<br/>ChromaDB + GZF cache"]
Gui["Ghidra GUI / CodeBrowser<br/>only with --gui"]

Agent -->|"stdio or HTTP"| Transport
Cli -->|"HTTP only"| Transport
Transport --> Tools
Tools --> Context
Context --> Project
Context --> Artifacts
Context -.-> Gui
User -.-> Gui
Gui -.-> Project
root@kitploit:~
### اختيار الوضع```mermaid
flowchart TD
    Start["What do you need?"]
    Start --> Headless["Agent or automation only"]
    Start --> GuiNeed["Live Ghidra GUI control"]
    Start --> Terminal["Interactive terminal client"]

    Headless --> Stdio["pyghidra-mcp -t stdio<br/>or -t streamable-http"]
    GuiNeed --> GuiMode["pyghidra-mcp --gui<br/>--transport streamable-http<br/>--project-path project.gpr"]
    Terminal --> HttpServer["Start pyghidra-mcp<br/>--transport streamable-http"]
    HttpServer --> CliMode["Run pyghidra-mcp-cli commands"]
  • Headless MCP: استخدم stdio لمضيفي MCP المحليين، أو streamable-http عندما يحتاج عدة عملاء إلى نفس مشروع Ghidra طويل الأمد.
  • GUI mode: يقوم pyghidra-mcp بتشغيل Ghidra، وفتح المشروع، وكشف أدوات إضافية لتوجيه CodeBrowser في نفس JVM.
  • CLI client: pyghidra-mcp-cli هو عميل HTTP. ابدأ خادم streamable-http أولاً، ثم أصدر أوامر طرفية ضد ذلك الخادم الجاري.
الهندسة المعمارية التفصيلية وسطح الأداة```mermaid flowchart TD subgraph Clients Agent["LLM / MCP host"] Cli["pyghidra-mcp-cli"] Automation["scripts and CI"] end
root@kitploit:~
subgraph Transports
    Stdio["stdio"]
    Http["streamable-http"]
    Sse["sse legacy"]
end

subgraph Server["pyghidra-mcp server"]
    FastMcp["FastMCP tool server"]
    Context["PyGhidra context"]
    Indexing["background analysis and Chroma indexing"]

    subgraph Tools["MCP tools"]
        Analysis["decompile, xrefs, bytes, callgraph"]
        Search["symbols, strings, code"]
        ProjectOps["import, delete, metadata, list binaries"]
        Edits["rename function, rename variable, set type, set prototype, set comment"]
        GuiOnly["GUI only: open program, goto, list open programs, set current program"]
    end
end

subgraph GhidraRuntime["Ghidra runtime"]
    PyGhidra["pyghidra"]
    Jpype["JPype shared JVM"]
    Project["Ghidra project"]
    Programs["program databases"]
    CodeBrowser["Ghidra GUI / CodeBrowser"]
end

Agent --> Stdio
Agent --> Http
Automation --> Stdio
Automation --> Http
Automation --> Sse
Cli --> Http

Stdio --> FastMcp
Http --> FastMcp
Sse --> FastMcp

FastMcp --> Context
Context --> PyGhidra
PyGhidra --> Jpype
Jpype --> Project
Project --> Programs
Context --> Indexing
Indexing --> Search

FastMcp --> Tools
Tools --> Context
GuiOnly -.-> CodeBrowser
Context -.-> CodeBrowser
root@kitploit:~
</details>

## المحتويات

- [PyGhidra-MCP - خادم بروتوكول سياق نموذج Ghidra](#pyghidra-mcp---ghidra-model-context-protocol-server)
    - [نظرة عامة](#overview)
  - [هل هناك أداة MCP أخرى لـ Ghidra؟](#yet-another-ghidra-mcp)
  - [رسوم بيانية للإعداد](#setup-diagrams)
    - [كيفية اتصال المكونات](#how-the-pieces-connect)
    - [اختيار وضع التشغيل](#choosing-a-mode)
  - [المحتويات](#contents)
  - [بدء الاستخدام](#getting-started)
  - [مُحسّن للوكلاء](#optimized-for-agents)
  - [عميل واجهة الأوامر](#cli-client)
    - [التثبيت](#installation)
    - [بداية سريعة مع واجهة الأوامر](#quick-start-with-cli)
  - [إنشاء المشاريع وإدارتها وفتح المشاريع الحالية](#project-creation-management-and-opening-existing-projects)
    - [إنشاء مشاريع جديدة](#creating-new-projects)
      - [هيكل المشروع المستقل](#self-contained-project-structure)
      - [إنشاء مشروع أساسي](#basic-project-creation)
      - [إنشاء مشروع مخصص](#custom-project-creation)
      - [إنشاء مشاريع متعددة ذات صلة](#creating-multiple-related-projects)
    - [فتح مشاريع Ghidra الحالية](#opening-existing-ghidra-projects)
      - [الفتح عبر ملف .gpr](#opening-by-gpr-file)
    - [وضع الواجهة الرسومية](#gui-mode)
    - [الإعدادات الافتراضية للبدء والمشاريع الكبيرة](#startup-defaults-and-large-projects)
  - [التطوير](#development)
    - [الإعداد](#setup)
    - [الاختبار والجودة](#testing-and-quality)
  - [API](#api)
    - [الأدوات](#tools)
      - [العمليات الدفعية](#batch-operations)
      - [أدوات القراءة / التحليل](#read--analysis-tools)
      - [عمليات المشروع](#project-operations)
      - [أدوات التعديل / التغيير](#edit--mutation-tools)
      - [أدوات التحكم في الواجهة الرسومية (فقط `--gui`)](#gui-control-tools---gui-only)
  - [الاستخدام](#usage)
    - [تعيين الملفات الثنائية باستخدام Docker](#mapping-binaries-with-docker)
    - [الاستخدام مع OpenWeb-UI و MCPO](#using-with-openweb-ui-and-mcpo)
      - [مع `uvx`](#with-uvx)
      - [مع Docker](#with-docker)
    - [الإدخال/الإخراج القياسي (stdio)](#standard-inputoutput-stdio)
      - [Python](#python)
      - [Docker](#docker)
    - [HTTP قابل للتيار](#streamable-http)
      - [Python](#python-1)
      - [Docker](#docker-1)
    - [أحداث يرسلها الخادم (SSE)](#server-sent-events-sse)
      - [Python](#python-2)
      - [Docker](#docker-2)
  - [التكاملات](#integrations)
    - [Claude Desktop](#claude-desktop)
  - [الإلهام](#inspiration)
  - [المساهمة والمجتمع والتشغيل من المصدر](#contributing-community-and-running-from-source)
    - [سير عمل المساهم](#contributor-workflow)

## بدء الاستخدام

قم بتشغيل [حزمة Python](https://pypi.org/p/pyghidra-mcp) كأمر واجهة أوامر باستخدام [`uv`](https://docs.astral.sh/uv/guides/tools/):```bash
uvx pyghidra-mcp # Creates pyghidra_mcp_projects directory by default
تنزيل الأداة

لإطلاق و التحكم في واجهة Ghidra الرسومية المباشرة من MCP، استخدم --gui مع streamable-http:```bash uvx pyghidra-mcp
--gui
--transport streamable-http
--host 127.0.0.1
--port 8000
--project-path /absolute/path/to/ghidra-projects
--project-name my_project

root@kitploit:~
> [!IMPORTANT]
> `--gui` يقوم بتشغيل Ghidra من خلال `pyghidra-mcp`. لا يربط بـ Ghidra خارجي قيد التشغيل بالفعل.

أو، قم بتشغيله كـ [حاوية Docker](https://ghcr.io/clearbluejar/pyghidra-mcp):```bash
docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp -t stdio

محسّن للوكلاء

يحافظ pyghidra-mcp على سطح MCP ضيقًا عن قصد بحيث ينفق عملاء الوكلاء عددًا أقل من الرموز على اكتشاف الأدوات واختيار الوسائط.

  • أوصاف مختصرة للأدوات: يتم الاحتفاظ بـ docstrings لأدوات MCP مضغوطة بحيث تبقى مخططات أدوات FastMCP صغيرة ورخيصة الإرسال إلى النماذج.
  • انضباط السياق: تعيد الأدوات بيانات منظمة مركزة بدلاً من تفريغ سياق البرنامج بالكامل افتراضيًا. يتم تشكيل نتائج إزالة التجميع والبحث عن الرموز والمراجع المتقاطعة لدعم التحليل التكراري بدلاً من استجابة واحدة كبيرة.
  • أدوات واجهة المستخدم الرسومية فقط عند الحاجة: يتم كشف عناصر التحكم الخاصة بواجهة المستخدم الرسومية فقط مثل open_program_in_gui و list_open_programs و set_current_program و goto فقط عند بدء تشغيل الخادم بـ --gui.
  • واجهة سطر الأوامر اختيارية: إذا لم تكن MCP هي الواجهة المفضلة لديك، فإن pyghidra-mcp-cli يوفر عميل سطر أوامر مباشر عبر HTTP مع أوامر مجمعة لسير العمل الشائعة للتحرير والتحليل.

يحافظ هذا على الخادم الافتراضي قابلاً للاستخدام لوكلاء LLM وتكاملات بيئات التطوير المتكاملة والأتمتة دون كشف سطح أدوات غير ضروري أو عناصر تحكم خاصة بواجهة المستخدم الرسومية فقط في الجلسات بدون واجهة رسومية.

عميل سطر الأوامر

لتجربة سطر أوامر أكثر تفاعلية، يمكنك استخدام حزمة pyghidra-mcp-cli المنفصلة، التي توفر واجهة سهلة الاستخدام للتفاعل مع خادم pyghidra-mcp قيد التشغيل.

التثبيت

قم بتثبيت عميل سطر الأوامر باستخدام uv (موصى به):```bash uvx pyghidra-mcp-cli

root@kitploit:~
أو قم بالتثبيت باستخدام pip:```bash
pip install pyghidra-mcp-cli

بداية سريعة مع CLI

  1. ابدأ الخادم (في طرفية واحدة):```bash pyghidra-mcp --transport streamable-http /bin/ls
root@kitploit:~
2. **استخدم واجهة CLI** (في محطة طرفية أخرى):```bash
# List available binaries
pyghidra-mcp-cli list binaries

# Decompile a function
pyghidra-mcp-cli decompile --binary ls main

# Decompile with callees, referenced strings, and cross-references
pyghidra-mcp-cli decompile --binary ls main --callees --strings --xrefs

# Search for symbols (supports regex patterns)
pyghidra-mcp-cli search symbols --binary ls printf -l 10

[!NOTE] يتصل واجهة سطر الأوامر (CLI) بـ pyghidra-mcp عبر HTTP لتجنب وقت بدء التشغيل الذي يتراوح بين 10-60 ثانية لإنشاء عملية Ghidra جديدة لكل أمر. راجع CLI README للحصول على التوثيق الكامل.

إنشاء المشاريع وإدارتها وفتح المشاريع الحالية

إنشاء مشاريع جديدة

يمكنك إنشاء مشاريع جديدة بعدة طرق، حسب سير عملك:

هيكل المشروع المستقل ذاتيًا

يقوم pyghidra-mcp بإنشاء هيكل مشروع مستقل ذاتيًا حيث يكون لكل مشروع مشروع Ghidra خاص به وملفات pyghidra-mcp. يضمن ذلك العزلة الكاملة وسهولة إدارة المشروع.

إنشاء مشروع أساسي```bash

Create a new project with default settings

pyghidra-mcp

Creates:

$ tree pyghidra_mcp_projects/ pyghidra_mcp_projects/ ├── my_project.gpr ├── my_project-pyghidra-mcp │ ├── chromadb │ └── gzfs └── my_project.rep

root@kitploit:~
#### إنشاء مشروع مخصص```bash
# Create project with custom name and location
pyghidra-mcp --project-path ~/analysis/malware_study --project-name malware_analysis

$ tree ~/analysis/ 
/home/vscode/analysis/
└── malware_study
    ├── malware_analysis.gpr
    ├── malware_analysis-pyghidra-mcp
    │   ├── chromadb
    │   └── gzfs
    └── malware_analysis.rep

إنشاء مشاريع متعددة مرتبطة```bash

Create separate projects for different analysis focuses

mkdir ~/reverse_engineering_workspace

Project for suspicious binaries

pyghidra-mcp --project-path ~/reverse_engineering_workspace/suspicious_binaries --project-name suspicious_analysis

Project for packed malware

pyghidra-mcp --project-path ~/reverse_engineering_workspace/packed_malware --project-name packed_analysis

root@kitploit:~
### فتح مشاريع Ghidra الموجودة

إذا كان لديك مشاريع Ghidra موجودة (ملفات `.gpr`)، يمكنك فتحها مباشرة باستخدام `pyghidra-mcp`:

#### الفتح عبر ملف `.gpr````bash
# Open existing Ghidra project (project name derived from filename)
pyghidra-mcp --project-path ~/existing/ghidra/my_research.gpr

# Result: ~/existing/ghidra/my_research-pyghidra-mcp/
# └── chromadb/, gzfs/ (pyghidra-mcp additions)

وضع واجهة المستخدم الرسومية

استخدم وضع واجهة المستخدم الرسومية عندما تريد أن تعمل إجراءات MCP على نفس كائنات البرنامج الحية التي يعرضها Ghidra.

  • يتطلب --gui استخدام --transport streamable-http (أو --transport http كاسم مستعار)
  • يمكن أن يكون --project-path دليل مشروع بالإضافة إلى --project-name، أو ملف .gpr موجود. يتم إنشاء المشاريع المفقودة تلقائيًا.
  • يتم تشغيل Ghidra بواسطة pyghidra-mcp، الذي يحافظ على معاملات واجهة المستخدم الرسومية و MCP في نفس JVM
  • يتم كشف الأدوات الخاصة بواجهة المستخدم الرسومية فقط عند التشغيل باستخدام --gui

مثال:

root@kitploit:~
pyghidra-mcp --gui --transport streamable-http --project-path /path/to/project --project-name MyProject
``````bash
pyghidra-mcp \
  --gui \
  --transport streamable-http \
  --project-path /absolute/path/to/my_research.gpr

الوضع الرسومي هو الاختيار الصحيح عندما تريد:

  • فتح أو التبديل بين البرامج في CodeBrowser
  • التنقل في القائمة إلى دالة أو عنوان
  • إعادة تسمية الدوال أو إضافة تعليقات ورؤية تلك التغييرات فورًا في Ghidra

الإعدادات الافتراضية للبدء والمشاريع الكبيرة

pyghidra-mcp لا يتطلب --wait-for-analysis افتراضيًا. يمكن للخادم بدء التشغيل بينما يستمر التحليل وفهرسة MCP في الخلفية.

هذا مهم للمشاريع الكبيرة:

  • بدء مشروع يحتوي على العديد من الملفات الثنائية لا يحتاج إلى حظر بدء تشغيل الخادم
  • --wait-for-analysis متاح عندما تريد مشروعًا محللًا بالكامل قبل تقديم الطلبات
  • بالنسبة للمشاريع الكبيرة الحالية، توقع أن تختلف حالة التحليل وفهرسة MCP حسب الملف الثنائي

القيود الحالية:

  • حالة تحليل Ghidra وحالة فهرسة MCP منفصلتان
  • يمكن أن يكون الملف الثنائي محللًا بالكامل في Ghidra بينما لا تزال search_strings أو search_code الدلالية تنتظر فهرسة MCP
  • هذا أكثر وضوحًا عند فتح مشاريع كبيرة موجودة

عمليًا:

  • لا يزال بإمكان التفكيك والتنقل وإعادة التسمية والتعليقات العمل لملف ثنائي بينما تلحق ميزات البحث كثيفة الفهرسة
  • إذا كانت زمنية بدء التشغيل أهم من الاستعداد الفوري للبحث، فاحتفظ بالافتراضي --no-wait-for-analysis
  • إذا كان الاستعداد الفوري أهم من وقت بدء التشغيل، فاستخدم --wait-for-analysis

التطوير

يستخدم هذا المشروع Makefile لتبسيط التطوير والاختبار. يُستخدم ruff للتحقق من الصياغة وتنسيق الكود، وتُستخدم خطافات pre-commit لضمان جودة الكود.

الإعداد

  1. تثبيت uv: إذا لم يكن لديك uv مثبتًا، يمكنك تثبيته باستخدام pip:

    root@kitploit:~
    pip install uv
    

    أو اتبع دليل تثبيت uv الرسمي: https://docs.astral.sh/uv/install/

  2. إنشاء بيئة افتراضية وتثبيت التبعيات:

    root@kitploit:~
    make dev-setup
    source ./.venv/bin/activate
    
  3. تعيين متغير بيئة Ghidra: قم بتنزيل وتثبيت Ghidra، ثم عيّن متغير البيئة GHIDRA_INSTALL_DIR إلى دليل تثبيت Ghidra الخاص بك.

    root@kitploit:~
    # For Linux / Mac
    export GHIDRA_INSTALL_DIR="/path/to/ghidra/"
    
    # For Windows PowerShell
    [System.Environment]:https://raw.githubusercontent.com/clearbluejar/pyghidra-mcp/HEAD/:SetEnvironmentVariable(%27GHIDRA_INSTALL_DIR%27,%27C:%5Cpath%5Cto%5Cghidra%27)
    

الاختبار والجودة

يوفر Makefile عدة أهداف للاختبار وضمان الجودة:

  • make run: تشغيل خادم MCP.
  • make test: تشغيل مجموعة الاختبارات الكاملة (وحدة وتكامل).
  • make test-unit: تشغيل اختبارات الوحدة.
  • make test-integration: تشغيل اختبارات التكامل.
  • make test-integration-fast: تشغيل اختبار الدخان الخفيف للتكامل المستخدم بواسطة pre-commit.
  • make test-integration-gui: تشغيل اختبارات تكامل الواجهة الرسومية. يتطلب تثبيت Ghidra يعمل ودعم واجهة رسومية.
  • make lint: التحقق من نمط الكود باستخدام ruff.
  • make format: تنسيق الكود باستخدام ruff.
  • make typecheck: تشغيل فحوصات ثابتة خفيفة باستخدام ruff.
  • make check: تشغيل جميع فحوصات الجودة.
  • make dev: تشغيل سير عمل التطوير (تنسيق وفحص).
  • make build: بناء حزم التوزيع.
  • make clean: تنظيف مخرجات البناء وذاكرة التخزين المؤقت.

التقسيم الموصى به:

  • pre-commit: ruff وpyright واختبارات الوحدة واختبار دخان تكامل خفيف واحد
  • GitHub Actions: تغطية تكامل كاملة بدون واجهة رسومية على Linux، وواجهة رسومية على Linux تحت Xvfb، وتغطية CLI، واختبارات دخان على macOS الحالي
  • CI المجدول: تغطية توافق مع macOS / Ghidra الأقدم
  • محلي / يدوي: تصحيح أخطاء واجهة رسومية أوسع خاصة بالبيئة وفحوصات سلامة الإصدارات

API

الأدوات

تمكين LLMs من تنفيذ الإجراءات وإجراء العمليات الحسابية المحددة والتفاعل مع الخدمات الخارجية.

العمليات الجماعية

تقبل decompile_function وlist_xrefs هدفًا واحدًا أو قائمة من الأهداف، مما يقلل من الرحلات ذهابًا وإيابًا عند تحليل سلاسل الاستدعاء أو رموز متعددة في وقت واحد.```jsonc // Decompile three functions in one call, with callees and xrefs attached { "binary_name": "firmware.bin", "name_or_address": ["main", "init_hardware", "0x08001234"], "include_callees": true, "include_xrefs": true }

// Get cross-references for multiple symbols at once { "binary_name": "firmware.bin", "name_or_address": ["malloc", "free", "realloc"] }

root@kitploit:~
يتم إرجاع الأخطاء لكل عنصر في نفس السطر (لا تزال الأهداف الأخرى تنجح):```jsonc
[
  {"name": "main", "code": "void main() { ... }", "callees": ["init_hardware"], "xrefs": [...]},
  {"name": "0xdeadbeef", "code": "", "error": "Function or symbol '0xdeadbeef' not found."}
]

أدوات القراءة / التحليل

  • search_code(binary_name: str, query: str, limit: int = 5, offset: int = 0, search_mode: str = "semantic", include_full_code: bool = True, preview_length: int = 500, similarity_threshold: float = 0.0): ابحث في الكود الزائف المفكك باستخدام البحث المتجه الدلالي أو المطابقة الحرفية.

  • list_xrefs(binary_name: str, name_or_address: str | list[str]): قائمة المراجع المتقاطعة لدالة (دوال) أو رمز (رموز) أو عنوان (عناوين). يقبل هدفًا واحدًا أو قائمة للبحث الدفعي.

  • gen_callgraph(binary_name: str, function_name: str, direction: str = "calling", display_type: str = "flow", condense_threshold: int = 50, top_layers: int = 3, bottom_layers: int = 3, max_run_time: int = 120): يُنشئ رسمًا بيانيًا للاستدعاءات بصيغة MermaidJS لدالة محددة. يدعم كلا اتجاهي "calling" (الدوال التي يستدعيها الهدف) و"called" (الدوال التي تستدعي الهدف) مع أنواع عرض متعددة.

  • decompile_function(binary_name: str, name_or_address: str | list[str], include_callees: bool = False, include_strings: bool = False, include_xrefs: bool = False, timeout_sec: int = 30): فك ترجمة دالة (دوال) بالاسم أو العنوان. يقبل هدفًا واحدًا أو قائمة للفك الدفعي. تُرفق علامات الاستجابة الغنية بالمستدعين والسلاسل و/أو المراجع المتقاطعة بكل نتيجة. timeout_sec يُطبق لكل هدف ويُحدد كل محاولة فك بشكل مستقل.

  • list_exports(binary_name: str, query: str = ".*", offset: int = 0, limit: int = 25): يسرد جميع الدوال والرموز المصدرة من ملف ثنائي محدد (التعبير النمطي مدعوم للاستعلام).

  • list_imports(binary_name: str, query: str = ".*", offset: int = 0, limit: int = 25): يسرد جميع الدوال والرموز المستوردة لملف ثنائي محدد (التعبير النمطي مدعوم للاستعلام).

  • read_bytes(binary_name: str, address: str, size: int = 32): يقرأ البايتات الخام من الذاكرة في عنوان محدد. قد تتضمن العناوين السداسية العشرية البادئة 0x أو تحذفها.

  • search_strings(binary_name: str, query: str, limit: int = 100): يبحث عن السلاسل داخل ملف ثنائي.

  • search_symbols_by_name(binary_name: str, query: str, functions_only: bool = False, offset: int = 0, limit: int = 25): يبحث عن الرموز داخل ملف ثنائي بالاسم. يدعم أنماط التعبير النمطي (مثل ^main$, func.*one) مع مطابقة غير حساسة لحالة الأحرف، أو استعلامات النص الجزئي البسيطة. عيّن functions_only=True لاستبعاد التصنيفات والمتغيرات والرموز الأخرى غير الدوال.

عمليات المشروع

  • import_binary(binary_path: str): يستورد ملفًا ثنائيًا من مسار محدد إلى مشروع Ghidra الحالي. إذا كان المسار دليلاً، فسيقوم بفحص واستيراد جميع ملفات الثنائيات المدعومة بشكل متكرر، مع الحفاظ على هيكل الدليل داخل مشروع Ghidra.

  • list_project_binaries(): يسرد الملفات الثنائية في مشروع Ghidra الحالي. في وضع الواجهة الرسومية، يشمل ذلك الملفات الثنائية للمشروع الموجودة على القرص حتى لو لم تكن مفتوحة حاليًا في CodeBrowser.

  • list_project_binary_metadata(binary_name: str): يسترجع بيانات وصفية مفصلة لملف ثنائي محدد، بما في ذلك المعمارية والمترجم وتنسيق الملف القابل للتنفيذ ومقاييس التحليل وتجزئات الملف.

  • delete_project_binary(binary_name: str): يحذف ملفًا ثنائيًا (برنامجًا) من مشروع Ghidra.

أدوات التعديل / التحوير

  • rename_function(binary_name: str, name_or_address: str, new_name: str): يعيد تسمية دالة بالاسم أو العنوان. في وضع الواجهة الرسومية، يعمل هذا كمعاملة مباشرة في Ghidra ويُحدّث البرنامج المفتوح.

  • rename_variable(binary_name: str, function_name_or_address: str, variable_name: str, new_name: str): يعيد تسمية معامل دالة أو متغير محلي بالاسم الدقيق داخل دالة محددة. إذا كان الاسم مفقودًا أو غامضًا داخل تلك الدالة، ترجع الأداة خطأ بدلاً من التخمين. في وضع الواجهة الرسومية، يعمل هذا كمعاملة مباشرة في Ghidra ويُحدّث البرنامج المفتوح.

  • set_variable_type(binary_name: str, function_name_or_address: str, variable_name: str, type_name: str): يحدد نوع البيانات لمعامل دالة أو متغير محلي بالاسم الدقيق داخل دالة محددة. إذا كان الاسم مفقودًا أو غامضًا داخل تلك الدالة، ترجع الأداة خطأ بدلاً من التخمين. يتم تحليل type_name باستخدام محلل أنواع Ghidra مقابل مدير أنواع البرنامج.

  • set_function_prototype(binary_name: str, function_name_or_address: str, prototype: str): يحدد نموذج دالة من سلسلة توقيع كاملة. تشغل الأداة دائمًا النموذج عبر محلل التوقيع الأصلي في Ghidra وتعيد خطأ المحلل أو التطبيق إذا كان النموذج غير صالح.

  • set_comment(binary_name: str, target: str, comment: str, comment_type: str): يحدد تعليق دالة/مفكك أو تعليق قائمة. يمكن أن تكون أهداف تعليق القائمة عناوين أو رموزًا أو دوالاً. قيم comment_type المدعومة هي decompiler، plate، pre، eol، post، و repeatable.

أدوات التحكم في الواجهة الرسومية (فقط مع --gui)

هذه الأدوات متاحة فقط عند بدء pyghidra-mcp مع --gui وتتحكم في ما تعرضه الواجهة الرسومية بدلاً من تعديل بيانات المشروع مباشرة:

  • list_open_programs(): يسرد البرامج المفتوحة حاليًا في واجهة Ghidra الرسومية.
  • open_program_in_gui(binary_name: str, new_window: bool = True): يفتح ملفًا ثنائيًا للمشروع في CodeBrowser. افتراضيًا، يفتح نافذة CodeBrowser جديدة. عيّن new_window=false لإعادة استخدام CodeBrowser مرئي عند الإمكان.
  • set_current_program(binary_name: str): يجعل برنامجًا مفتوحًا هو البرنامج النشط/الحالي في سياق أداة الواجهة الرسومية الرئيسية.
  • goto(binary_name: str, target: str, target_type: str): يوجه واجهة Ghidra الرسومية إلى عنوان أو دالة. يجب أن تكون target_type إما address أو function.

الاستخدام

تم نشر هذه الحزمة من بايثون على PyPI باسم pyghidra-mcp ويمكن تثبيتها وتشغيلها باستخدام pip، pipx، uv، poetry، أو أي مدير حزم بايثون.```text $ uvx pyghidra-mcp --help Usage: pyghidra-mcp [OPTIONS] [INPUT_PATHS]...

PyGhidra Command-Line MCP server

Options: -v, --version Show version and exit. -t, --transport [stdio|streamable-http|sse|http] Transport protocol. SSE is deprecated; use streamable-http instead. [default: stdio] -p, --port INTEGER Port for HTTP-based transports. [default: 8000] -o, --host TEXT Host for HTTP-based transports. [default: 127.0.0.1] --project-path PATH Directory for a pyghidra-mcp project or an existing Ghidra .gpr file. [default: pyghidra_mcp_projects] --project-name TEXT Ghidra project name. Ignored for .gpr paths. [default: my_project] --threaded / --no-threaded Allow threaded analysis. [default: threaded] --max-workers INTEGER Number of analysis workers; 0 means CPU count. [default: 0] --wait-for-analysis / --no-wait-for-analysis Wait for initial analysis before starting. [default: no-wait-for-analysis] --gui / --no-gui Launch Ghidra GUI in-process and serve MCP against GUI-open programs. Cannot attach to an already-running external Ghidra process. [default: no-gui] --list-project-binaries List ingested project binaries and exit. --delete-project-binary TEXT Delete a project binary by name and exit. --force-analysis / --no-force-analysis Force a new binary analysis each run. [default: no-force-analysis] --verbose-analysis / --no-verbose-analysis Verbose logging for analysis. [default: no-verbose-analysis] --no-symbols / --with-symbols Turn off symbols for analysis. [default: with-symbols] --sym-file-path PATH Single PDB symbol file for one binary. -s, --symbols-path PATH Local symbols directory. --gdt PATH Path to GDT files. May be specified multiple times. --program-options PATH JSON file with Ghidra program options. --gzfs-path PATH Location to store GZFs of analyzed binaries. -h, --help Show this message and exit.

root@kitploit:~
### ربط البرامج الثنائية مع Docker

عند استخدام حاوية Docker، يمكنك ربط دليل محلي يحتوي على برامجك الثنائية في مساحة عمل الحاوية. يتيح ذلك لـ `pyghidra-mcp` تحليل ملفاتك.```bash
# Create and populate the new directory
mkdir -p ./binaries
cp /path/to/your/binaries/* ./binaries/

# Run the Docker container with volume mapping
docker run -i --rm \
  -v "$(pwd)/binaries:/binaries" \
  ghcr.io/clearbluejar/pyghidra-mcp \
  /binaries/*

الاستخدام مع OpenWeb-UI و MCPO

يمكنك دمج pyghidra-mcp مع OpenWeb-UI باستخدام MCPO، وهو وكيل تحويل MCP إلى OpenAPI. يتيح ذلك عرض أدوات pyghidra-mcp من خلال واجهة RESTful قياسية، مما يجعلها في متناول الواجهات الويب والأدوات الأخرى.

https://github.com/user-attachments/assets/3d56ea08-ed2d-471d-9ed2-556fb8ee4c95

باستخدام uvx

يمكنك تشغيل pyghidra-mcp و mcpo معًا باستخدام uvx:```bash uvx mcpo --
pyghidra-mcp /bin/ls

root@kitploit:~
#### مع Docker

يمكنك دمج mcpo مع Docker:```bash
uvx mcpo -- docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp /bin/ls

الإدخال/الإخراج القياسي (stdio)

يتيح نقل stdio الاتصال عبر تيارات الإدخال والإخراج القياسية. هذا مفيد بشكل خاص للتكاملات المحلية وأدوات سطر الأوامر. راجع المواصفات لمزيد من التفاصيل.

Python```bash

pyghidra-mcp

root@kitploit:~
بشكل افتراضي، سيتم تشغيل حزمة Python في وضع `stdio`. نظرًا لأنها تستخدم تدفقات الإدخال والإخراج القياسية، سيبدو أن الأداة معلقة بدون أي مخرجات، ولكن هذا متوقع.

#### Docker

تم نشر هذا الخادم في GitHub's Container Registry ([ghcr.io/clearbluejar/pyghidra-mcp](http://ghcr.io/clearbluejar/pyghidra-mcp))```
docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp -t stdio

بشكل افتراضي، يبدأ حاوية Docker خادم streamable-http، لذا قم بتضمين -t stdio بعد اسم الصورة وشغّلها باستخدام -i لوضع الإدخال/الإخراج التفاعلي.

Streamable HTTP

يتيح Streamable HTTP الاستجابات المتدفقة عبر JSON RPC عبر طلبات HTTP POST. اطلع على المواصفات لمزيد من التفاصيل.

بشكل افتراضي، يستمع الخادم على http://127.0.0.1:8000/mcp لاتصالات العملاء. استخدم --host / --port أو متغيرات البيئة MCP_HOST / MCP_PORT لتغيير عنوان الربط. يجب أن يكون الخادم قيد التشغيل ليتمكن العملاء من الاتصال به.

Python```bash

pyghidra-mcp -t streamable-http

root@kitploit:~
افتراضيًا، سيتم تشغيل حزمة Python في وضع `stdio`، لذلك ستحتاج إلى تضمين `-t streamable-http`.

يستخدم وضع واجهة المستخدم الرسومية هذا النقل:```bash
pyghidra-mcp \
  --gui \
  --transport streamable-http \
  --project-path /absolute/path/to/my_project.gpr

Docker```

docker run -p 8000:8000 ghcr.io/clearbluejar/pyghidra-mcp

root@kitploit:~
### أحداث يرسلها الخادم (SSE)

> [!تحذير]
> يعتبر مجتمع MCP أن هذا البروتوكول الناقل قديم ويُستخدم للتوافق مع الإصدارات السابقة. يُوصى باستخدام [HTTP القابل للبث](#streamable-http) كبديل.

يتيح نقل SSE إرسال تيارات من الخادم إلى العميل باستخدام أحداث يرسلها الخادم للاتصال من العميل إلى الخادم ومن الخادم إلى العميل. راجع [المواصفات](https://modelcontextprotocol.io/docs/concepts/transports#server-sent-events-sse) لمزيد من التفاصيل.

افتراضيًا، يستمع الخادم على [http://127.0.0.1:8000/sse](http://127.0.0.1:8000/sse) لاتصالات العميل. استخدم `--host` / `--port` أو متغيرات البيئة `MCP_HOST` / `MCP_PORT` لتغيير عنوان الربط. _يجب أن يكون الخادم قيد التشغيل حتى يتمكن العملاء من الاتصال به._

#### Python```bash
pyghidra-mcp -t sse

بشكل افتراضي، ستشغل حزمة Python في وضع stdio، لذا ستحتاج إلى تضمين -t sse.

Docker```

docker run -p 8000:8000 ghcr.io/clearbluejar/pyghidra-mcp -t sse

root@kitploit:~
## التكاملات

> [!NOTE]
> هذا القسم قيد التطوير. سنضيف قريبًا أمثلة لتكاملات محددة.

### Claude Desktop

أضف كتلة JSON التالية إلى ملف `claude_desktop_config.json` الخاص بك:```json
{
    "mcpServers": {
        "pyghidra-mcp": {
            "command": "uvx",
            "args": [
                "--from",
                "git+https://github.com/clearbluejar/pyghidra-mcp",
                "pyghidra-mcp",
                "--project-path",
                "/tmp/pyghidra", // or path to writeable directory
                "/bin/ls" //
            ],
            "env": {
                "GHIDRA_INSTALL_DIR": "/path/to/ghidra/ghidra_12.0_PUBLIC"
            }
        }
    }
}

الإلهام

استلهم هذا المشروع في تنفيذه وتصميمه من هذه المشاريع الرائعة:

  • GhidraMCP
  • semgrep-mcp
  • ghidrecomp
  • BinAssistMCP

المساهمة والمجتمع والتشغيل من المصدر

نعتقد أن مستقبل الهندسة العكسية هو وكالي وسياقي وقابل للتوسع.
pyghidra-mcp هي خطوة نحو هذا المستقبل — مما يجعل مشاريع Ghidra الكاملة متاحة للوكلاء الذكاء الاصطناعي وخطوط الأتمتة.

نحن نطور المشروع بنشاط ونرحب بالملاحظات والمشكلات والمساهمات.

[!NOTE] نحن نحب ملاحظاتك وتقارير الأخطاء وطلبات الميزات والكود الخاص بك.

سير عمل المساهم

إذا كنت تضيف أداة أو تكاملاً جديدًا، إليك سير العمل الموصى به:

  • سمِّ فرعك بالبادئة feature/ للإشارة إلى قدرة جديدة.
  • أضف أداتك باستخدام نفس النمط والبنية كالأدوات الموجودة في pyghidra/tools/.
  • اكتب اختبار تكامل يمارس أداتك باستخدام مثيل StdioClient. ضعه في tests/integration/.
  • وسّع الاختبار المتزامن بإضافة استدعاء لأداتك في tests/integration/test_concurrent_streamable_client.py.
  • قم بتشغيل make test و make format لضمان اجتياز تغييراتك لجميع الاختبارات والامتثال لقواعد التنسيق.

يضمن هذا الاتساق عبر قاعدة الكود ويساعدنا في الحفاظ على أدوات قوية وقابلة للتوسع لسير عمل الهندسة العكسية.


مصنوع بـ ❤️ بواسطة فريق PyGhidra-MCP