
إضافة لـ IDA Pro تستورد الرموز التي تُحل في وقت التشغيل في الملفات الثنائية لـ .NET Native، عبر تحليل SharedLibrary.dll وملف PDB المرافق لها لاستعادة الاستيرادات المفقودة للتحليل.

.NIET هو مكوّن إضافي لـ IDA Pro. الغرض منه هو استيراد الرموز المفقودة (عادةً عدة آلاف) التي يتم حلها في وقت التشغيل بواسطة ثنائيات .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 والتحقق من وجود pdb الخاص بـ SharedLibrary.dll داخل مسار الرموز المُعدّ.

يمكن تشغيل .NIET باستخدام الاختصار Alt-Shift-N أو عبر قائمة Edit/Plugins.
عند التشغيل، يحاول المكوّن الإضافي تحديد إصدار إطار عمل .NET Native الثنائي الحالي. كل ما عليك فعله هو تحديد SharedLibrary.dll بالإصدار الصحيح ثم النقر على Run.
سيحدد .NIET إصدار إطار عمل .NET Native للملف dll الهدف ويعرض رسالة إذا لم تكن الإصدارات متطابقة. عادةً ما تكون أرقام الإصدار الرئيسي والثانوي هي الوحيدة المهمة.
يبحث .NIET عن جدول واصفات الاستيراد المخصص لـ .NET Native داخل قسم .rdata. للقيام بذلك، يقرأ من إزاحات محددة لبنية Custom Header ثم يحلل مصفوفة الأرقام الترتيبية.
تشير مصفوفة الأرقام الترتيبية هذه إلى مواقع مختلفة داخل إدخالات الجدول المخصص لـ SharedLibrary.dll.
يتم حل الرموز بتشغيل مثيل IDA Pro بدون واجهة رسومية عبر ثنائيه idat من أجل تحليل ملف pdb الخاص بـ SharedLibrary.dll.
يتم استيراد الرموز كما هي إذا أمكن، ولكن قد تتم مواجهة بعض الحالات الخاصة:
jmpstubs إلى إزاحات أو تعليمات jmp مفردة إلى رموز. يستبدل .NIET اسم رمزها باسم الدالة الهدف مع بادئة jmp_.deref_X باسم الرمز، إذا وُجد، حيث X هو عدد عمليات إلغاء الإشارة.EETableSection. لكوني جديدًا على .NET Native، ليس لدي أي فكرة عن ماهية هذا (حتى الآن؟) لذلك يتم تسمية هذه العناوين EETableSection_XXX، حيث XXX هي إزاحات من EETableSection داخل SharedLibrary.dll.pdb لثنائيات ضخمة إلى حد ماSharedLibrary.dll فقط على الرغم من أن الروتين الأصلي المسؤول عن حل الرموز من المحتمل أن يوفر إمكانية تحليل وحدات أخرى (لا أعرف ما إذا كان هذا يحدث فعلاً بعيدًا عن وحدة SharedLibrary.dll)يتم تعيين ملف السجل الخاص بـ idat إلى %tmpdir%/dotNIETlogs.txt
لأن الهندسة العكسية لـ .NET Native هي كابوس