
Plugin do IDA Pro que importa símbolos resolvidos em tempo de execução em binários .NET Native, analisando o SharedLibrary.dll e seu PDB para restaurar imports ausentes para análise.

.NIET é um plugin para IDA Pro. Sua finalidade é importar símbolos ausentes (geralmente alguns milhares) que são resolvidos em tempo de execução por binários compilados com .NET Native. Esses símbolos residem em SharedLibrary.dll e não são exportados por ela.
.NIET foi testado no IDA Pro 7.5 usando python 3.8 nas seguintes plataformas:
Este plugin atualmente suporta as seguintes versões do .NET Native framework:
Por favor, crie uma issue se você encontrar outra versão.
Copie estes elementos para o diretório de plugins do seu IDA Pro:
dotNIET_plugin.py
dotNIET\
.NIET depende do pefile para analisar diretórios de recursos.
pefile pode ser instalado da seguinte forma:
pip install pefile
Como os símbolos são importados de SharedLibrary.dll, este arquivo deve ser fornecido ao .NIET juntamente com seu pdb (sua localização é procurada pelo plugin dentro de _NT_SYMBOL_PATH).
Helpers são implementados para identificar versões do .NET Native framework e verificar se o pdb de SharedLibrary.dll existe no caminho de símbolos configurado.

O .NIET pode ser iniciado usando o atalho Alt-Shift-N ou através do menu Edit/Plugins.
Ao iniciar, o plugin tenta identificar a versão do .NET Native framework do binário atual. Tudo o que você precisa fazer é selecionar SharedLibrary.dll na versão correta e clicar em Run.
O .NIET identificará a versão do .NET Native framework da dll alvo e exibirá uma mensagem se as versões não forem as mesmas. Os números de versão Major e Minor geralmente são os únicos que importam.
O .NIET procura pela tabela de descritores de importação personalizados do .NET Native na seção .rdata. Para isso, ele lê em offsets específicos de uma estrutura Custom Header e então analisa um array de ordinais.
Esse array de ordinais aponta para várias localizações dentro das entradas da tabela personalizada de SharedLibrary.dll.
A resolução de símbolos é alcançada iniciando uma instância headless do IDA Pro através de seu binário idat para analisar o pdb de SharedLibrary.dll.
Os símbolos são importados como estão, se possível, mas alguns casos extremos podem ser encontrados:
jmpstubs para offsets ou instruções jmp únicas para símbolos. Seus nomes de símbolo são substituídos pelo .NIET pelo nome da função alvo, precedido por jmp_deref_X é anexado a esse nome de símbolo, se encontrado, com X sendo o número de desreferências.EETableSection. Sendo novo no .NET Native, não faço ideia do que isso é (ainda?), então esses endereços são rotulados como EETableSection_XXX, sendo XXX os offsets de EETableSection dentro de SharedLibrary.dllpdb de binários bastante grandesSharedLibrary.dll, embora a rotina original responsável pela resolução de símbolos provavelmente ofereça a possibilidade de analisar outros módulos (não sei se isso realmente ocorre além do módulo SharedLibrary.dll)O logfile do idat é definido como %tmpdir%/dotNIETlogs.txt
Porque fazer engenharia reversa do .NET Native é um pesadelo