Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
pyghidra-mcp — Python Command-Line Ghidra MCP | Kitploit
उपकरण/GitHubGitHub/clearbluejar/pyghidra-mcp
Embedded Systems SecurityStatic AnalysisCode AnalysisReverse EngineeringDebuggersMalware AnalysisBinary AnalysisLearning & EducationAI-Assisted ReversingFirmware Analysis
GitHubclearbluejar/pyghidra-mcp

pyghidra-mcp

4045512 दिन पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Python Command-Line Ghidra MCP

रिपॉजिटरी देखें

GitHub Workflow Status (with event) PyPI - Downloads

PyGhidra-MCP - Ghidra मॉडल संदर्भ प्रोटोकॉल सर्वर

अवलोकन

pyghidra-mcp एक कमांड-लाइन मॉडल संदर्भ प्रोटोकॉल (MCP) सर्वर है जो Ghidra की पूर्ण विश्लेषणात्मक क्षमता, जो एक मजबूत सॉफ्टवेयर रिवर्स इंजीनियरिंग (SRE) सूट है, को बुद्धिमान एजेंटों और LLM-आधारित उपकरणों की दुनिया में लाता है। यह pyghidra और jpype का उपयोग करके Ghidra के ProgramAPI और FlatProgramAPI को Python से जोड़ता है, और फिर उस कार्यक्षमता को मॉडल संदर्भ प्रोटोकॉल के माध्यम से प्रस्तुत करता है।

MCP एक एकीकृत इंटरफ़ेस है जो भाषा मॉडलों, विकास उपकरणों (जैसे VS Code), और स्वायत्त एजेंटों को संरचित संदर्भ तक पहुँचने, उपकरणों को लागू करने, और बुद्धिमानी से सहयोग करने की अनुमति देता है। MCP को शक्तिशाली विश्लेषण उपकरणों और LLM पारिस्थितिकी तंत्र के बीच के पुल के रूप में सोचें।

pyghidra-mcp के साथ, Ghidra एक बुद्धिमान बैकएंड बन जाता है—जो संदर्भ-समृद्ध प्रश्नों का उत्तर देने, गहन रिवर्स इंजीनियरिंग कार्यों को स्वचालित करने, और AI-सहायक वर्कफ़्लो में एकीकृत होने के लिए तैयार है।

pyghidra-mcp अब दो ऑपरेटिंग मोड का समर्थन करता है:

  • headless मोड CLI-संचालित विश्लेषण और स्वचालन के लिए
  • --gui मोड, जो pyghidra-mcp के माध्यम से Ghidra लॉन्च करता है और चल रहे GUI के साथ लाइव प्रोग्राम स्थिति साझा करता है

[!NOTE] यह बीटा परियोजना सक्रिय विकास के अंतर्गत है। हम आपकी प्रतिक्रिया, बग रिपोर्ट, सुविधा अनुरोध और कोड का स्वागत करते हैं।

एक और Ghidra MCP?

