
MCP सर्वर स्वचालित बाइनरी डिफिंग के लिए।
अपने AI सहायक से दो IDA-विश्लेषित बाइनरी की तुलना करें। Diaphora MCP सहेजे गए IDA डेटाबेस को निर्यात करता है, Diaphora चलाता है, और AI को संबंधित फ़ंक्शन और उनके कॉल ग्राफ़ का निरीक्षण करने देता है।
डिफ़ॉल्ट इंटरफ़ेस में तुलना पर केंद्रित 10 टूल हैं। Diaphora मिलान प्रदान करता है; AI वास्तविक कोड पढ़ता है और परिवर्तनों की व्याख्या करता है।
त्वरित शुरुआत · उदाहरण · टूल · समस्या निवारण
old.i64 + new.i64 → headless export → SQLite exports + diff results
↓
summary → matched code → call graph
idat.exe/idat64 के साथ IDA Pro, और एक इंस्टॉल किया गया Diaphora प्लगइन।.i64/.idb डेटाबेस के रूप में सहेजा गया हो।IDA और Diaphora अलग-अलग इंस्टॉल किए जाते हैं। Diff-schema सत्यापन वर्तमान में Diaphora 3.4.1 को लक्षित करता है; अन्य स्कीमाओं के लिए संगतता अपडेट की आवश्यकता हो सकती है। Diff के लिए उपयोग किए जाने वाले Python इंटरप्रेटर में Diaphora की standalone निर्भरताएँ इंस्टॉल होनी चाहिए।
git clone https://github.com/xTeardx/diaphora-mcp.git
cd diaphora-mcp
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e .
New-Item -ItemType Directory -Force C:\diaphora-outputs | Out-Null
अपने क्लाइंट के MCP कॉन्फ़िगरेशन में यह प्रविष्टि जोड़ें। रिपॉज़िटरी, IDA और Diaphora पथों को अपने इंस्टॉलेशन पथों से बदलें। उस वातावरण से Python executable का उपयोग करें जहाँ आपने यह प्रोजेक्ट इंस्टॉल किया है।
{
"mcpServers": {
"diaphora": {
"command": "C:/src/diaphora-mcp/.venv/Scripts/python.exe",
"args": ["C:/src/diaphora-mcp/diaphora_mcp_server.py"],
"env": {
"IDAT_PATH": "C:/Program Files/IDA Professional 9.3/idat.exe",
"DIAPHORA_DIR": "C:/Program Files/IDA Professional 9.3/plugins/diaphora",
"DIAPHORA_OUTPUT_ROOT": "C:/diaphora-outputs"
}
}
}
}
क्लाइंट stdio के माध्यम से सर्वर लॉन्च करता है; शुरू करने के लिए कोई अलग वेब सेवा नहीं है। इसके कोड या वातावरण बदलने के बाद MCP सर्वर को पुनः आरंभ करें। एक सफल कनेक्शन नीचे सूचीबद्ध 10 टूल को उजागर करता है।
Use Diaphora to compare C:/analysis/old.i64 (old) against
C:/analysis/new.i64 (new). Save output under C:/diaphora-outputs/run-001.
Export headlessly with assembly detail, keep the exports, show a summary,
then inspect partial matches and explain the code changes in the interesting
functions. Use the result mapping when comparing functions and call graphs.
हर बार एक नई run डायरेक्टरी चुनें। मौजूदा जनरेट किए गए लक्ष्यों को कभी अधिलेखित नहीं किया जाता।
निम्नलिखित JSON ब्लॉक MCP टूल आर्गुमेंट हैं, शेल कमांड नहीं। आपका सहायक नामित टूल को सीधे कॉल कर सकता है। पथ और 0x401000 उदाहरण हैं; अपने स्वयं के run द्वारा लौटाए गए पथ और पते का उपयोग करें।
टूल: batch_export_and_diff। Old हमेशा पहला इनपुट होता है, new दूसरा।
{
"idb1_path": "C:/analysis/old.i64",
"idb2_path": "C:/analysis/new.i64",
"output_dir": "C:/diaphora-outputs/run-001",
"export_mode": "headless",
"use_decompiler": false,
"summaries_only": false,
"cleanup": false,
"limit": 100,
"unmatched_limit": 50
}
यह Hex-Rays की आवश्यकता के बिना assembly विवरण रखता है। अपनी आवश्यकता का export प्रोफ़ाइल चुनें:
| विवरण | use_decompiler | summaries_only | उपयोग |
|---|---|---|---|
| Matching summaries | false | true | तेज़ पहला पास; कोई विस्तृत कोड नहीं |
| Assembly | false | false | डीकंपाइलर के बिना disassembly की तुलना करें |
| Assembly + pseudocode | true | false | संगत Hex-Rays डीकंपाइलर के साथ कोड समीक्षा; धीमा |
हमेशा प्रतिक्रिया से आउटपुट पथ लें:
OLD_SQLITE = steps.export1.output
NEW_SQLITE = steps.export2.output
RESULTS = steps.diff.output
इस उदाहरण के लिए, जनरेट की गई फ़ाइलें run-001 के अंतर्गत old.diaphora.sqlite, new.diaphora.sqlite, और old_vs_new.diaphora हैं। समान इनपुट basenames अलग old_/new_ export नाम उत्पन्न करते हैं। बाद में फ़ंक्शन निरीक्षण के लिए cleanup=false रखें।
टूल: get_diff_summary।
{
"results_path": "C:/diaphora-outputs/run-001/old_vs_new.diaphora"
}
टूल: get_diff_results। यह पृष्ठ कम-अनुपात वाले आंशिक मिलानों से शुरू होता है।
{
"results_path": "C:/diaphora-outputs/run-001/old_vs_new.diaphora",
"match_type": "partial",
"min_ratio": 0.0,
"limit": 50,
"offset": 0,
"unmatched_limit": 50,
"unmatched_offset": 0,
"sort_by": "ratio",
"sort_order": "asc"
}
partial एक Diaphora मिलान श्रेणी चुनता है, व्यवहारिक परिवर्तन की गारंटी नहीं। सभी समर्थित श्रेणियों के लिए match_type="all" का उपयोग करें। प्रतिक्रिया में श्रेणी गणना, फ़िल्टर किया गया कुल, मिलान, unmatched पंक्तियाँ, next_offset और next_unmatched_offset शामिल हैं।
जारी रखने के लिए, लौटाए गए next offsets को अगली कॉल में कॉपी करें, समान फ़िल्टर और सॉर्ट रखते हुए। उदाहरण के लिए, यदि वे 50 और 50 हैं, तो offset=50 और unmatched_offset=50 का उपयोग करें। null next offset का अर्थ है कि वह सूची समाप्त हो गई है; उसे आगे बढ़ाना बंद करें। दोनों सूचियाँ स्वतंत्र रूप से आगे बढ़ती हैं। पृष्ठ आकार सकारात्मक होने चाहिए और 5000 पर सीमित हैं। सबसे मजबूत मिलानों को पहले देखने के लिए sort_order="desc" का उपयोग करें।
टूल: compare_functions।
{
"db1_path": "C:/diaphora-outputs/run-001/old.diaphora.sqlite",
"db2_path": "C:/diaphora-outputs/run-001/new.diaphora.sqlite",
"address": "0x401000",
"match_results_path": "C:/diaphora-outputs/run-001/old_vs_new.diaphora"
}
प्रतिक्रिया में function_old, function_new, उपलब्ध assembly/pseudocode, मापे गए अंतर, और identity साक्ष्य शामिल हैं। आप address के बजाय name का उपयोग कर सकते हैं। यदि दोनों सेलेक्टर प्रदान किए जाते हैं, तो address को प्राथमिकता मिलती है; नाम से चयन करते समय इसे छोड़ दें।
टूल: get_changed_callgraph उपरोक्त समान आर्गुमेंट स्वीकार करता है। यह परिवर्तनों की रिपोर्ट करने से पहले संबंधित caller/callee पतों का अनुवाद करता है, और अनसुलझे पड़ोसियों को पुष्ट किए गए edge अंतरों से अलग करता है।
हेक्साडेसिमल इनपुट को स्पष्ट बनाने के लिए 0x-प्रीफ़िक्स्ड पतों को प्राथमिकता दें। उपलब्ध होने पर match_results_path प्रदान करें: यह rebasing और नाम बदले गए फ़ंक्शन को संभालता है। अकेले समान पते identity स्थापित नहीं करते। अस्पष्ट या अनुपलब्ध मिलान विलोपन कहे जाने के बजाय अनसुलझे रहते हैं। यदि आपने मैन्युअल रूप से एक जोड़ी सत्यापित की है, तो आप स्पष्ट रूप से address2 या name2 प्रदान कर सकते हैं।
टूल: search_export_db। name_pattern SQL LIKE का उपयोग करता है: % किसी भी अनुक्रम से मेल खाता है।
{
"db_path": "C:/diaphora-outputs/run-001/old.diaphora.sqlite",
"name_pattern": "%parse%",
"min_instructions": 20,
"limit": 20
}
टूल: get_function_pseudocode अपने नाम के बावजूद उपलब्ध pseudocode और assembly लौटाता है।
{
"db_path": "C:/diaphora-outputs/run-001/old.diaphora.sqlite",
"address": "0x401000"
}
यदि pseudocode खाली है, तो एक संगत डीकंपाइलर का उपयोग करके use_decompiler=true और summaries_only=false के साथ एक नई run डायरेक्टरी में export को फिर से चलाएँ। export मेटाडेटा का निरीक्षण करने के लिए db_path के साथ get_export_info का उपयोग करें।
टूल: diff_diaphora_dbs। यह IDA export को छोड़ देता है और मौजूदा आधिकारिक SQLite exports की तुलना करता है।