BinDiffHelper
Ghidra एक्सटेंशन जो आपके Ghidra प्रोजेक्ट पर BinDiff का उपयोग करके मेल खाते फ़ंक्शन ढूंढता है और उन्हें स्वचालित रूप से नाम बदल देता है (BinDiff 6, 7, 8 समर्थित)।
यह कैसे काम करता है और यह फ़ंक्शन / बेसिक ब्लॉक्स को कैसे मैच करता है, यह देखने के लिए BinDiff मैनुअल देखें। हालाँकि, इस एक्सटेंशन के साथ, BinDiff Ghidra के भीतर से स्वचालित हो जाता है, इसलिए आपको अपने बाइनरीज़ को स्वयं डिफ़ करने की आवश्यकता नहीं है।
कृपया बग की रिपोर्ट github पर issue फ़ीचर के माध्यम से करें
Changelog
v0.7.1
v0.7.0 (Ghidra संस्करण >= 11.4)
- Ghidra संस्करण संगतता के अलावा कोई बदलाव नहीं
v0.6.4 (Ghidra संस्करण < 11.4)
- Export namespace समर्थन
- डिफ़िंग पर अनिश्चितकालीन हैंग को ठीक किया
v0.6.3
- टेबल सॉर्टिंग की अनुमति दें
v0.6.2
- एक बग को ठीक किया जहाँ BinDiff 8 पर डिफ़िंग हमेशा के लिए हैंग हो जाती थी
- किसी सिंबल पर डबल क्लिक करने पर, इसे प्राइमरी और सेकेंडरी दोनों कोड लिस्टिंग में फॉलो करें
v0.6
v0.5
- BinDiff 8 का समर्थन करें
- Ghidra 11.1 के लिए रिलीज़
पुराने बदलाव
### v0.4.3
* Ghidra 11.0 के लिए रिलीज़
v0.4.2
- सभी फ़ंक्शन्स को इम्पोर्ट करने के लिए फ़ंक्शन जोड़ें (केवल टेबल में चेक किए गए वाले ही नहीं)
- टेबल में कई एलिमेंट्स के लिए चेकबॉक्स टॉगल करने के लिए फ़ंक्शन जोड़ें
- Ghidra 10.3 का समर्थन करने के लिए अपडेट करें
v0.4.1
- Gradle 7.5 और Ghidra 10.1 का समर्थन करने के लिए अपडेट करें
v0.4.0
- BinDiff 7 और Ghidra 10 का समर्थन करें
v0.3.2
- एक बग को ठीक किया जहाँ एक ही प्रोजेक्ट से भिन्न फ़ाइल के साथ डिफ़िंग काम नहीं करती थी
- एक बग को ठीक किया जहाँ छोटे नामों (< 3 अक्षर>) वाली फ़ाइलों को डिफ़ नहीं किया जा सकता था
v0.3.1
- "from project" विकल्प के माध्यम से फ़ाइल खोलते समय होने वाले क्रैश को ठीक किया
v0.3
- लिस्टिंग में मेल खाते फ़ंक्शन्स को रंगना
- लिस्टिंग में मेल खाते फ़ंक्शन्स में दूसरे बाइनरी से लिंक करने वाली टिप्पणियाँ जोड़ें
- एक बग को ठीक किया जहाँ कुछ बिल्ड्स में protobuf लाइब्रेरी गायब थी
- नया फ़ाइल लोड मेनू
v0.2
- एक बग को ठीक किया जहाँ जिस फ़ाइल में इम्पोर्ट करना था उसे चेकआउट करना आवश्यक था।
- प्रोजेक्ट फ़ाइल चयन डायलॉग का आकार बढ़ाएँ
v0.1
- Ghidra में खोले गए बाइनरी को उसी Ghidra प्रोजेक्ट से किसी अन्य बाइनरी के साथ BinDiff करें, परिणाम दिखाएँ और फ़ंक्शन नाम इम्पोर्ट करें
- दो .BinExport फ़ाइलों से BinDiff 6 के साथ बनाई गई एक BinDiff फ़ाइल खोलें और Ghidra में मेल खाते फ़ंक्शन नाम इम्पोर्ट करें
कैसे इंस्टॉल करें
या तो release से .zip-फ़ाइल डाउनलोड करें, यदि यह आपके Ghidra संस्करण के अनुकूल है, अन्यथा नीचे How to build देखें।
- Ghidra खोलें
- Main Window में: File->Install Extensions... पर जाएँ
- ऊपर दाईं ओर +-बटन पर क्लिक करें और BinDiffHelper zip फ़ाइल चुनें
- प्लगइन मैनेजर बंद करें। नया प्लगइन लोड करने के लिए Ghidra को पुनः आरंभ करें
- नीचे Usage देखें
अनुशंसित अन्य टूल्स
इनके बिना, आप केवल .BinDiff फ़ाइलें इम्पोर्ट कर पाएंगे और अपने Ghidra प्रोजेक्ट से स्वचालित रूप से एक्सपोर्ट और डिफ़ नहीं कर पाएंगे
उपयोग
सुनिश्चित करें कि प्लगइन Code Explorer में लोड है, Ghidra में एक फ़ाइल खोलकर और Code Explorer में File->Configure पर जाकर
ऊपर दाईं ओर छोटे plug-आइकन पर क्लिक करें:

