
Biblioteca de Python para analizar metadatos CLR/PE en ensamblados .NET, que expone flujos y huellas hash para apoyar el análisis de malware y la caza de amenazas.
dotnetfile es una librería de análisis del encabezado Common Language Runtime (CLR) para archivos .NET de Windows, escrita en Python. El encabezado CLR está presente en todos los ensamblados .NET de Windows junto con el encabezado Portable Executable (PE). Almacena una gran cantidad de información de metadatos de la parte administrada del archivo.
dotnetfile es, en cierto modo, el equivalente de pefile pero para muestras .NET.
La librería proporciona una API fácil de usar, pero también intenta aportar nuevos métodos para mejorar la detección de archivos. Esto incluye el hash MemberRef (experimental) y la versión original y una versión modificada del hash TypeRef.
El objetivo de este proyecto es ofrecer a los analistas de malware y a los cazadores de amenazas una herramienta para extraer fácilmente información del encabezado CLR. No necesitas ser un experto en el encabezado CLR ni perderte en su especificación para usar esta librería. Al usar la API, también aprenderás cómo está estructurado el encabezado y, con suerte, comprenderás mejor este tipo de archivo en general.
dotnetfile requiere Python >= 3.7.
Puedes instalar fácilmente dotnetfile con pip:
pip install dotnetfile
Para instalar dotnetfile como módulo, por favor, utiliza el archivo setup.py proporcionado. Esto se puede hacer con la ayuda de Python:
python3 setup.py install
Para usar dotnetfile, todo lo que tienes que hacer es importar el módulo y crear una instancia de la clase DotNetPE con la ruta del ensamblado .NET como parámetro. A continuación se muestra un ejemplo mínimo que imprime el número de streams de un ensamblado:
# Import class DotNetPE from module dotnetfile
from dotnetfile import DotNetPE
# Define the file path of your assembly
dotnet_file_path = '/Users/<username>/my_dotnet_assembly.exe'
# Create an instance of DotNetPE with the file path as a parameter
dotnet_file = DotNetPE(dotnet_file_path)
# Print out the number of streams of the assembly
print(f'Number of streams: {dotnet_file.get_number_of_streams()}')
Te invitamos a explorar las herramientas de ejemplo: https://github.com/pan-unit42/dotnetfile/blob/main/tools/
Puedes encontrar más información sobre cómo usar esta librería en las páginas de documentación.
La documentación completa se puede encontrar en https://pan-unit42.github.io/dotnetfile/
Este proyecto se inició en 2016 con el desarrollo de la librería de análisis para uso interno en Palo Alto Networks. Se mejoró/amplió con la librería de interfaz y se publicó como código abierto en 2022 por las siguientes personas:
Este proyecto es un trabajo en curso. Si encuentras algún problema o tienes alguna sugerencia, por favor, repórtalos en la página del proyecto en GitHub.
Un agradecimiento especial a todos los contribuyentes que han ayudado a mejorar este proyecto.
dotnetfile se basa en gran medida en la .NET specification.