हाँ, मूल ghidra-mcp शानदार है। लेकिन pyghidra-mcp एक अलग दृष्टिकोण लेता है:

  • 🐍 हेडलेस-प्रथम, GUI-सक्षम – स्ट्रीमलाइन स्वचालन के लिए पूरी तरह से CLI के माध्यम से चलाएँ, या जब आप लाइव GUI नेविगेशन और संपादन चाहते हैं तो --gui के साथ Ghidra लॉन्च करें।
  • 🔁 स्वचालन के लिए डिज़ाइन – LLMs, CI पाइपलाइनों और ऐसे उपकरणों के साथ एकीकरण के लिए आदर्श जिन्हें दोहराए जाने योग्य व्यवहार की आवश्यकता है।
  • ✅ CI/CD अनुकूल – क्लाइंट और सर्वर दोनों सत्रों के लिए मजबूत यूनिट और इंटीग्रेशन परीक्षणों के साथ निर्मित।
  • 🚀 त्वरित स्टार्टअप – एसिंक्रोनस स्टार्टअप सर्वर को अनुरोधों को संभालना शुरू करने देता है जबकि बाइनरी अभी भी पृष्ठभूमि में विश्लेषित की जा रही हैं। न्यूनतम सेटअप के साथ तेज़ कमांड-लाइन लॉन्चिंग का समर्थन करता है।
  • 📦 प्रोजेक्ट-व्यापी विश्लेषण – Ghidra प्रोजेक्ट में सभी बाइनरी के समवर्ती रिवर्स इंजीनियरिंग को सक्षम करता है
  • 🤖 एजेंट-तैयार – बुद्धिमान एजेंट-संचालित वर्कफ़्लो और बड़े पैमाने पर रिवर्स इंजीनियरिंग स्वचालन के लिए निर्मित।
  • 🔍 अर्थपूर्ण कोड खोज – डीकंपोज़्ड फ़ंक्शन, टिप्पणियों और प्रतीकों में तेज़, फजी लुकअप को सक्षम करने के लिए वेक्टर एम्बेडिंग (ChromaDB के माध्यम से) का उपयोग करता है - स्यूडो-C अन्वेषण और एजेंट-संचालित ट्रायेज के लिए एकदम सही।

यह परियोजना स्थानीय विकास, हेडलेस वातावरण और परीक्षण योग्य वर्कफ़्लो के लिए अनुकूलित एक Python-प्रथम अनुभव प्रदान करता है।

सेटअप आरेख

