
Plugin IDA Pro qui importe les symboles résolus au runtime dans les binaires .NET Native, en analysant SharedLibrary.dll et son PDB pour restaurer les imports manquants pour l'analyse.

.NIET est un plugin IDA Pro. Son objectif est d'importer les symboles manquants (généralement quelques milliers) qui sont résolus à l'exécution par les binaires compilés avec .NET Native. Ces symboles se trouvent dans SharedLibrary.dll et ne sont pas exportés par celle-ci.
.NIET a été testé sur IDA Pro 7.5 avec python 3.8 sur les plateformes suivantes :
Ce plugin prend actuellement en charge les versions suivantes du framework .NET Native :
Veuillez créer une issue si vous rencontrez une autre version.
Copiez ces éléments dans votre répertoire de plugins IDA Pro :
dotNIET_plugin.py
dotNIET\
.NIET s'appuie sur pefile pour analyser les répertoires de ressources.
pefile peut être installé de la manière suivante :
pip install pefile
Étant donné que les symboles sont importés depuis SharedLibrary.dll, cette dernière doit être fournie à .NIET avec son pdb (l'emplacement de celui-ci est recherché par le plugin dans _NT_SYMBOL_PATH).
Des fonctions d'aide sont implémentées pour identifier les versions du framework .NET Native et vérifier que le pdb de SharedLibrary.dll existe dans le chemin de symboles configuré.

.NIET peut être lancé à l'aide du raccourci Alt-Shift-N ou via le menu Edit/Plugins.
Au lancement, le plugin tente d'identifier la version du framework .NET Native du binaire courant. Tout ce que vous avez à faire est de sélectionner SharedLibrary.dll dans la version correspondante, puis de cliquer sur Run.
.NIET identifiera la version du framework .NET Native de la dll cible et affichera un message si les versions ne sont pas identiques. Les numéros de version Majeure et Mineure sont généralement les seuls qui comptent.
.NIET recherche la table des descripteurs d'importation personnalisés .NET Native dans la section .rdata. Pour ce faire, il lit à des offsets spécifiques d'une structure Custom Header puis analyse un tableau d'ordinaux.
Ce tableau d'ordinaux pointe vers différents emplacements dans les entrées de la table personnalisée de SharedLibrary.dll.
La résolution des symboles est effectuée en lançant une instance headless d'IDA Pro via son binaire idat afin d'analyser le pdb de SharedLibrary.dll.
Les symboles sont importés tels quels si possible, mais certains cas limites peuvent être rencontrés :
jmpstubs vers des offsets ou de simples instructions jmp vers des symboles. .NIET remplace leur nom de symbole par le nom de la fonction cible précédé de jmp_deref_X est ajouté à ce nom de symbole, s'il est trouvé, X étant le nombre de déréférencements.EETableSection. Étant novice en .NET Native, je n'ai aucune idée de ce que c'est (encore ?), donc ces adresses sont étiquetées EETableSection_XXX, XXX étant des offsets depuis EETableSection dans SharedLibrary.dllpdb de binaires assez volumineuxSharedLibrary.dll, alors que la routine d'origine chargée de la résolution des symboles offre probablement la possibilité d'analyser d'autres modules (je ne sais pas si cela se produit réellement en dehors du module SharedLibrary.dll)Le fichier journal de idat est défini sur %tmpdir%/dotNIETlogs.txt.
Parce que le reversing de .NET Native est un cauchemar