
プロセスのメモリとアドレスを検査するために設計されたBOF
プロセスメモリ、アドレス、シンボルを検査できるCS BOFです!
| コマンド | 説明 |
|---|---|
| lm | すべてのロード済みモジュールをベースアドレス、エントリポイントなどとともに一覧表示します |
| addr | 指定されたメモリアドレスのバイトを出力します |
| meminfo | 指定されたメモリアドレスの情報を出力します |
| lt | 現在のプロセスのすべてのアクティブスレッドを基本情報とともに一覧表示します |
| regdump | スレッドのレジスタの内容を出力します |
パッチを送ってください!さらにコマンドの提案も歓迎します!
lmコマンドは、現在のプロセスにロードされているモジュールを一覧表示します。引数なしで呼び出すとすべてのロード済みDLLを返し、DLL名を指定するとそのモジュールの詳細(ベースアドレス、エントリポイント、サイズ、フルパス)を返します。
構文
psi lm [dll]
パラメータ:
dll(オプション): 検索するロード済みDLLの名前。省略すると、すべてのロード済みモジュールが一覧表示されます。例:
psi lm
psi lm ntdll.dll
psi lm kernel32.dll
addrコマンドは、指定されたアドレスの値を返します。
構文:
psi addr <address> <type> [count]
address: 検査するアドレス(16進数)type: 指定されたアドレスのデータ型の扱い方を制御します。有効な値は BYTE、WORD、DWORD、LPVOID です。したがって、ユーザーが DWORD を指定すると、そのアドレスから size(DWORD) のチャンクが読み取られます。各チャンクは、型サイズに等しい幅の 0x プレフィックス付きリトルエンディアン値として出力されます(例: WORD の行は 0xaabb 0xccdd ... のようにグループ化されます)。型名は大文字小文字を区別せずに一致します。同じサイズのWin32エイリアス(int、ULONG、ULONG64、HANDLE など)は意図的に省略されています。1/2/4/8バイト読み取りには BYTE/WORD/DWORD/LPVOID を使用してください。出力は、指定されたアドレスから始まる16進ダンプで、チャンクがグループ化されます。
例:
psi addr 0xdeadbeef DWORD 2
psi addr 0xdeadbeef LPVOID
psi addr 0xdeadbeef WORD 8
meminfoコマンドは、指定されたメモリアドレスに関する様々な情報を返します。これには以下が含まれます:
!address コマンドと同様のその他の情報構文:
psi meminfo <address>
address: 検査するアドレス(16進数)例:
psi meminfo 0xdeadbeef
ltコマンドは、現在のプロセスのすべてのスレッドを、そのTIDとエントリポイントとともに出力します。
構文
psi lt
regdumpコマンドは、スレッドのCPUレジスタをダンプします。スレッドID(tid)はオプションです。省略すると、RtlCaptureContext を使用して呼び出し元のBeaconスレッドがダンプされます。指定すると、そのスレッド(現在のプロセス内)はスナップショットの間一時停止されます。レジスタ名が指定された場合はそのレジスタのみが出力され、それ以外の場合はすべてのサポートされているレジスタ(完全なx64 GPRセットに加えて、RFLAGS、セグメントレジスタ、デバッグレジスタ、SSE(XMM)、AVX/AVX2(YMM)、AVX-512(ZMM / kmask)— 最後の3つはホストのCPU機能サポートに依存)がダンプされます。レジスタ名は大文字小文字を区別せずに一致し、サブ幅エイリアス(例: eax、ax、ah、al はすべて同じ基盤となるGPRに解決されます)を受け入れます。
構文:
psi regdump [tid] [register]
tid: コンテキストをダンプするオプションのスレッドID。省略すると、呼び出し元のBeaconスレッドが直接キャプチャされます。register: 出力を1つのレジスタにフィルタリングするオプションのレジスタ名。tid を指定する必要があります。例:
psi regdump
psi regdump 12345
psi regdump 12345 rip
psi regdump 12345 ymm0
BOFをコンパイルするには、src/hello.cc ファイルまたは Makefile を必要な変更に応じて更新し、次のコマンドを入力します:
$ docker-compose up --build
以下のテンプレートを使用してビルドされました: https://github.com/whokilleddb/cs-bof-template
count: 読み取るチャンクの数。この引数はオプションで、デフォルトは1です。