टुकड़े कैसे जुड़ते हैं```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"]
  • हेडलेस MCP: स्थानीय MCP होस्ट के लिए stdio का उपयोग करें, या जब कई क्लाइंट को एक ही लंबे समय तक चलने वाले Ghidra प्रोजेक्ट की आवश्यकता हो तो streamable-http का उपयोग करें।
  • GUI मोड: pyghidra-mcp Ghidra को लॉन्च करता है, प्रोजेक्ट खोलता है, और अतिरिक्त टूल्स को उजागर करता है जो उसी JVM में CodeBrowser को संचालित करते हैं।
  • CLI क्लाइंट: 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 Model Context Protocol Server](#pyghidra-mcp---ghidra-model-context-protocol-server)
    - [अवलोकन](#overview)
  - [एक और Ghidra MCP?](#yet-another-ghidra-mcp)
  - [सेटअप आरेख](#setup-diagrams)
    - [भाग कैसे जुड़ते हैं](#how-the-pieces-connect)
    - [मोड चुनना](#choosing-a-mode)
  - [विषय सूची](#contents)
  - [आरंभ करना](#getting-started)
  - [एजेंटों के लिए अनुकूलित](#optimized-for-agents)
  - [CLI क्लाइंट](#cli-client)
    - [स्थापना](#installation)
    - [CLI के साथ त्वरित आरंभ](#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 मोड](#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`)](#gui-control-tools---gui-only)
  - [उपयोग](#usage)
    - [डॉकर के साथ बाइनरी मैप करना](#mapping-binaries-with-docker)
    - [OpenWeb-UI और MCPO के साथ उपयोग](#using-with-openweb-ui-and-mcpo)
      - [`uvx` के साथ](#with-uvx)
      - [डॉकर के साथ](#with-docker)
    - [मानक इनपुट/आउटपुट (stdio)](#standard-inputoutput-stdio)
      - [Python](#python)
      - [डॉकर](#docker)
    - [स्ट्रीम करने योग्य HTTP](#streamable-http)
      - [Python](#python-1)
      - [डॉकर](#docker-1)
    - [सर्वर-भेजी गई घटनाएँ (SSE)](#server-sent-events-sse)
      - [Python](#python-2)
      - [डॉकर](#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/) का उपयोग करके CLI कमांड के रूप में चलाएँ:```bash
uvx pyghidra-mcp # Creates pyghidra_mcp_projects directory by default
टूल डाउनलोड करें

MCP से लाइव Ghidra GUI को लॉन्च और नियंत्रित करने के लिए, --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` `pyghidra-mcp` के माध्यम से Ghidra लॉन्च करता है। यह पहले से चल रहे बाहरी Ghidra इंस्टेंस से अटैच नहीं होता है।

या, [Docker container](https://ghcr.io/clearbluejar/pyghidra-mcp) के रूप में चलाएँ:```bash
docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp -t stdio

एजेंटों के लिए अनुकूलित

pyghidra-mcp MCP सतह को जानबूझकर संकीर्ण रखता है ताकि एजेंट क्लाइंट टूल डिस्कवरी और आर्गुमेंट चयन पर कम टोकन खर्च करें।

  • छोटे टूल विवरण: MCP टूल docstrings को कॉम्पैक्ट रखा जाता है ताकि FastMCP टूल स्कीमा छोटे और मॉडलों को भेजने में सस्ते रहें।
  • संदर्भ अनुशासन: टूल डिफ़ॉल्ट रूप से पूरे-प्रोग्राम संदर्भ को डंप करने के बजाय केंद्रित संरचित डेटा लौटाते हैं। Decompilation, symbol search, और cross-reference परिणाम एक बड़े प्रतिक्रिया के बजाय पुनरावृत्तीय विश्लेषण का समर्थन करने के लिए आकार दिए गए हैं।
  • GUI टूल केवल जब प्रासंगिक हों: GUI-केवल नियंत्रण जैसे open_program_in_gui, list_open_programs, set_current_program, और goto केवल तब उजागर होते हैं जब सर्वर --gui के साथ प्रारंभ किया जाता है।
  • CLI वैकल्पिक है: यदि MCP आपका पसंदीदा इंटरफ़ेस नहीं है, तो pyghidra-mcp-cli HTTP पर सामान्य संपादन और विश्लेषण वर्कफ़्लो के लिए समूहित कमांड के साथ एक सीधा कमांड-लाइन क्लाइंट प्रदान करता है।

यह डिफ़ॉल्ट सर्वर को LLM एजेंटों, IDE इंटीग्रेशन और ऑटोमेशन के लिए उपयोगी बनाए रखता है, बिना हेडलेस सत्रों में अनावश्यक टूल सतह या GUI-केवल नियंत्रण उजागर किए।

CLI क्लाइंट

अधिक इंटरैक्टिव कमांड-लाइन अनुभव के लिए, आप अलग pyghidra-mcp-cli पैकेज का उपयोग कर सकते हैं, जो चल रहे pyghidra-mcp सर्वर के साथ इंटरैक्ट करने के लिए एक उपयोगकर्ता-अनुकूल इंटरफ़ेस प्रदान करता है।

स्थापना

uv का उपयोग करके CLI क्लाइंट स्थापित करें (अनुशंसित):```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

[!नोट] CLI, pyghidra-mcp से HTTP के माध्यम से जुड़ता है ताकि प्रत्येक कमांड के लिए एक नई Ghidra प्रक्रिया शुरू करने के 10-60 सेकंड के स्टार्टअप ओवरहेड से बचा जा सके। पूर्ण दस्तावेज़ीकरण के लिए 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)

GUI मोड

GUI मोड का उपयोग करें जब आप चाहते हैं कि MCP क्रियाएँ उसी लाइव प्रोग्राम ऑब्जेक्ट्स पर काम करें जिन्हें Ghidra प्रदर्शित कर रहा है।

  • --gui को --transport streamable-http की आवश्यकता है (या विकल्प के रूप में --transport http)
  • --project-path एक प्रोजेक्ट निर्देशिका और --project-name हो सकता है, या एक मौजूदा .gpr फ़ाइल। गायब प्रोजेक्ट स्वचालित रूप से बनाए जाते हैं।
  • Ghidra को pyghidra-mcp द्वारा लॉन्च किया जाता है, जो GUI और MCP लेन-देन को एक ही JVM में रखता है।
  • GUI-केवल उपकरण केवल --gui के साथ चलाने पर ही उजागर होते हैं।

उदाहरण:```bash pyghidra-mcp
--gui
--transport streamable-http
--project-path /absolute/path/to/my_research.gpr

root@kitploit:~
GUI मोड तब सही विकल्प है जब आप यह करना चाहते हैं:

- CodeBrowser में प्रोग्राम खोलना या स्विच करना
- किसी फ़ंक्शन या पते पर लिस्टिंग नेविगेट करना
- फ़ंक्शन का नाम बदलना या टिप्पणियाँ जोड़ना और Ghidra में उन परिवर्तनों को तुरंत देखना

### स्टार्टअप डिफ़ॉल्ट और बड़े प्रोजेक्ट्स

`pyghidra-mcp` को डिफ़ॉल्ट रूप से `--wait-for-analysis` की आवश्यकता नहीं होती है। सर्वर तब शुरू हो सकता है जब पृष्ठभूमि में विश्लेषण और MCP-साइड इंडेक्सिंग जारी रहे।

यह बड़े प्रोजेक्ट्स के लिए मायने रखता है:

- कई बाइनरी वाले प्रोजेक्ट को शुरू करने के लिए सर्वर स्टार्टअप को ब्लॉक करने की आवश्यकता नहीं है
- `--wait-for-analysis` उपलब्ध है जब आप अनुरोधों को पूरा करने से पहले पूरी तरह से विश्लेषित प्रोजेक्ट चाहते हैं
- बड़े मौजूदा प्रोजेक्ट्स के लिए, विश्लेषण और इंडेक्सिंग तत्परता बाइनरी के अनुसार भिन्न होने की उम्मीद है

वर्तमान सीमा:

- Ghidra विश्लेषण स्थिति और MCP इंडेक्सिंग स्थिति अलग-अलग हैं
- एक बाइनरी Ghidra में पूरी तरह से विश्लेषित हो सकती है जबकि `search_strings` या सिमेंटिक `search_code` अभी भी MCP-साइड इंडेक्सिंग की प्रतीक्षा कर रहे हों
- यह बड़े मौजूदा प्रोजेक्ट्स को खोलते समय अधिक ध्यान देने योग्य है

व्यवहार में:

- डीकंपाइलेशन, नेविगेशन, नाम बदलना और टिप्पणियाँ अभी भी एक बाइनरी के लिए काम कर सकती हैं जबकि इंडेक्सिंग-भारी खोज सुविधाएँ पकड़ रही हों
- यदि स्टार्टअप विलंबता तत्काल खोज तत्परता से अधिक मायने रखती है, तो डिफ़ॉल्ट `--no-wait-for-analysis` रखें
- यदि तत्काल तत्परता स्टार्टअप समय से अधिक मायने रखती है, तो `--wait-for-analysis` का उपयोग करें


## विकास

यह प्रोजेक्ट विकास और परीक्षण को सुव्यवस्थित करने के लिए `Makefile` का उपयोग करता है। लिंटिंग और फ़ॉर्मेटिंग के लिए `ruff` का उपयोग किया जाता है, और कोड गुणवत्ता सुनिश्चित करने के लिए `pre-commit` हुक का उपयोग किया जाता है।

### सेटअप

1.  **`uv` इंस्टॉल करें**: यदि आपके पास `uv` इंस्टॉल नहीं है, तो आप इसे pip का उपयोग करके इंस्टॉल कर सकते हैं:
    ```bash
    pip install uv
    ```
    या, आधिकारिक `uv` इंस्टॉलेशन गाइड का पालन करें: [https://docs.astral.sh/uv/install/](https://docs.astral.sh/uv/install/)

2.  **एक वर्चुअल एनवायरनमेंट बनाएँ और डिपेंडेंसी इंस्टॉल करें**:
    ```bash
    make dev-setup
    source ./.venv/bin/activate
    ```

3.  **Ghidra एनवायरनमेंट वेरिएबल सेट करें**: Ghidra डाउनलोड और इंस्टॉल करें, फिर `GHIDRA_INSTALL_DIR` एनवायरनमेंट वेरिएबल को अपनी Ghidra इंस्टॉलेशन डायरेक्टरी पर सेट करें।
    ```bash
    # Linux / Mac के लिए
    export GHIDRA_INSTALL_DIR="/path/to/ghidra/"

    # 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`: GUI इंटीग्रेशन परीक्षण चलाएँ। एक कार्यशील Ghidra इंस्टॉल और GUI समर्थन की आवश्यकता है।
- `make lint`: `ruff` से कोड शैली जाँचें।
- `make format`: `ruff` से कोड फ़ॉर्मेट करें।
- `make typecheck`: `ruff` से हल्की स्थैतिक जाँच चलाएँ।
- `make check`: सभी गुणवत्ता जाँच चलाएँ।
- `make dev`: विकास वर्कफ़्लो चलाएँ (फ़ॉर्मेट और जाँच)।
- `make build`: वितरण पैकेज बनाएँ।
- `make clean`: बिल्ड आर्टिफैक्ट और कैश साफ़ करें।

अनुशंसित विभाजन:

- pre-commit: `ruff`, `pyright`, यूनिट परीक्षण, और एक हल्का इंटीग्रेशन स्मोक टेस्ट
- GitHub Actions: पूर्ण Linux हेडलेस इंटीग्रेशन कवरेज, `Xvfb` के तहत Linux GUI, CLI कवरेज, और वर्तमान macOS स्मोक टेस्ट
- निर्धारित CI: पुराने macOS / Ghidra संगतता कवरेज
- स्थानीय/मैनुअल: भारी एनवायरनमेंट-विशिष्ट GUI डिबगिंग और रिलीज़ सैनिटी चेक

## API

### टूल्स

LLM को क्रियाएँ करने, नियतात्मक गणना करने और बाहरी सेवाओं के साथ इंटरैक्ट करने में सक्षम बनाता है।

#### बैच संचालन

`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"]
}

प्रति-आइटम त्रुटियां इनलाइन लौटाई जाती हैं (अन्य लक्ष्य अभी भी सफल होते हैं):```jsonc [ {"name": "main", "code": "void main() { ... }", "callees": ["init_hardware"], "xrefs": [...]}, {"name": "0xdeadbeef", "code": "", "error": "Function or symbol '0xdeadbeef' not found."} ]

root@kitploit:~
#### पढ़ने / विश्लेषण उपकरण

- `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)`: नाम या पते से फ़ंक्शन(ओं) को डीकंपाइल करें। एकल लक्ष्य या बैच डीकंपाइलेशन के लिए एक सूची स्वीकार करता है। समृद्ध प्रतिक्रिया फ़्लैग प्रत्येक परिणाम में कैलीज़, स्ट्रिंग्स, और/या xrefs संलग्न करते हैं। `timeout_sec` प्रति लक्ष्य लागू होता है और प्रत्येक डीकंपाइलेशन प्रयास को स्वतंत्र रूप से सीमित करता है।

- `list_exports(binary_name: str, query: str = ".*", offset: int = 0, limit: int = 25)`: निर्दिष्ट बाइनरी से सभी निर्यातित फ़ंक्शन और प्रतीकों को सूचीबद्ध करता है (क्वेरी के लिए regex समर्थित)।

- `list_imports(binary_name: str, query: str = ".*", offset: int = 0, limit: int = 25)`: निर्दिष्ट बाइनरी के लिए सभी आयातित फ़ंक्शन और प्रतीकों को सूचीबद्ध करता है (क्वेरी के लिए regex समर्थित)।

- `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)`: बाइनरी के भीतर प्रतीकों को नाम से खोजें। केस-असंवेदनशील मिलान के साथ regex पैटर्न (जैसे `^main$`, `func.*one`) या सादे सबस्ट्रिंग क्वेरी का समर्थन करता है। लेबल, वेरिएबल और अन्य गैर-फ़ंक्शन प्रतीकों को बाहर करने के लिए `functions_only=True` सेट करें।

#### परियोजना संचालन

- `import_binary(binary_path: str)`: निर्दिष्ट पथ से Ghidra प्रोजेक्ट में एक बाइनरी आयात करता है। यदि पथ एक निर्देशिका है, तो यह सभी समर्थित बाइनरी फ़ाइलों को रिकर्सिवली स्कैन और आयात करेगा, Ghidra प्रोजेक्ट के भीतर निर्देशिका संरचना को संरक्षित करेगा।

- `list_project_binaries()`: वर्तमान Ghidra प्रोजेक्ट में बाइनरी सूचीबद्ध करता है। GUI मोड में इसमें प्रोजेक्ट बाइनरी शामिल हैं जो डिस्क पर मौजूद हैं, भले ही वे 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)`: किसी फ़ंक्शन को नाम या पते से नाम बदलें। GUI मोड में यह एक लाइव Ghidra लेन-देन के रूप में चलता है और खुले प्रोग्राम को अपडेट करता है।

- `rename_variable(binary_name: str, function_name_or_address: str, variable_name: str, new_name: str)`: किसी विशिष्ट फ़ंक्शन के भीतर सटीक नाम से फ़ंक्शन पैरामीटर या स्थानीय वेरिएबल का नाम बदलें। यदि नाम उस फ़ंक्शन के भीतर गायब या अस्पष्ट है, तो टूल अनुमान लगाने के बजाय एक त्रुटि देता है। GUI मोड में यह एक लाइव 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 नियंत्रण उपकरण (केवल `--gui`)

ये उपकरण केवल तब उपलब्ध होते हैं जब `pyghidra-mcp` को `--gui` के साथ शुरू किया जाता है और प्रोजेक्ट डेटा को सीधे बदलने के बजाय यह नियंत्रित करते हैं कि GUI क्या दिखा रहा है:

- `list_open_programs()`: Ghidra GUI में वर्तमान में खुले प्रोग्रामों को सूचीबद्ध करें।
- `open_program_in_gui(binary_name: str, new_window: bool = True)`: प्रोजेक्ट बाइनरी को CodeBrowser में खोलें। डिफ़ॉल्ट रूप से यह एक नया CodeBrowser विंडो खोलता है। जब संभव हो तो दृश्यमान CodeBrowser का पुन: उपयोग करने के लिए `new_window=false` सेट करें।
- `set_current_program(binary_name: str)`: एक खुले प्रोग्राम को प्राथमिक GUI टूल संदर्भ में सक्रिय/वर्तमान प्रोग्राम बनाएं।
- `goto(binary_name: str, target: str, target_type: str)`: Ghidra GUI को किसी पते या फ़ंक्शन पर नेविगेट करें। `target_type` को `address` या `function` होना चाहिए।

## उपयोग

यह Python पैकेज PyPI पर [pyghidra-mcp](https://pypi.org/p/pyghidra-mcp) के रूप में प्रकाशित है और इसे [pip](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/#install-a-package), [pipx](https://pipx.pypa.io/), [uv](https://docs.astral.sh/uv/), [poetry](https://python-poetry.org/), या किसी भी Python पैकेज प्रबंधक के साथ स्थापित और चलाया जा सकता है।```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.

डॉकर के साथ बाइनरी मैप करना

डॉकर कंटेनर का उपयोग करते समय, आप अपने बाइनरी वाले स्थानीय निर्देशिका को कंटेनर के वर्कस्पेस में मैप कर सकते हैं। इससे 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/*

root@kitploit:~
### OpenWeb-UI और MCPO के साथ उपयोग

आप `pyghidra-mcp` को [OpenWeb-UI](https://github.com/open-webui/open-webui) के साथ [MCPO](https://github.com/open-webui/mcpo) का उपयोग करके एकीकृत कर सकते हैं, जो एक MCP-to-OpenAPI प्रॉक्सी है। यह आपको `pyghidra-mcp` के उपकरणों को एक मानक RESTful API के माध्यम से प्रकट करने की अनुमति देता है, जिससे वे वेब इंटरफेस और अन्य उपकरणों के लिए सुलभ हो जाते हैं।


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


#### `uvx` के साथ

आप `pyghidra-mcp` और `mcpo` को एक साथ `uvx` का उपयोग करके चला सकते हैं:```bash
uvx mcpo -- \
  pyghidra-mcp /bin/ls

Docker के साथ

आप mcpo को Docker के साथ संयोजित कर सकते हैं:```bash uvx mcpo -- docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp /bin/ls

root@kitploit:~
### मानक इनपुट/आउटपुट (stdio)

stdio परिवहन मानक इनपुट और आउटपुट स्ट्रीम के माध्यम से संचार सक्षम करता है। यह स्थानीय एकीकरण और कमांड-लाइन उपकरणों के लिए विशेष रूप से उपयोगी है। अधिक विवरण के लिए [विनिर्देश](https://modelcontextprotocol.io/docs/concepts/transports#built-in-transport-types) देखें।

#### Python```bash
pyghidra-mcp

डिफ़ॉल्ट रूप से, Python पैकेज stdio मोड में चलेगा। क्योंकि यह मानक इनपुट और आउटपुट स्ट्रीम का उपयोग कर रहा है, ऐसा लगेगा कि टूल बिना किसी आउटपुट के हैंग हो गया है, लेकिन यह अपेक्षित है।

Docker

यह सर्वर GitHub के कंटेनर रजिस्ट्री (ghcr.io/clearbluejar/pyghidra-mcp) पर प्रकाशित है।``` docker run -i --rm ghcr.io/clearbluejar/pyghidra-mcp -t stdio

root@kitploit:~
डिफ़ॉल्ट रूप से, Docker कंटेनर `streamable-http` सर्वर प्रारंभ करता है, इसलिए इमेज नाम के बाद `-t stdio` शामिल करें और [इंटरैक्टिव](https://docs.docker.com/reference/cli/docker/container/run/#interactive) stdio मोड के लिए `-i` के साथ चलाएँ।

### Streamable HTTP

Streamable HTTP JSON RPC पर HTTP POST अनुरोधों के माध्यम से स्ट्रीमिंग प्रतिक्रियाओं को सक्षम करता है। अधिक जानकारी के लिए [विनिर्देश](https://modelcontextprotocol.io/specification/draft/basic/transports#streamable-http) देखें।

डिफ़ॉल्ट रूप से, सर्वर क्लाइंट कनेक्शन के लिए [http://127.0.0.1:8000/mcp](http://127.0.0.1:8000/mcp) पर सुनता है। बाइंड पता बदलने के लिए `--host` / `--port` या `MCP_HOST` / `MCP_PORT` पर्यावरण चर का उपयोग करें। _क्लाइंट को इससे कनेक्ट करने के लिए सर्वर चालू होना चाहिए।_

#### Python```bash
pyghidra-mcp -t streamable-http

डिफ़ॉल्ट रूप से, Python पैकेज stdio मोड में चलेगा, इसलिए आपको -t streamable-http शामिल करना होगा।

GUI मोड इस ट्रांसपोर्ट का उपयोग करता है:```bash pyghidra-mcp
--gui
--transport streamable-http
--project-path /absolute/path/to/my_project.gpr

root@kitploit:~
#### Docker```
docker run -p 8000:8000 ghcr.io/clearbluejar/pyghidra-mcp

सर्वर-भेजी गई घटनाएँ (SSE)

[!WARNING] MCP समुदाय इसे पिछड़े संगतता के लिए एक विरासत परिवहन प्रोटोकॉल मानता है। स्ट्रीमेबल HTTP अनुशंसित प्रतिस्थापन है।

SSE परिवहन सर्वर से क्लाइंट स्ट्रीमिंग को सक्षम करता है जिसमें क्लाइंट-से-सर्वर और सर्वर-से-क्लाइंट संचार के लिए सर्वर-सेंड इवेंट्स का उपयोग किया जाता है। अधिक विवरण के लिए विनिर्देश देखें।

डिफ़ॉल्ट रूप से, सर्वर क्लाइंट कनेक्शन के लिए http://127.0.0.1:8000/sse पर सुनता है। बाइंड पता बदलने के लिए --host / --port या MCP_HOST / MCP_PORT पर्यावरण चर का उपयोग करें। क्लाइंट को जुड़ने के लिए सर्वर को चल रहा होना चाहिए।

Python```bash

pyghidra-mcp -t sse

root@kitploit:~
डिफ़ॉल्ट रूप से, Python पैकेज `stdio` मोड में चलेगा, इसलिए आपको `-t sse` शामिल करना होगा।

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

एकीकरण

[!NOTE] यह अनुभाग कार्य प्रगति पर है। हम जल्द ही विशिष्ट एकीकरणों के उदाहरण जोड़ेंगे।

Claude Desktop

अपने claude_desktop_config.json फ़ाइल में निम्नलिखित 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" } } } }

root@kitploit:~
## प्रेरणा

इस परियोजना के कार्यान्वयन और डिज़ाइन को इन शानदार परियोजनाओं से प्रेरणा मिली:

* [GhidraMCP](https://github.com/lauriewired/GhidraMCP)
* [semgrep-mcp](https://github.com/semgrep/mcp)
* [ghidrecomp](https://github.com/clearbluejar/ghidrecomp)
* [BinAssistMCP](https://github.com/jtang613/BinAssistMCP)

---

## योगदान, समुदाय और स्रोत से चलाना

हम मानते हैं कि रिवर्स इंजीनियरिंग का भविष्य एजेंटिक, प्रासंगिक और स्केलेबल है।  
`pyghidra-mcp` उस भविष्य की ओर एक कदम है—पूर्ण Ghidra परियोजनाओं को AI एजेंटों और ऑटोमेशन पाइपलाइनों के लिए सुलभ बनाना।

हम सक्रिय रूप से परियोजना विकसित कर रहे हैं और प्रतिक्रिया, समस्याओं और योगदान का स्वागत करते हैं।

> [!NOTE]
> हमें आपकी प्रतिक्रिया, बग रिपोर्ट, फीचर अनुरोध और कोड पसंद हैं।

### योगदानकर्ता कार्यप्रवाह

यदि आप एक नया उपकरण या एकीकरण जोड़ रहे हैं, तो अनुशंसित कार्यप्रवाह इस प्रकार है:

- अपनी शाखा को `feature/` उपसर्ग से लेबल करें ताकि एक नई क्षमता का संकेत मिले।
- अपने उपकरण को `pyghidra/tools/` में मौजूद उपकरणों के समान शैली और संरचना का उपयोग करके जोड़ें।
- एक एकीकरण परीक्षण लिखें जो `StdioClient` इंस्टेंस का उपयोग करके आपके उपकरण का परीक्षण करता है। इसे `tests/integration/` में रखें।
- `tests/integration/test_concurrent_streamable_client.py` में अपने उपकरण के लिए एक कॉल जोड़कर समवर्ती परीक्षण का विस्तार करें।
- सुनिश्चित करने के लिए `make test` और `make format` चलाएँ कि आपके परिवर्तन सभी परीक्षण पास करते हैं और लिंटिंग नियमों का पालन करते हैं।

यह कोडबेस में स्थिरता सुनिश्चित करता है और रिवर्स इंजीनियरिंग वर्कफ़्लो के लिए मजबूत, स्केलेबल उपकरण बनाए रखने में हमारी मदद करता है।

______________________________________________________________________

❤️ के साथ बनाया गया [PyGhidra-MCP टीम](https://github.com/clearbluejar/pyghidra-mcp) द्वारा