
.NETアセンブリ内のCLR/PEメタデータを解析するためのPythonライブラリ。ストリームとハッシュフィンガープリントを公開し、マルウェア解析と脅威ハンティングを支援します。
dotnetfile は、Python で構築された Windows .NET ファイル用の Common Language Runtime (CLR) ヘッダーパーサーライブラリです。CLR ヘッダーは、すべての Windows .NET アセンブリに Portable Executable (PE) ヘッダーの隣に存在します。これには、ファイルのマネージ部分に関する大量のメタデータ情報が格納されています。
dotnetfile は、ある意味で .NET サンプル用の pefile に相当します。
このライブラリは、使いやすい API を提供するとともに、ファイル検出を改善するための新しいメソッドの追加も試みています。これには、MemberRef ハッシュ(実験的)と、TypeRef ハッシュのオリジナル版および修正版が含まれます。
このプロジェクトの目的は、マルウェアアナリストや脅威ハンターが CLR ヘッダーから情報を簡単に引き出せるツールを提供することです。このライブラリを使用するために、CLR ヘッダーの専門家になったり、その仕様に迷い込んだりする必要はありません。API を使用することで、ヘッダーの構造を学び、このファイルタイプ全般についてより深く理解できるようになるでしょう。
dotnetfile には Python >= 3.7 が必要です。
dotnetfile は pip で簡単にインストールできます:
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/ にあります。
このプロジェクトは、Palo Alto Networks での内部使用のためのパーサーライブラリの開発として 2016 年に開始されました。インターフェースライブラリで改良/拡張され、2022 年に以下の人々によってオープンソース化されました:
このプロジェクトは進行中の作業です。問題を見つけた場合や提案がある場合は、GitHub プロジェクトページに報告してください。
このプロジェクトの改善に貢献してくれたすべての貢献者に感謝します。
dotnetfile は .NET 仕様 に大きく基づいています。