
Плагин для IDA Pro, который импортирует символы, разрешаемые во время выполнения, в бинарных файлах .NET Native, анализируя SharedLibrary.dll и его PDB для восстановления отсутствующих импортов для анализа.

.NIET — это плагин для IDA Pro. Его назначение — импортировать отсутствующие символы (обычно несколько тысяч), которые разрешаются во время выполнения бинарными файлами, скомпилированными с помощью .NET Native. Эти символы находятся в SharedLibrary.dll и не экспортируются ею.
.NIET тестировался на IDA Pro 7.5 с использованием python 3.8 на следующих платформах:
В настоящее время этот плагин поддерживает следующие версии .NET Native framework:
Пожалуйста, создайте issue, если вы столкнулись с другой версией.
Скопируйте эти элементы в каталог плагинов IDA Pro:
dotNIET_plugin.py
dotNIET\
.NIET полагается на pefile для разбора каталогов ресурсов.
pefile можно установить следующим образом:
pip install pefile
Поскольку символы импортируются из SharedLibrary.dll, этот файл должен быть предоставлен .NIET вместе со своим pdb (его местоположение ищется плагином в _NT_SYMBOL_PATH).
Реализованы вспомогательные функции для определения версий .NET Native framework и проверки того, что pdb файла SharedLibrary.dll существует в настроенном пути символов.

.NIET можно запустить с помощью сочетания клавиш Alt-Shift-N или через меню Edit/Plugins.
При запуске плагин пытается определить версию .NET Native framework текущего бинарного файла. Вам остаётся только выбрать SharedLibrary.dll подходящей версии и нажать Run.
.NIET определит версию .NET Native framework целевой DLL и выведет сообщение, если версии не совпадают. Обычно важны только номера старшей и младшей версий (Major и Minor).
.NIET ищет таблицу пользовательских дескрипторов импорта .NET Native в секции .rdata. Для этого он читает данные по определённым смещениям структуры Custom Header, а затем разбирает массив порядковых номеров (ordinals).
Этот массив порядковых номеров указывает на различные места в записях пользовательской таблицы SharedLibrary.dll.
Разрешение символов выполняется путём запуска экземпляра IDA Pro в режиме headless через его бинарный файл idat для разбора pdb файла SharedLibrary.dll.
Символы импортируются как есть, если это возможно, но могут встретиться некоторые особые случаи:
jmpstubs на смещения или одиночные инструкции jmp на символы. Их имя символа заменяется .NIET на имя целевой функции с префиксом jmp_deref_X, где X — количество разыменований.EETableSection. Поскольку я новичок в .NET Native, я понятия не имею, что это такое (пока?), поэтому эти адреса помечаются как EETableSection_XXX, где XXX — смещения от EETableSection внутри SharedLibrary.dllSharedLibrary.dll, хотя исходная подпрограмма, отвечающая за разрешение символов, вероятно, предоставляет возможность разбирать и другие модули (я не знаю, действительно ли это происходит помимо модуля SharedLibrary.dll)idat файл журнала определяется как %tmpdir%/dotNIETlogs.txt
Потому что реверс-инжиниринг .NET Native — это кошмар