IDAPro के लिए एक और Golang बाइनरी पार्सर
अंग्रेज़ी | 中文
नोट:
अब नवीनतम master शाखा Python3 संस्करण है। पुरानी master शाखा को py2 शाखा में बदल दिया गया है, और अस्थायी रूप से अनुरक्षित नहीं है।
Python3 शाखा के लिए निर्देश
यह संस्करण macOS/Windows, IDA7.4+ और Python3.8.x पर विकसित और परीक्षण किया गया है,
यदि अन्य प्लेटफार्मों और संस्करणों पर समस्याएँ हैं, तो आपका स्वागत है कि आप issue या Pull Requests सबमिट करें।
इसके अतिरिक्त, यह ध्यान दिया जाना चाहिए कि macOS पर IDA7.4 डिफ़ॉल्ट रूप से स्थापित Python3 का उपयोग करता है, जिससे आपके द्वारा स्वयं स्थापित तृतीय-पक्ष लाइब्रेरी लोड होने में विफल हो सकती है। आपको brew द्वारा स्थापित Python पर स्विच करने की आवश्यकता है। कृपया विशिष्ट स्विचिंग विधियों के लिए इस स्क्रिप्ट का संदर्भ लें।
golang_loader_assist और jeb-golang-analyzer से प्रेरित होकर, मैंने IDAPro के लिए एक अधिक पूर्ण Go बाइनरी पार्सिंग टूल लिखा।
मुख्य विशेषताएँ:
- Go बाइनरी फ़ाइल में firstmoduledata संरचना का पता लगाएं और उसे पार्स करें, और प्रत्येक फ़ील्ड के लिए टिप्पणी बनाएं;
- firstmoduledata के अनुसार pclntab (PC लाइन तालिका) का पता लगाएं और इसे पार्स करें। फिर pclntab में फ़ंक्शन नाम और स्रोत फ़ाइल पथ खोजें, पार्स करें और पुनर्प्राप्त करें। स्रोत फ़ाइल पथ IDAPro के आउटपुट विंडो में मुद्रित होंगे;
- स्ट्रिंग्स और स्ट्रिंग पॉइंटर्स को पार्स करें, प्रत्येक स्ट्रिंग के लिए टिप्पणी बनाएं, और प्रत्येक स्ट्रिंग पॉइंटर के लिए dref बनाएं;
- firstmoduledata के अनुसार, प्रत्येक type को खोजें और इसे पार्स करें, type के प्रत्येक गुण के लिए टिप्पणी बनाएं, जो मैलवेयर शोधकर्ता के लिए एक जटिल प्रकार या डेटा संरचना परिभाषा का विश्लेषण करने में बहुत सुविधाजनक होगा;
- itab (इंटरफ़ेस तालिका) को पार्स करें।
Go बाइनरी के RE कार्य के लिए सहायक जानकारी:

और go_parser में दो उपयोगी विशेषताएं हैं:
- यह दोषपूर्ण फ़ाइल हेडर जानकारी वाले बाइनरी के लिए भी ठीक काम करता है, विशेष रूप से दोषपूर्ण सेक्शन हेडर जानकारी के लिए;
- उपरोक्त सभी विशेषताएं buildmode=pie के साथ बनाए गए बाइनरी के लिए मान्य हैं।
DDGMiner v5029 (MD5: 95199e8f1ab987cd8179a60834644663) में एक कॉन्फ़िग डेटा संरचना का पार्सिंग परिणाम नीचे दिया गया है:

और उपयोगकर्ता-परिभाषित स्रोत फ़ाइल पथ सूची:

प्रोजेक्ट फ़ाइलें:
- go_parser.py :प्रवेश फ़ाइल, [Alt+F7] दबाएं, इस फ़ाइल का चयन करें और निष्पादित करें;
- common.py: सामान्य चर और फ़ंक्शन परिभाषा;
- pclntbl.py: pclntab (PC लाइन तालिका) को पार्स करें;
- strings.py: स्ट्रिंग्स और स्ट्रिंग पॉइंटर्स को पार्स करें;
- moduldata.py: firstmoduledata को पार्स करें;
- types_builder.py: types को पार्स करें ;
- itab.py: itab (इंटरफ़ेस तालिका) को पार्स करें;
इसके अतिरिक्त, str_ptr.py स्ट्रिंग पॉइंटर्स के प्रारंभ पते और अंत पते को मैन्युअल रूप से निर्दिष्ट करके स्ट्रिंग पॉइंटर्स को पार्स करेगा।
नोट
- यह उपकरण Python3 में लिखा गया है, और IDA7.4+ पर परीक्षण किया गया है;
- स्ट्रिंग पार्सिंग मॉड्यूल golang_loader_assist से स्थानांतरित किया गया था, और मैंने स्ट्रिंग पॉइंटर्स पार्सिंग की सुविधा जोड़ी। यह अभी के लिए केवल x86 (32bit और 64bit) आर्किटेक्चर का समर्थन करता है।
संदर्भ
- गोलैंग एक्ज़ीक्यूटेबल्स का विश्लेषण
- GO बाइनरी को एक प्रो की तरह रिवर्स करना
- Go बाइनरी से प्रोग्राम सिमैंटिक्स का पुनर्निर्माण.pdf
- Go二进制文件逆向分析从基础到进阶——综述
- Go二进制文件逆向分析从基础到进阶——MetaInfo、函数符号和源码文件路径列表
- Go二进制文件逆向分析从基础到进阶——数据类型
- Go二进制文件逆向分析从基础到进阶——itab与strings
- Go二进制文件逆向分析从基础到进阶——Tips与实战案例