IDA Pro और Ghidra के लिए TCP JSON ब्रिज सर्वर, जो डीकंपाइलेशन, xrefs, symbols, vtables, RTTI और मेमोरी पैचिंग को बाहरी स्क्रिप्ट्स और स्वचालित पाइपलाइनों तक उजागर करते हैं।
IDA Pro और Ghidra के लिए हल्के TCP JSON ब्रिज सर्वर जो रिवर्स-इंजीनियरिंग वर्कफ़्लो को एक सरल सॉकेट प्रोटोकॉल के माध्यम से उजागर करते हैं।
बाहरी टूल्स, CLI स्क्रिप्ट्स, Python यूटिलिटीज़, और स्वचालित पाइपलाइन्स को मैन्युअल GUI इंटरैक्शन के बिना डीकंपाइलेशन, xrefs, सिंबल्स, वर्चुअल टेबल्स, RTTI, स्ट्रक्चर्स, और पैच मेमोरी को क्वेरी करने की अनुमति देता है।
जब एक साथ कई बाइनरीज़ के साथ बड़े रिवर्सिंग प्रोजेक्ट्स पर काम कर रहे हों (जैसे गेम क्लाइंट, लॉन्चर, DLL प्रॉक्सीज़, और स्टब्स एक साथ):
BASE_PORT = 5073 से स्कैनिंग शुरू करता है और स्वचालित रूप से क्रमिक पोर्ट्स (5073, 5074, 5075, 5076...) को प्रोब करता है जब तक कि कोई उपलब्ध न मिल जाए।IDA Pro में, Python इंटरप्रेटर कई स्क्रिप्ट निष्पादनों में जीवित रहता है:
ID_Server.py चल रहे सर्वर हैंडल को builtins._ida_bridge_prev में रजिस्टर करता है।stop() को इनवोक करता है और उसके थ्रेड को जॉइन करता है (join(3.0)), नए सर्वर को शुरू करने से पहले पोर्ट को साफ़ तौर पर रिलीज़ करता है।Address already in use या ऑर्फ़न थ्रेड्स नहीं मिलते।QUIT, STOP, EXIT, या SHUTDOWN भेजें। सर्वर {"ok": true, "shutdown": true} के साथ पुष्टि करता है और तुरंत बंद हो जाता है।ida_bridge_stop() कॉल करें, या बस IDA बंद करें (डेमन थ्रेड्स स्वचालित रूप से बाहर निकल जाते हैं)।is_cancelled() को सॉकेट टाइमआउट के माध्यम से हर 1s में चेक किया जाता है), या QUIT भेजें।.idb / .i64) खोलें।File -> Script file... / Alt+F7 के माध्यम से), निष्पादित करें:
import ID_Server
127.0.0.1:5073 पर सुनना शुरू करता है (या अगले उपलब्ध पोर्ट पर)।ida_bridge_stop()
Window -> Script Manager) में, Ghidra_Server.py वाला फ़ोल्डर जोड़ें या इसे सीधे Python इंटरप्रेटर में चलाएँ।127.0.0.1:5073 से बाइंड होता है (या अगले मुफ़्त पोर्ट से)।कमांड्स TCP (127.0.0.1:<PORT>) पर भेजे जाने वाले सादे न्यूलाइन-डेलिमिटेड स्ट्रिंग्स हैं। सर्वर एक JSON ऑब्जेक्ट के साथ जवाब देता है (या लीगेसी कमांड्स के लिए टैब-डेलिमिटेड टेक्स्ट)।
| कमांड | सिंटैक्स | विवरण |
|---|---|---|
PING | PING | हेल्थ चेक। "pong" रिटर्न करता है। |
CURRENT | CURRENT | वर्तमान कर्सर एड्रेस, फ़ंक्शन नाम, आकार, असेंबली निर्देश, और डीकंपाइल्ड कोड रिटर्न करता है। |
NAME | NAME <ea> | <ea> पर परिभाषित सिंबल/फ़ंक्शन नाम रिटर्न करता है। |
FUNC | FUNC <addr> | पूर्ण फ़ंक्शन मेटाडेटा, एंट्री पॉइंट, आकार, सिग्नेचर, असेंबली, और Hex-Rays/Ghidra डीकंपाइलेशन रिटर्न करता है। |
DECOMP | DECOMP <addr> | FUNC के लिए उपनाम। टारगेट फ़ंक्शन को डीकंपाइल करता है। |
DISASM | DISASM <ea> [n] | <ea> से शुरू होकर [n] निर्देशों के लिए डिसअसेंबली लाइन्स रिटर्न करता है (डिफ़ॉल्ट: 40)। |
FIND | FIND <substr> | <substr> से मेल खाने वाले सभी सिंबल्स और फ़ंक्शन नामों में केस-इनसेंसिटिव सर्च (300 मैच तक)। |
EXPORT | EXPORT [path] | सभी नॉन-डमी सिंबल्स, मैंगल्ड और डीमैंगल्ड नामों को एक टेक्स्ट फ़ाइल में एक्सपोर्ट करता है (डिफ़ॉल्ट: C:\Contexto\ida_names.txt)। |
HELP | HELP | सर्वर द्वारा समर्थित सभी उपलब्ध कमांड्स की JSON सूची रिटर्न करता है। |
QUIT | QUIT | क्लाइंट कनेक्शन को ग्रेसफुली बंद करता है और ब्रिज सर्वर सॉकेट को रोकता है। |
| कमांड | सिंटैक्स | विवरण |
|---|---|---|
XREF | XREF <addr> | <addr> को लक्षित करने वाले सभी इनकमिंग क्रॉस-रेफ़रेंस (कोड कॉल्स, डेटा रीड्स/राइट्स) की सूची बनाता है। |
XFROM | XFROM <addr> | <addr> से उत्पन्न होने वाले सभी आउटगोइंग क्रॉस-रेफ़रेंस की सूची बनाता है। |
CALLERS | CALLERS <addr> | इनकमिंग रेफ़रेंस को फ़िल्टर करके केवल कॉल साइट्स रिटर्न करता है (रिज़ॉल्व्ड इनडायरेक्ट कॉल्स सहित)। |
READERS | READERS <addr> | इनकमिंग रेफ़रेंस को फ़िल्टर करके केवल वे निर्देश रिटर्न करता है जो <addr> से रीड करते हैं। |
WRITERS | WRITERS <addr> | इनकमिंग रेफ़रेंस को फ़िल्टर करके केवल वे निर्देश रिटर्न करता है जो <addr> पर राइट करते हैं। |
DECOMP_XREF | DECOMP_XREF <addr> | एक ही रिक्वेस्ट में <addr> के प्रत्येक कॉलिंग फ़ंक्शन को बैच-डीकंपाइल करता है। |
IMPORTXREF | IMPORTXREF <name> | एक इम्पोर्टेड Windows/C API के लिए पूरे बाइनरी में सभी कॉल साइट्स का पता लगाता है (जैसे IMPORTXREF WSASendTo)। |
TRACE | TRACE <addr> | <addr> के आसपास के एक्ज़ीक्यूशन फ़्लो और बेसिक ब्लॉक्स को ट्रेस करता है। |
| कमांड | सिंटैक्स | विवरण |
|---|---|---|
READPTR | READPTR <addr> [count] | मेमोरी को पॉइंटर चेन्स (32-बिट या 64-बिट) के रूप में पढ़ता है और प्रत्येक टारगेट को वर्गीकृत करता है (func, string, vtable)। |
FINDPTR | FINDPTR <addr> | <addr> को रेफ़रेंस करने वाले किसी भी पॉइंटर को खोजने के लिए ग्लोबल डेटा और टेबल्स को स्कैन करता है (vtables, डिस्पैच टेबल्स ढूँढता है)। |
STRUCT | STRUCT <addr> [n] | फ़ील्ड्स को ints, floats, pointers, और strings के रूप में इंटरप्रेट करते हुए संलग्न मेमोरी को ह्यूरिस्टिकली डंप करता है। |
DEFSTRUCT | DEFSTRUCT <name> [size] | डेटाबेस टाइप लाइब्रेरी में एक नया नामित स्ट्रक्चर बनाता है। |
SETFIELD | SETFIELD <struct> <off> <type> [name] | <off> पर <type> और वैकल्पिक फ़ील्ड नाम के साथ एक स्ट्रक्चर फ़ील्ड को परिभाषित या संशोधित करता है। |
MKPTRS | MKPTRS <addr> [count] | रॉ डेटाबेस बाइट्स को बल्क में टाइप्ड पॉइंटर्स में परिवर्तित करता है। |
NEARSTR | NEARSTR <addr> | रेंज के भीतर कोड या डेटा सेक्शन्स में पास स्थित स्ट्रिंग रेफ़रेंस ढूँढता है। |
| कमांड | सिंटैक्स | विवरण |
|---|---|---|
VTABLE | VTABLE <funcaddr> | पहचानता है कि कौन से वर्चुअल टेबल्स में <funcaddr> है, जिसमें पड़ोसी मेथड स्लॉट्स भी शामिल हैं। |
VTDUMP | VTDUMP <addr> [count] | एक पूरी वर्चुअल टेबल डंप करता है: प्रत्येक स्लॉट को उसके मेथड नाम, ऑफ़सेट, और इंडेक्स में रिज़ॉल्व करता है। |
RTTI | RTTI <addr|Name> | क्लास हायरार्कीज़ और बेस क्लासेज़ को रिज़ॉल्व करने के लिए MSVC C++ RTTI स्ट्रक्चर्स (TypeDescriptor -> CompleteObjectLocator -> vftable) को ट्रैवर्स करता है। |
| कमांड | सिंटैक्स | विवरण |
|---|---|---|
STR | STR <ascii> | सभी लोडेड सेगमेंट्स में ASCII स्ट्रिंग्स खोजता है। |
WSTR | WSTR <utf16> | सभी लोडेड सेगमेंट्स में UTF-16 वाइड स्ट्रिंग्स खोजता है। |
BYTES | BYTES <hex> | रॉ ऑपकोड या डेटा बाइट सीक्वेंस खोजता है (जैसे BYTES 55 8B EC 83 EC)। |