
IDA Pro प्लगइन जो .NET Native बाइनरीज़ में रनटाइम-रिज़ॉल्व्ड सिंबल्स को इम्पोर्ट करता है, विश्लेषण के लिए लापता इम्पोर्ट्स को पुनर्स्थापित करने हेतु SharedLibrary.dll और इसके PDB को पार्स करता है।

.NIET एक IDA Pro प्लगइन है। इसका उद्देश्य उन लुप्त प्रतीकों (symbols) को आयात करना है (आमतौर पर कुछ हज़ार), जिन्हें रनटाइम पर .NET Native संकलित बाइनरियों द्वारा हल किया जाता है। ये प्रतीक SharedLibrary.dll में स्थित होते हैं और इसके द्वारा निर्यात नहीं किए जाते हैं।
.NIET का परीक्षण IDA Pro 7.5 पर python 3.8 का उपयोग करके निम्नलिखित प्लेटफ़ॉर्म पर किया गया है:
यह प्लगइन वर्तमान में निम्नलिखित .NET Native फ्रेमवर्क संस्करणों का समर्थन करता है:
यदि आपको कोई अन्य संस्करण मिले तो कृपया एक issue बनाएँ।
इन तत्वों को अपने IDA Pro प्लगइन निर्देशिका में कॉपी करें:
dotNIET_plugin.py
dotNIET\
.NIET संसाधन निर्देशिकाओं को पार्स करने के लिए pefile पर निर्भर करता है।
pefile को निम्नानुसार स्थापित किया जा सकता है:
pip install pefile
चूँकि प्रतीक SharedLibrary.dll से आयात किए जाते हैं, इसे .NIET को इसके pdb के साथ प्रदान किया जाना चाहिए (प्लगइन द्वारा इसका स्थान _NT_SYMBOL_PATH के भीतर खोजा जाता है)।
सहायक फ़ंक्शन लागू किए गए हैं ताकि .NET Native फ्रेमवर्क संस्करणों की पहचान की जा सके और यह सत्यापित किया जा सके कि SharedLibrary.dll का pdb कॉन्फ़िगर किए गए symbols पथ के भीतर मौजूद है।

.NIET को शॉर्टकट Alt-Shift-N के माध्यम से या Edit/Plugins मेनू के माध्यम से लॉन्च किया जा सकता है।
लॉन्च होने पर, प्लगइन वर्तमान बाइनरी के .NET Native फ्रेमवर्क संस्करण की पहचान करने का प्रयास करता है। आपको बस सही संस्करण में SharedLibrary.dll का चयन करना है और फिर Run पर क्लिक करना है।
.NIET लक्षित dll के .NET Native फ्रेमवर्क संस्करण की पहचान करेगा और यदि संस्करण समान नहीं हैं तो एक संदेश प्रदर्शित करेगा। Major और Minor संस्करण संख्याएँ आमतौर पर केवल वही होती हैं जो मायने रखती हैं।
.NIET .rdata अनुभाग के भीतर .NET Native कस्टम import descriptors तालिका की खोज करता है। ऐसा करने के लिए, यह एक Custom Header संरचना के विशिष्ट ऑफसेट्स पर पढ़ता है और फिर एक ordinals सरणी को पार्स करता है।
यह ordinals सरणी SharedLibrary.dll की कस्टम तालिका प्रविष्टियों के भीतर विभिन्न स्थानों की ओर इंगित करती है।
प्रतीक समाधान (symbol resolution) IDA Pro के हेडलेस इंस्टेंस को उसके बाइनरी idat के माध्यम से लॉन्च करके प्राप्त किया जाता है, ताकि SharedLibrary.dll के pdb को पार्स किया जा सके।
प्रतीक संभव होने पर यथावत आयात किए जाते हैं, लेकिन कुछ किनारे के मामले (corner cases) सामने आ सकते हैं:
कभी-कभी आयातित पते केवल ऑफसेट के jmpstubs प्रतीक होते हैं या प्रतीकों के लिए एकल jmp निर्देश होते हैं। उनके प्रतीक नाम को .NIET द्वारा लक्षित फ़ंक्शन के नाम से बदल दिया जाता है, जिसमें jmp_ उपसर्ग जोड़ा जाता है।
.NET Native रनटाइम द्वारा हल किए गए कुछ पते कई dereference के बाद प्रतीकों की ओर इंगित करते हैं। यदि .NIET को किसी आयातित पते पर कोई प्रतीक नहीं मिलता है, तो वह तब तक dereference करने का प्रयास करता है जब तक उसे एक न मिल जाए। यदि मिल जाता है, तो deref_X को इस प्रतीक नाम के साथ जोड़ा जाता है, जहाँ X dereference की संख्या है।
कुछ पते EETableSection तालिका के भीतर ऑफसेट की ओर इंगित करते हैं। .NET Native में नया होने के कारण, मुझे नहीं पता कि यह (अभी तक?) क्या है, इसलिए इन पतों को EETableSection_XXX लेबल किया जाता है, XXX SharedLibrary.dll के भीतर EETableSection से ऑफसेट है।
macOS IDA Pro संस्करण पर (अभी तक) काम नहीं करता है।
.NIET काफी धीमा है क्योंकि इसे काफी बड़े बाइनरी के pdb को पार्स करने की आवश्यकता होती है।
"restore .idata" विकल्प (एक प्रकार का "undo" विकल्प) केवल आयातित प्रतीकों को अनसेट करता है। चूँकि IDA आयात के दौरान नामों को स्वचालित रूप से (automagically) प्रचारित करता है, यदि आप आयातित प्रतीकों के सभी निशान हटाना चाहते हैं तो आपको संभवतः फिर से auto-analysis चलाने की आवश्यकता होगी। एक वैकल्पिक उपाय प्लगइन चलाने से पहले डेटाबेस स्नैपशॉट बनाना हो सकता है।
.NIET केवल SharedLibrary.dll मॉड्यूल से प्रतीकों को पार्स करता है, हालाँकि प्रतीकों के समाधान के लिए जिम्मेदार मूल रूटीन संभवतः अन्य मॉड्यूल को पार्स करने की संभावना प्रदान करता है (मुझे नहीं पता कि SharedLibrary.dll मॉड्यूल के अलावा ऐसा वास्तव में होता है या नहीं)।
idat का logfile %tmpdir%/dotNIETlogs.txt पर परिभाषित है।
क्योंकि .NET Native की रिवर्स इंजीनियरिंग करना एक दुःस्वप्न है।