dotnetfile 是一个用 Python 编写的用于解析 Windows .NET 文件公共语言运行时 (CLR) 头文件的库。CLR 头存在于每个 Windows .NET 程序集中,位于可移植可执行文件 (PE) 头旁边。它为文件的管理代码部分存储了大量元数据信息。
dotnetfile 在某种程度上相当于 pefile,但面向 .NET 样本。
该库提供了一个易于使用的 API,同时也尝试贡献新方法来改进文件检测。这包括 MemberRef 哈希(实验性)以及 TypeRef 哈希的原始版本和修改版本。
该项目的目标是为恶意软件分析师和威胁猎人提供一种工具,以便轻松从 CLR 头中提取信息。使用该库并不需要你成为 CLR 头方面的专家,也不必在规范中迷失方向。通过使用 API,你还将了解该头的结构,并有望更好地理解这种文件类型。
dotnetfile 需要 Python >= 3.7。
你可以使用 pip 轻松安装 dotnetfile:
pip install dotnetfile
要将 dotnetfile 作为模块安装,请使用提供的 setup.py 文件。可以借助 Python 来完成:
python3 setup.py install
使用 dotnetfile 时,你只需导入模块并以 .NET 程序集路径为参数创建一个 DotNetPE 类的实例。下面是一个最小示例,用于打印程序集的流数量:
# 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()}')
欢迎探索示例工具:https://github.com/pan-unit42/dotnetfile/blob/main/tools/
有关如何使用此库的更多信息,请参阅文档页面。
完整文档可在 https://pan-unit42.github.io/dotnetfile/ 查看。
该项目始于 2016 年,最初为 Palo Alto Networks 内部使用而开发解析器库。后来通过接口库对其进行了改进/扩展,并于 2022 年由以下人员开源:
该项目仍在不断完善中。如果你发现任何问题或有任何建议,请在 GitHub 项目页面报告。
特别感谢所有帮助改进本项目的贡献者。
dotnetfile 主要基于.NET 规范。