
diaphora-mcp v1.0.6
MCP सर्वर स्वचालित बाइनरी डिफिंग के लिए।
Diaphora MCP
Diaphora MCP बाइनरी डिफिंग के लिए एक MCP (मॉडल कॉन्टेक्स्ट प्रोटोकॉल) सर्वर है। यह MCP प्रोटोकॉल के माध्यम से Diaphora (डिफिंग इंजन) और IDA Pro (डिसअसेंबलर) को जोड़ता है, जिससे AI एजेंट (जैसे Claude Code) बाइनरी फ़ाइलों की तुलना कर सकते हैं, सुरक्षा पैच ढूंढ सकते हैं और परिवर्तनों का विश्लेषण कर सकते हैं।
विशेषताएँ
- निर्यात: विश्लेषित
.i64/.idbडेटाबेस को Diaphora SQLite प्रारूप में परिवर्तित करता है (idat.exeहेडलेस मोड के माध्यम से) - डिफिंग: दो निर्यातित डेटाबेस की तुलना करता है, मिलान प्रकार और अनुपात द्वारा परिणामों को फ़िल्टर करता है
- भेद्यता विश्लेषण: कीवर्ड मिलान और अनुमानों का उपयोग करके सुरक्षा-संबंधित परिवर्तनों की खोज करता है
- पैच का पता लगाना: स्वचालित रूप से नए बाउंड्स चेक, नल चेक, त्रुटि हैंडलिंग और क्रिप्टोग्राफ़िक परिवर्तनों का पता लगाता है
- रैंकिंग: CFG, जटिलता छलांग और सुरक्षा संकेतकों के आधार पर महत्व के अनुसार परिवर्तित फ़ंक्शनों को रैंक करता है
- कॉल ग्राफ़: कॉल पथों की तुलना करता है (BFS, अधिकतम N स्तर), और कॉल कैस्केड में मूल-कारण परिवर्तनों का पता लगाता है
- मेटाडेटा स्थानांतरण: डेटाबेस के बीच स्थानांतरण के लिए नाम, टिप्पणियाँ और प्रोटोटाइप तैयार करता है
- IDA Pro MCP एकीकरण: सभी उपकरण ऐसे पते और डेटाबेस पथ लौटाते हैं जो सीधे IDA Pro MCP उपकरणों को पास किए जा सकते हैं
स्थापना
1. निर्भरताएँ
- Python 3.10+
- IDA Pro 8.x / 9.x (हेडलेस निर्यात के लिए
idat.exeके माध्यम से) - Diaphora प्लगइन IDA में स्थापित
- Claude Code (या कोई अन्य MCP-संगत क्लाइंट)
2. पैकेज स्थापना
git clone https://github.com/xTeardx/diaphora-mcp.git
cd diaphora-mcp
pip install -e .
3. पथ विन्यास
पैकेज मानक स्थापना स्थानों में IDA Pro और Diaphora को स्वचालित रूप से खोजने का प्रयास करता है। यदि नहीं मिलता है, तो आप निम्न पर्यावरण चर सेट कर सकते हैं:
| चर | विवरण | उदाहरण |
|---|---|---|
IDAT_PATH | idat.exe का पूर्ण पथ | C:\Program Files\IDA Pro 9.3\idat.exe |
DIAPHORA_DIR | diaphora.py वाला फ़ोल्डर | C:\Program Files\IDA Pro 9.3\plugins\diaphora-3.4.1 |
DIAPHORA_OUTPUT_ROOT | नई निर्यात फ़ाइलों के लिए अनुमत रूट निर्देशिका | D:\\diaphora-outputs |
DIAPHORA_PYTHON | डिफ के लिए Python दुभाषिया | /usr/bin/python3 (डिफ़ॉल्ट sys.executable) |
Claude Code के लिए, आप उन्हें ~/.claude.json (या अपने MCP क्लाइंट के संबंधित कॉन्फ़िग फ़ाइल) में निर्दिष्ट कर सकते हैं:
{
"mcpServers": {
"diaphora": {
"command": "python",
"args": ["path/to/repo/diaphora_mcp_server.py"],
"env": {
"IDAT_PATH": "C:\\Program Files\\IDA Pro 9.3\\idat.exe",
"DIAPHORA_DIR": "C:\\Program Files\\IDA Pro 9.3\\plugins\\diaphora-3.4.1"
},
"timeout": 7200
}
}
}
नोट: बहुत बड़े बाइनरी (>100 MB) के लिए, सुनिश्चित करें कि
timeoutकम से कम 7200 (2 घंटे) हो।
3.1. Codex और हेडलेस IDA MCP
Codex आमतौर पर दो पूरक MCP सर्वरों का उपयोग करता है:
diaphora-mcp— यह परियोजना: निर्यात, Diaphora डिफ, और परिणाम विश्लेषण;ida-pro-mcp—idb_open, डिकम्पाइलेशन, और पता-स्तर विश्लेषण के लिए अपस्ट्रीम IDA निरीक्षण सर्वर।
idalib-mcp ida-pro-mcp का हेडलेस बैकएंड है, कोई अलग Diaphora सर्वर नहीं। इसे स्थापित करने के बाद, Codex को पुनः प्रारंभ करें:
uv run ida-pro-mcp --install codex --transport streamable-http --scope global --ida-rpc http://127.0.0.1:8745/mcp
इस परियोजना के लिए, एक stdio कॉन्फ़िगरेशन पर्याप्त है:
[mcp_servers.diaphora-mcp]
command = "python"
args = ["D:\\path\\to\\diaphora-mcp\\diaphora_mcp_server.py"]
startup_timeout_sec = 120
4. डिफिंग के लिए डेटाबेस तैयार करना
IDA Pro को पहले बाइनरी का विश्लेषण करना होगा (.i64 या .idb फ़ाइलें बनाते हुए)। उसके बाद:
┃ export_idb_to_diaphora(idb_path="old_version.i64")
┃ export_idb_to_diaphora(idb_path="new_version.i64")
या एक कमांड में पूरी पाइपलाइन चलाएँ:
┃ batch_export_and_diff(idb1="old.i64", idb2="new.i64")
.i64 को सीधे परिणाम उपकरणों में पास न करें: यह IDA डेटाबेस है, SQLite नहीं। पहले इसे निर्यात करें।
त्वरित आरंभ
┃ # 1. पूर्ण पाइपलाइन: दो .i64 निर्यात करें → डिफ़ → सारांश रिपोर्ट
┃ batch_export_and_diff(idb1="v1.0.i64", idb2="v1.1.i64")
┃ # 2. यदि डेटाबेस पहले से निर्यातित हैं
┃ diff_diaphora_dbs(db1="v1.0.sqlite", db2="v1.1.sqlite")
┃ # 3. डिफ़ परिणामों का सुरक्षा विश्लेषण
┃ analyze_diff_results(results_path="v1.0_vs_v1.1.diaphora")
┃ # 4. परिवर्तनों की महत्व रैंकिंग
┃ rank_changes(results_path="v1.0_vs_v1.1.diaphora", top_n=20)
┃ # 5. मूल-कारण परिवर्तन खोजें
┃ find_patch_root(results_path="v1.0_vs_v1.1.diaphora")
┃ # 6. संभावित सुरक्षा पैच का पता लगाएं
┃ detect_security_patches(results_path="v1.0_vs_v1.1.diaphora")
┃ # 7. पूर्ण रिपोर्ट उत्पन्न करें
┃ summarize_patch(results_path="v1.0_vs_v1.1.diaphora")
उदाहरण (लाइव सत्र प्रतिलेख)
वास्तविक Diaphora MCP सत्र का पूर्ण चरण-दर-चरण प्रतिलेख देखने के लिए examples/basic-session.md देखें — दो IDB डेटाबेस निर्यात करने से लेकर व्यक्तिगत फ़ंक्शनों की तुलना करने तक। रूसी में भी उपलब्ध है।
यहाँ सर्वर द्वारा लौटाए गए परिणाम की एक झलक है:
इनपुट — दो SQLite3 DLLs की तुलना करें (2015 बनाम 2023):
{"idb1_path": "old.i64", "idb2_path": "new.i64", "use_decompiler": false}
आउटपुट — निर्यात + डिफ़ के बाद सारांश:
{
"best_matches": 60,
"partial_matches": 993,
"multimatches": 52,
"unmatched_primary": 2647
}
सत्र 6 MCP उपकरण कॉलों के माध्यम से चलता है, प्रत्येक चरण के लिए सटीक JSON इन/आउट दिखाता है, साथ ही एजेंट का तर्क भी।
एकल डेटाबेस की जाँच करना
┃ # डेटाबेस निर्यात जानकारी प्राप्त करें
┃ get_export_info(db_path="app.sqlite")
┃ # फ़ंक्शन खोजें
┃ search_export_db(db_path="app.sqlite", name_pattern="%crypt%", min_instructions=50)
┃ # स्यूडोकोड पुनर्प्राप्त करें
┃ get_function_pseudocode(db_path="app.sqlite", address="401000")
परियोजना संरचना
diaphora-mcp/
├── diaphora_mcp_server.py # मुख्य प्रवेश बिंदु
├── diaphora_mcp/
│ ├── diaphora_mcp_server.py # MCP उपकरण पंजीकरण
│ ├── config.py # पथ विन्यास और स्वतः-पता लगाना
│ ├── models.py # स्थिरांक और मॉडल
│ ├── core/
│ │ ├── export.py # हेडलेस निर्यात, बैच पाइपलाइन
│ │ ├── diff.py # डिफिंग और .diaphora परिणाम पाठक
│ │ ├── analysis.py # फ़ंक्शन खोज, तुलना, व्याख्या
│ │ ├── security.py # कीवर्ड मिलान, पैच का पता लगाना
│ │ ├── ranking.py # महत्व रैंकिंग
│ │ ├── graph.py # कॉलग्राफ, BFS कॉल ट्री, मूल कारण
│ │ ├── metadata.py # मेटाडेटा तैयारी (नाम, टिप्पणियाँ)
│ │ └── report.py # समग्र पैच रिपोर्ट उत्पादन
│ └── utils/
│ ├── sqlite.py # SQLite सहायक
│ ├── format.py # स्यूडोकोड डिफ, फीचर वेक्टर निष्कर्षण
│ └── log.py # निर्यात लॉगिंग उपयोगिताएँ
├── _diaphora_headless.py # idat.exe -S पतली आवरण
└── logs/ # स्वचालित निर्यात लॉग (गतिशील रूप से बनाए गए)
MCP उपकरण संदर्भ (21 उपकरण)
निर्यात
| उपकरण | विवरण |
|---|---|
export_idb_to_diaphora | IDA हेडलेस का उपयोग करके .i64/.idb डेटाबेस को SQLite प्रारूप में निर्यात करता है |
batch_export_and_diff | पूर्ण पाइपलाइन: प्राथमिक निर्यात → द्वितीयक निर्यात → डिफ़ → सारांश |
डिफ़
| उपकरण | विवरण |
|---|---|
diff_diaphora_dbs | दो निर्यातित Diaphora SQLite डेटाबेस की तुलना करता है |
get_diff_results | फ़िल्टरिंग के साथ .diaphora डिफ़ फ़ाइल पढ़ता है |
get_diff_summary | मिलान आँकड़े लौटाता है |
विश्लेषण
| उपकरण | विवरण |
|---|---|
analyze_diff_results | सुरक्षा कीवर्ड और फ़िल्टर का उपयोग करके परिणामों की जाँच करता है |
compare_functions | दोनों डेटाबेस में एक फ़ंक्शन की साथ-साथ तुलना |
find_function_match | विश्वास मीट्रिक के साथ दूसरे बाइनरी में फ़ंक्शन का मिलान करता है |
explain_similarity | समानता कारकों (mnemonics, CFG, स्थिरांक, प्रोटोटाइप, हैश) को विभाजित करता है |
detect_behavior_change | फ़ंक्शन तर्क परिवर्तनों का प्राकृतिक भाषा सारांश प्रदान करता है |
summarize_patch | व्यापक अद्यतन रिपोर्ट तैयार करता है |
search_export_db | नाम/निर्देश/जटिलता द्वारा निर्यातित फ़ंक्शनों की क्वेरी करता है |
get_function_pseudocode | एक फ़ंक्शन के लिए स्यूडोकोड और मेटाडेटा लाता है |
get_export_info | सामान्य डेटाबेस मेटाडेटा पुनर्प्राप्त करता है |
सुरक्षा
| उपकरण | विवरण |
|---|---|
detect_security_patches | संभावित सुरक्षा फिक्स का पता लगाता है (बाउंड्स चेक, मेमोरी सुरक्षा, एंटी-डीबग, आदि) |
रैंकिंग
| उपकरण | विवरण |
|---|---|
rank_changes | महत्व के अनुसार परिवर्तित फ़ंक्शनों को रैंक करता है (0-100 स्कोर) |
कॉलग्राफ
| उपकरण | विवरण |
|---|---|
get_changed_callgraph | एक फ़ंक्शन के आने वाले और जाने वाले कॉल की तुलना करता है |
compare_call_path | एक फ़ंक्शन से कॉलग्राफ चलता है (BFS कॉल पथ तुलना, अधिकतम N स्तर) |
find_patch_root | कॉल कैस्केड का कारण बनने वाले मूल-कारण फ़ंक्शनों का पता लगाता है |
प्रदर्शन
| उपकरण | विवरण |
|---|---|
performance_report | एकत्रित मेमोरी, कैश और कनेक्शन आँकड़े लौटाता है |
मेटाडेटा
| उपकरण | विवरण |
|---|---|
transfer_metadata | बल्क स्थानांतरण के लिए नाम, टिप्पणियाँ और प्रोटोटाइप तैयार करता है |
IDA Pro GUI एकीकरण (XML-RPC ब्रिज)
परियोजना में चल रहे GUI IDA Pro सत्रों के साथ अंतर्निहित एकीकरण शामिल है, जो डेटाबेस लॉकिंग विरोध के बिना सक्रिय IDA विंडो से तत्काल निर्यात सक्षम करता है।
- स्वतः-प्रारंभ: diaphora_gui_listener.py को अपने IDA Pro
plugins/निर्देशिका में कॉपी करें। यह IDA शुरू होने पर पोर्ट28652पर एक पृष्ठभूमि XML-RPC सर्वर शुरू करेगा। - स्मार्ट निर्यात:
export_idb_to_diaphoraको कॉल करते समय, MCP सर्वर पोर्ट28652की जाँच करता है। यदि कोई सत्र सक्रिय है, तो यह निर्यात सीधे GUI में चलाता है। अन्यथा, यह स्वचालित रूप सेidat.exeके माध्यम से हेडलेस पृष्ठभूमि निष्पादन पर वापस आ जाता है।
ब्रिज को कॉन्फ़िगर करने के विस्तृत निर्देशों के लिए, GUI_INSTRUCTIONS.md देखें।
विशाल डेटाबेस को संभालना (100k+ फ़ंक्शन)
अत्यधिक बड़ी परियोजनाओं को संसाधित करते समय, Diaphora MCP विशिष्ट अनुकूलन लागू करता है:
- पुनरावृत्ति सीमा: बड़े कॉलग्राफ ट्रैवर्सल के दौरान क्रैश को रोकने के लिए Python पुनरावृत्ति सीमा स्वचालित रूप से
100000(sys.setrecursionlimit) तक बढ़ा दी जाती है। - SQLite लेन-देन अनुकूलन: अपने
diaphora_config.pyमेंCOMMIT_AFTER_EACH_GUI_UPDATE = Falseसेट करने से डिस्क लेखन कम होता है, GUI निर्यात 2x से 3x तेज़ होता है। - Hex-Rays माइक्रोकोड: जब डिकम्पाइलर सख्ती से आवश्यक न हो, तो माइक्रोकोड निर्यात अक्षम करें (
EXPORTING_USE_MICROCODE = FalseDiaphora कॉन्फ़िग में) तेज़ निर्यात के लिए।
IDA Pro MCP एकीकरण
analyze_diff_results, compare_functions, और find_function_match जैसे उपकरण एक ida_pro_mcp ब्लॉक लौटाते हैं जिसमें पते और पथ होते हैं। इस जानकारी को सीधे ida-pro-mcp उपकरणों को पास किया जा सकता है:
┃ # 1. Diaphora एक संदिग्ध फ़ंक्शन ढूंढता है
┃ analyze_diff_results(results_path="diff.diaphora")
┃ → addr1="401000", db1="old.sqlite"
┃ # 2. IDA Pro MCP इसे डिकम्पाइल करता है
┃ decompile_function(address="401000")
उदाहरण
Diaphora MCP को क्रियाशील देखने के लिए, निम्नलिखित उदाहरण देखें:
- मूल सत्र प्रतिलेख: प्रत्येक उपकरण कॉल के लिए सटीक JSON इनपुट/आउटपुट के साथ एक वास्तविक MCP सत्र वॉकथ्रू — निर्यात से फ़ंक्शन तुलना तक। रूसी में भी उपलब्ध है।
AI एजेंट दिशानिर्देश (महत्वपूर्ण)
यदि आप इस प्रोटोकॉल का उपयोग करने वाले AI कोडिंग सहायक (जैसे Claude Code) हैं, तो निम्न अनुकूलता नियमों को ध्यान में रखें:
-
GUI बनाम हेडलेस निर्यात स्कीमा:
- सक्रिय GUI सत्र (
ida_mcp.pyप्लगइन) के माध्यम से निर्यात करने पर एक कस्टम स्कीमा उत्पन्न होता है जिसमेंcalls,strings,structuresजैसी तालिकाएँ होती हैं, लेकिन कोईprogramतालिका नहीं। - हेडलेस निर्यात (
idat.exeके माध्यम से) आधिकारिक Diaphora स्कीमा उत्पन्न करता है जिसमेंprogramतालिका शामिल है। - महत्वपूर्ण: डिफ़ इंजन (
diff_diaphora_dbs) को आधिकारिक स्कीमा की आवश्यकता है। यदि आप डेटाबेस की तुलना/डिफ़ करना चाहते हैं तो हमेशा हेडलेस निर्यात करें।
- सक्रिय GUI सत्र (
-
GUI में लॉक किए गए डेटाबेस:
- GUI IDA Pro में वर्तमान में खुला डेटाबेस लॉक है। इसे हेडलेस निर्यात करने का प्रयास विफल हो जाएगा।
- यदि आपको वर्तमान में खुले डेटाबेस को डिफ़ करने की आवश्यकता है, तो उपयोगकर्ता से इसे GUI में बंद करने (या एक डमी डेटाबेस खोलने) के लिए कहें ताकि फ़ाइल लॉक जारी हो सके, फिर हेडलेस निर्यात ट्रिगर करें।
-
डेटाबेस नाम टकराव से बचें:
- Diaphora निर्यात डेटाबेस डिफ़ॉल्ट रूप से
<basename>.diaphora.sqliteहैं। - Diaphora निर्यात के लिए कभी भी
<basename>.sqliteका उपयोग न करें, क्योंकि यहida-pro-mcpपर्यवेक्षक द्वारा बनाए गए आंतरिक कैश डेटाबेस के साथ टकराता है।
- Diaphora निर्यात डेटाबेस डिफ़ॉल्ट रूप से
सत्यापन स्थिति और सीमाएँ
जाँच किए गए IDA Pro 9.3 फिक्स्चर रिग्रेशन सूट पास करते हैं: 16 passed, 1 xpassed. दो SQLite3 DLLs का एक वास्तविक स्टेज्ड निर्यात और Diaphora डिफ़ भी सत्यापित किया गया था। बड़े या GUI-खुले IDB के लिए अभी भी एक मुफ्त IDA लॉक, एक मान्य DIAPHORA_OUTPUT_ROOT, और पर्याप्त बड़ा MCP क्लाइंट टाइमआउट आवश्यक है।
लाइसेंस
MIT