और सुनिश्चित करें कि BinDiffHelperPlugin के बगल में चेकबॉक्स चेक है।

बाहरी .BinDiff इम्पोर्ट करें
संबंधित .BinExport-फ़ाइलें उसी फ़ोल्डर में होनी चाहिए।
जिस फ़ाइल में नाम इम्पोर्ट करना है उसे code Browser में खोलें, फिर Window->BinDiffHelper पर जाएँ

Open from BinDiff बटन या मेनू आइटम का उपयोग करें और अपनी .BinDiff फ़ाइल चुनें।

आप जो भी फ़ंक्शन नाम इम्पोर्ट करना चाहते हैं उन सभी को चुनें और ऊपर दाईं ओर Import function names बटन या मेनू आइटम पर क्लिक करें।
Ghidra प्रोजेक्ट में फ़ाइलों के बीच तुलना करें
Window->BinDiffHelper पर जाएँ, सुनिश्चित करें कि BinExport या BinDiff से संबंधित कोई चेतावनी नहीं है, फिर Open from project बटन पर क्लिक करें।
ट्री से दूसरी फ़ाइल चुनें और OK पर क्लिक करें।

कैसे बनाएँ
आवश्यकताएँ:
- Ghidra इंस्टॉलेशन (https://ghidra-sre.org) या सोर्स से कंपाइल करें
- कोई jdk। आपका Ghidra कैसे बनाया गया था और आप कौन से अन्य प्लगइन्स उपयोग कर रहे हैं, इसके आधार पर कुछ प्रतिबंध हो सकते हैं। मैं Temurin 21 LTS का उपयोग करने की सलाह देता हूँ, क्योंकि यह वर्तमान में BinExport और BinDiffHelper दोनों के साथ काम करता प्रतीत होता है।
- gradle (7.5, 8.10 के साथ परीक्षण किया गया)
रिपॉजिटरी क्लोन करें
रिपॉजिटरी को रिकर्सिवली क्लोन करें, क्योंकि यह संबंधित प्रोटोकॉल बफ़र परिभाषा के लिए BinExport पर निर्भर करती है।
git clone --recurse-submodules https://github.com/ubfx/BinDiffHelper.git
इसे बनाएँ
आपको GHIDRA_INSTALL_DIR एनवायरनमेंट वेरिएबल को Ghidra इंस्टॉलेशन डिर में सेट करना होगा।
यदि आपके पास अलग-अलग JDKs इंस्टॉल हैं, तो सुनिश्चित करें कि एनवायरनमेंट वेरिएबल JAVA_HOME उसी की ओर इंगित करता है जिसका उपयोग आपका Ghidra इंस्टॉलेशन करता है।
एक्सटेंशन विशेष रूप से उस Ghidra संस्करण के लिए बनाया जाएगा।
और फिर अपने शेल में BinDiffHelper फ़ोल्डर में जाएँ और करें
gradle
यह संबंधित सबमॉड्यूल में BinExport और पैरेंट डायरेक्टरी में BinDiffHelper दोनों को बनाएगा। dist डायरेक्टरी में एक .zip-फ़ाइल बनाई गई होनी चाहिए। उस .zip फ़ाइल का उपयोग ऊपर दिए गए निर्देशों के अनुसार इंस्टॉल करने के लिए करें।
डेवलपमेंट / डीबगिंग सेटअप
कभी-कभी एक्सटेंशन को Ghidra के साथ डीबग करने में सक्षम होना उपयोगी होता है, इस पर कुछ नोट्स यहाँ हैं:
- Ghidra को क्लोन और बिल्ड करें और DevGuide के अनुसार gradle को eclipse प्रोजेक्ट्स बनाने दें
- प्रोजेक्ट्स को eclipse में इम्पोर्ट करें (सुनिश्चित करें कि इसमें एक्सटेंशन डेवलपमेंट के लिए प्रासंगिक प्लगइन्स हैं)
- PyDev इंस्टॉल करें (http://www.pydev.org/updates eclipse रिपॉजिटरी के रूप में)
- GhidraDev इंस्टॉल करें
- Ghidra बिल्ड को अनपैक करें और GhidraDev को उससे लिंक करें। शायद
GHIDRA_INSTALL_DIR एनवायरनमेंट वेरिएबल सेट करना पड़ सकता है
- eclipse से Ghidra चलाएँ और BinExport एक्सटेंशन इंस्टॉल करें
gradle build eclipse के साथ BinDiffHelper eclipse प्रोजेक्ट बनाएँ
- इसे eclipse में इम्पोर्ट करें और GhidraDev का उपयोग करके इसे Ghidra बिल्ड से लिंक करें।
- Debug As->Ghidra