
メモリからマルウェアのPEファイルをディスクにダンプし、解析するためのWindowsツール。
Process Dumpは、マルウェアのメモリコンポーネントを分析のためにディスクへダンプするWindowsリバースエンジニアリング用のコマンドラインツールです。マルウェアファイルは、AVスキャナを回避するために実行前にパックや難読化が施されていることがよくありますが、これらのファイルが実行されると、クリーンな状態のマルウェアコードをメモリ内で展開したりインジェクトしたりすることがよくあります。マルウェア研究者がマルウェアを分析する際の一般的な作業は、この展開されたコードをメモリからディスクへダンプし、AV製品によるスキャンやIDAなどの静的解析ツールによる分析に供することです。
Process DumpはWindows 32ビットおよび64ビットのオペレーティングシステムで動作し、特定のプロセスまたは現在実行中のすべてのプロセスからメモリコンポーネントをダンプできます。Process Dumpはクリーンハッシュデータベースの作成と使用をサポートしているため、kernel32.dllなどの既知のファイルのダンプをスキップできます。主な機能は以下のとおりです:
-closemon)で実行でき、フックされたプロセスは終了直前に一時停止されてダンプされます。公式のコンパイル済みリリースを私のウェブサイトで保守しています: https://split-code.com/processdump.html
Process Dumpの最新のコンパイル済みリリースはこちらからダウンロードできます:
64ビットWindowsではpd64.exe(推奨)、32ビットWindowsではpd32.exeを使用してください。どちらのバイナリもスタンドアロンであり、Microsoft Visual C++ 再頒布可能パッケージは不要です。
Process Dumpは、メモリからすべての未知のコードをダンプする(-system)、特定のプロセスをダンプする、またはプロセスを監視して終了前にダンプすることができます。
クリーンなワークステーション上で、次のいずれかの方法でベースラインデータベースを生成します:
pd64.exe -db genquickpd64.exe -db genデータベースの生成とダンプは別々のコマンドとして実行してください。最良のアクセスのため、管理者として実行してください。デフォルトのワーカー数は16です。
使用例:
pd64.exe -systempd64.exe -pid 419pd64.exe -pid 0x1a3pd64.exe -pid 0x1a3 -a 0x401000 -o C:\dumpspd64.exe -p "chrome[.]exe"pd64.exe -p ".*chrome.*"pd64.exe -closemon一般的なダンプオプション
| オプション | 説明 |
|---|---|
-system | アクセス可能なすべてのプロセスから、クリーンハッシュデータベースに一致しないモジュールおよび散在するコードをダンプします。 |
-pid <pid> | 特定のプロセスをダンプします。10進数、または16進数のPIDには0xプレフィックスを使用します。 |
-closemon | プロセスの終了をフックし、終了前にダンプします。制御された環境で使用してください。停止するにはCtrl+Cを押します。 |
-p <regex> | プロセス名全体が大文字と小文字を区別する正規表現に一致するプロセスをダンプします。複数一致した場合は確認を求められます。 |
-a <address> | 指定されたベースアドレスでダンプします。-pidが必要です。10進数または0xプレフィックス付きの16進数を受け付けます。 |
-o <path> | 出力フォルダを設定します(デフォルト: 現在の作業ディレクトリ)。フォルダを事前に作成してください。既存のファイルは上書きされません。 |
クリーンハッシュデータベースオプション
データベースファイルはデフォルトでアプリケーションディレクトリに作成されます: clean.hashes、entrypoints.hashes、shortentrypoints.hashes。
| オプション | 説明 |
|---|---|
-db gen | 実行中のプロセスと、%WINDIR%、%USERPROFILE%、C:\Program Files、C:\Program Files (x86) 内の PE ファイルから再帰的にハッシュを追加します。 |
-db genquick | 実行中のプロセスのみからハッシュを追加します。gen より高速ですが、網羅性は低くなります。 |
-db add <dir> | 指定したディレクトリ内の PE ファイルハッシュを再帰的に追加します。エントリポイントシグネチャも含みます。 |
-db remove <dir>, -db rem <dir> | ディレクトリ内から一致するクリーンモジュールのハッシュを再帰的に削除します。エントリポイントシグネチャは保持されます。 |
-nr | データベースの追加/削除コマンドで再帰を無効にします。-db gen には影響しません。 |
-db clean | エントリポイントシグネチャを含む3つのデータベースすべてを消去します。 |
-db ignore | ファイルを変更せずに、このダンプで読み込まれた3つのデータベースすべてを無視します。実行中に重複モジュールがスキップされる場合があります。 |
-cdb <filepath>, -c <filepath> | クリーンハッシュデータベースのパスを設定します。 |
-edb <filepath> | エントリポイントハッシュデータベースのパスを設定します。 |
-esdb <filepath> | ショートエントリポイントハッシュデータベースのパスを設定します。 |
出力オプション
| オプション | 説明 |
|---|---|
-v | 詳細な診断情報を出力します。 |
-nh | バージョン/著作権のバナーを非表示にします。 |
--help, -help, -h, --h | ヘルプを表示して終了します。引数なしで実行した場合もヘルプが表示されます。 |
詳細オプション
| オプション | 説明 |
|---|---|
-g | 既存のヘッダーを無視して、32ビットと64ビット両方の PE ヘッダーの生成を強制します。 |
-eprec | 有効なエントリポイントが存在する場合でも、エントリポイントの復元を強制します。復元はヒューリスティックであり、検索に失敗した場合は元の値が変更されません。 |
-ni | 積極的なインポート再構築を無効にします(デフォルトで有効)。 |
-nc | ルースコードのダンプとハッシュ化を無効にします(デフォルトで有効)。 |
-nep | エントリポイントの復元とライブエントリポイントのハッシュ化を無効にし、-eprec を上書きします。ファイルデータベースの生成では引き続きエントリポイントシグネチャが収集されます。 |
-reexec | ダンプの再実行に向けた実験的な準備を行います。キャプチャされた一部の状態を破棄し、元のセクションレイアウトを前提とします。ダンプの実行は行わず、動作を保証するものでもありません。デフォルトでは無効です。 |
-nt | ワーカーを1つ使用します。-t 1 と同等です。クローズ監視には別途監視スレッドが存在します。 |
-t <count> | システムダンプ、データベース生成、クローズ監視のワーカー数を設定します(デフォルト16、最小1)。PID/名前を直接指定するダンプは同期的に実行されます。最後に指定された -t/-nt が有効になります。 |
| コマンド | 説明 |
|---|---|
pd64.exe -db genquick | 現在実行中のプロセスからベースラインを素早く構築します。 |
pd64.exe -system -t 4 -o C:\dumps | 4つのワーカーで未知のモジュールとルースコードを既存の出力フォルダにダンプします。 |
pd64.exe -closemon | 終了監視モードで実行します。 |
pd64.exe -pid 0x18A | 特定のプロセスからモジュールとルースコードをダンプします。 |
pd64.exe -p ".*chrome.*" | 名前に chrome を含むプロセスをダンプします。 |
pd64.exe -db gen | 実行中のプロセスと一般的なフォルダから、より完全なベースラインを構築します。 |
pd64.exe -db add C:\baseline -nr | サブディレクトリを検索せずに、ディレクトリ内の PE ファイルを追加します。 |
pd64.exe -pid 0x1a3 -a 0x401000 | 特定のアドレスでダンプします。PE ヘッダーが存在しない場合は、32ビットと64ビット両方のヘッダーを生成します。 |
マルウェア解析では、隔離されたラボを使用し、Process Dump を管理者として実行してください:
pd64.exe -db gen または pd64.exe -db genquick でクリーンハッシュデータベースを構築します。pd64.exe -closemon を実行し続けて、フックされたプロセスが終了する際にキャプチャします。pd64.exe -system を使用して、まだ実行中のプロセスをダンプします。-o を設定しない限り、ダンプは作業ディレクトリに書き込まれます。ダンプは非公開に保ってください。ダンプは解析用であり、実行可能であることは保証されません。256 MiB を超えるイメージは拒否されます。
hiddenmodule と表示される場合は、そのモジュールがプロセス内で適切に登録されていなかったことを示します。codechunk は、PE ヘッダを持たない独立した実行可能領域からのダンプを意味します。これらは x86 と x64 のヘッダを再構築した上で、2 回ダンプされます。ファイル名の例:
Visual Studio 2019 または 2022 (Community エディションでも可) で pd.sln を開きます。デスクトップ開発の C++ ワークロードと Windows SDK がインストールされている必要があります。Win32 または x64 向けに Release をビルドします。Release ビルドはランタイムを静的リンクします。
Visual Studio Developer PowerShell からテストをビルドして実行するには:
msbuild pd.sln /m /p:Configuration=Release /p:Platform=x64
.\x64\Release\pd_tests.exe