
MCP सर्वर स्वचालित बाइनरी डिफिंग के लिए।
Diaphora MCP बाइनरी डिफिंग के लिए एक MCP (मॉडल कॉन्टेक्स्ट प्रोटोकॉल) सर्वर है। यह MCP प्रोटोकॉल के माध्यम से Diaphora (डिफिंग इंजन) और IDA Pro (डिसअसेंबलर) को जोड़ता है, जिससे AI एजेंट (जैसे Claude Code) बाइनरी फ़ाइलों की तुलना कर सकते हैं, सुरक्षा पैच ढूंढ सकते हैं और परिवर्तनों का विश्लेषण कर सकते हैं।
.i64 / .idb डेटाबेस को Diaphora SQLite प्रारूप में परिवर्तित करता है (idat.exe हेडलेस मोड के माध्यम से)idat.exe के माध्यम से)git clone https://github.com/xTeardx/diaphora-mcp.git
cd diaphora-mcp
pip install -e .
पैकेज मानक स्थापना स्थानों में IDA Pro और Diaphora को स्वचालित रूप से खोजने का प्रयास करता है। यदि नहीं मिलता है, तो आप निम्न पर्यावरण चर सेट कर सकते हैं:
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 घंटे) हो।
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
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/ # स्वचालित निर्यात लॉग (गतिशील रूप से बनाए गए)
| उपकरण | विवरण |
|---|---|
export_idb_to_diaphora | IDA हेडलेस का उपयोग करके .i64/.idb डेटाबेस को SQLite प्रारूप में निर्यात करता है |
batch_export_and_diff | पूर्ण पाइपलाइन: प्राथमिक निर्यात → द्वितीयक निर्यात → डिफ़ → सारांश |
| उपकरण | विवरण |
|---|---|
diff_diaphora_dbs | दो निर्यातित Diaphora SQLite डेटाबेस की तुलना करता है |
get_diff_results | फ़िल्टरिंग के साथ .diaphora डिफ़ फ़ाइल पढ़ता है |
get_diff_summary | मिलान आँकड़े लौटाता है |
| उपकरण | विवरण |
|---|---|
detect_security_patches | संभावित सुरक्षा फिक्स का पता लगाता है (बाउंड्स चेक, मेमोरी सुरक्षा, एंटी-डीबग, आदि) |
| उपकरण | विवरण |
|---|---|
rank_changes | महत्व के अनुसार परिवर्तित फ़ंक्शनों को रैंक करता है (0-100 स्कोर) |
| उपकरण | विवरण |
|---|---|
get_changed_callgraph | एक फ़ंक्शन के आने वाले और जाने वाले कॉल की तुलना करता है |
compare_call_path | एक फ़ंक्शन से कॉलग्राफ चलता है (BFS कॉल पथ तुलना, अधिकतम N स्तर) |
find_patch_root | कॉल कैस्केड का कारण बनने वाले मूल-कारण फ़ंक्शनों का पता लगाता है |
| उपकरण | विवरण |
|---|---|
performance_report | एकत्रित मेमोरी, कैश और कनेक्शन आँकड़े लौटाता है |
| उपकरण | विवरण |
|---|---|
transfer_metadata | बल्क स्थानांतरण के लिए नाम, टिप्पणियाँ और प्रोटोटाइप तैयार करता है |
परियोजना में चल रहे GUI IDA Pro सत्रों के साथ अंतर्निहित एकीकरण शामिल है, जो डेटाबेस लॉकिंग विरोध के बिना सक्रिय IDA विंडो से तत्काल निर्यात सक्षम करता है।
plugins/ निर्देशिका में कॉपी करें। यह IDA शुरू होने पर पोर्ट 28652 पर एक पृष्ठभूमि XML-RPC सर्वर शुरू करेगा।export_idb_to_diaphora को कॉल करते समय, MCP सर्वर पोर्ट 28652 की जाँच करता है। यदि कोई सत्र सक्रिय है, तो यह निर्यात सीधे GUI में चलाता है। अन्यथा, यह स्वचालित रूप से idat.exe के माध्यम से हेडलेस पृष्ठभूमि निष्पादन पर वापस आ जाता है।ब्रिज को कॉन्फ़िगर करने के विस्तृत निर्देशों के लिए, GUI_INSTRUCTIONS.md देखें।
अत्यधिक बड़ी परियोजनाओं को संसाधित करते समय, Diaphora MCP विशिष्ट अनुकूलन लागू करता है:
100000 (sys.setrecursionlimit) तक बढ़ा दी जाती है।diaphora_config.py में COMMIT_AFTER_EACH_GUI_UPDATE = False सेट करने से डिस्क लेखन कम होता है, GUI निर्यात 2x से 3x तेज़ होता है।EXPORTING_USE_MICROCODE = False Diaphora कॉन्फ़िग में) तेज़ निर्यात के लिए।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 को क्रियाशील देखने के लिए, निम्नलिखित उदाहरण देखें:
यदि आप इस प्रोटोकॉल का उपयोग करने वाले AI कोडिंग सहायक (जैसे Claude Code) हैं, तो निम्न अनुकूलता नियमों को ध्यान में रखें:
GUI बनाम हेडलेस निर्यात स्कीमा:
ida_mcp.py प्लगइन) के माध्यम से निर्यात करने पर एक कस्टम स्कीमा उत्पन्न होता है जिसमें calls, strings, structures जैसी तालिकाएँ होती हैं, लेकिन कोई program तालिका नहीं।idat.exe के माध्यम से) आधिकारिक Diaphora स्कीमा उत्पन्न करता है जिसमें program तालिका शामिल है।diff_diaphora_dbs) को आधिकारिक स्कीमा की आवश्यकता है। यदि आप डेटाबेस की तुलना/डिफ़ करना चाहते हैं तो हमेशा हेडलेस निर्यात करें।GUI में लॉक किए गए डेटाबेस:
डेटाबेस नाम टकराव से बचें:
<basename>.diaphora.sqlite हैं।जाँच किए गए IDA Pro 9.3 फिक्स्चर रिग्रेशन सूट पास करते हैं: 16 passed, 1 xpassed. दो SQLite3 DLLs का एक वास्तविक स्टेज्ड निर्यात और Diaphora डिफ़ भी सत्यापित किया गया था। बड़े या GUI-खुले IDB के लिए अभी भी एक मुफ्त IDA लॉक, एक मान्य DIAPHORA_OUTPUT_ROOT, और पर्याप्त बड़ा MCP क्लाइंट टाइमआउट आवश्यक है।
MIT
| चर | विवरण | उदाहरण |
|---|
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) |
| उपकरण | विवरण |
|---|
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 | सामान्य डेटाबेस मेटाडेटा पुनर्प्राप्त करता है |
<basename>.sqliteida-pro-mcp