

.NIET は IDA Pro プラグインです。その目的は、.NET Native でコンパイルされたバイナリが実行時に解決する欠落シンボル(通常は数千個)をインポートすることです。これらのシンボルは SharedLibrary.dll 内に存在し、この DLL からはエクスポートされません。
.NIET は、以下のプラットフォームで python 3.8 を使用し、IDA Pro 7.5 でテストされています:
このプラグインは現在、以下の .NET Native フレームワーク バージョンをサポートしています:
別のバージョンに遭遇した場合は、issue を作成してください。
以下の要素を IDA Pro のプラグインディレクトリにコピーしてください:
dotNIET_plugin.py
dotNIET\
.NIET は、リソースディレクトリを解析するために pefile に依存しています。
pefile は次のようにインストールできます:
pip install pefile
シンボルは SharedLibrary.dll からインポートされるため、この DLL は その pdb と一緒に .NIET に提供されなければなりません(プラグインは _NT_SYMBOL_PATH 内で pdb の場所を検索します)。
.NET Native フレームワークのバージョンを特定し、設定されたシンボルパス内に SharedLibrary.dll の pdb が存在することを確認するためのヘルパーが実装されています。

.NIET は、ショートカット Alt-Shift-N または Edit/Plugins メニューから起動できます。
起動時、プラグインは現在のバイナリの .NET Native フレームワークバージョンを特定しようとします。正しいバージョンの SharedLibrary.dll を選択して Run をクリックするだけです。
.NIET は対象 DLL の .NET Native フレームワークバージョンを特定し、バージョンが一致しない場合はメッセージを表示します。通常、Major バージョンと Minor バージョンの番号だけが重要です。
.NIET は、.rdata セクション内で .NET Native カスタムインポート記述子テーブルを探します。そのために、Custom Header 構造体の特定のオフセットを読み取り、オーディナル配列を解析します。
このオーディナル配列は、SharedLibrary.dll のカスタムテーブルエントリ内のさまざまな場所を指します。
シンボル解決は、SharedLibrary.dll の pdb を解析するために、IDA Pro のバイナリ idat を通してヘッドレスインスタンスを起動することで実現されます。
シンボルは可能であればそのままインポートされますが、いくつかの特殊なケースに遭遇する場合があります:
jmpstubs シンボルか、シンボルへの単一の jmp 命令であることがあります。それらのシンボル名は、.NIET によって、jmp_ が前置されたターゲット関数名に置き換えられます。deref_X が追加されます。X はデリファレンスの回数です。EETableSection テーブル内のオフセットを指します。私は .NET Native に不慣れで、これが何であるか(まだ)わからないため、これらのアドレスは EETableSection_XXX としてラベル付けされます。XXX は SharedLibrary.dll 内の EETableSection からのオフセットです。pdb を解析する必要があるため、かなり遅いですSharedLibrary.dll モジュールからのみシンボルを解析しますが、シンボル解決を担当する元のルーチンは他のモジュールも解析できる可能性があります(SharedLibrary.dll モジュール以外で実際に発生するかどうかはわかりません)idat の ログファイル は %tmpdir%/dotNIETlogs.txt に定義されています。
.NET Native のリバースエンジニアリングは悪夢だからです。