TinyTracer - API/命令トレーサーアンパッキングチートシート
TinyTracer (hasherezadeによる)は、Intel Pin 上に構築された動的トレーシングツールです。ターゲット実行可能ファイルを実行して、API呼び出しと選択された命令のトレースログを生成し、各イベントをモジュール相対オフセット (RVA)として記録するため、コードが再配置されても出力が有意です。Pinは低レベルで計装するため、TinyTracerはパッカースタブが使用するほとんどのアンチデバッグトリックの影響を受けません。これは、サンプルの元のエントリーポイント (OEP) を特定し、実際の動作を観察するのに優れています。
認可されたマルウェア分析用。信頼できないサンプルは分離されたVM/サンドボックスでのみ実行してください。
要件
- Intel Pin (動的バイナリ計装フレームワーク)
- Windows (x86/x64) 分析VM
- コンパイルされたTinyTracer
TinyTracer.dll (Pintool)
インストール
| ステップ | 方法 |
|---|
| Pinを入手 | Intel Pinをダウンロードして PIN_ROOT を設定 |
| TinyTracerを入手 | リリースをダウンロードまたはPintoolをビルド |
| ヘルパースクリプト | バンドルされた run_me.bat / インストーラーヘルパーを使用 |
| 確認 | 既知のEXEに対して実行し、.tag/ログ出力をチェック |
トレースの実行
# 概念的な呼び出し (バンドルされたヘルパーまたは直接pin)
pin.exe -t TinyTracer.dll -o output.tag -- target.exe
| フラグ | 目的 |
|---|
-t TinyTracer.dll | TinyTracerをPintoolとして読み込む |
-o FILE | トレースログ (.tag) パス |
-m MODULE | トレースをモジュールに限定 |
-b | 基本ブロック / より細粒度なイベントをトレース |
-- target args | トレースするプログラムと引数 |
トレースログに含まれるもの
| エントリー | 意味 |
|---|
RVA;called: FUNC | API呼び出し、モジュール相対アドレス |
| セクション遷移 | セクション間の実行移動 (アンパッキング) |
| TLSコールバック | 早期アンチ分析/実行フック |
| サブ呼び出し | オプションで内部コールターゲット |
RVAベースのログが重要なポイント:パッカーがアンパック後に新しいコードにジャンプしても、エントリーはモジュールにアンカーされ続けるため、逆アセンブラーにマップ戻せます。
OEPの検出
古典的な使用:パッカースタブ後の実行先を見る。
| ステップ | 探すべき内容 |
|---|
| 1 | パック済みサンプルをTinyTracerの下で実行 |
| 2 | 以前に書き込まれていないセクションへのジャンプを観察 |
| 3 | 最初の「本物の」APIバースト (GetModuleHandleなど)がアンパック済みコードをマーク |
| 4 | RVAをメモ — その領域がOEP候補 |
| 5 | その時点でダンプ (PE-sieveなど) および静的に分析 |
ツールキット統合
一般的なワークフロー
# サンプルのAPI使用の動的トレース
pin -t TinyTracer.dll -o sample.tag -- sample.exe
# → 疑わしいAPIシーケンス (crypto、network、injection) についてsample.tagを確認
# 未知のパッカーのOEPハント
# 1) トレース、2) アンパック済みコードへのセクション遷移を検出、
# 3) PE-sieveでダンプ、4) クリーンバイナリを分析
TinyTracerと関連アプローチ
| 側面 | TinyTracer | x64dbg (手動) | API Monitor |
|---|
| ベース | Pin計装 | インタラクティブデバッガー | APIフッキング |
| アンチデバッグ耐性 | 高い | ScyllaHideが必要 | 中程度 |
| 出力 | RVAトレースログ | インタラクティブ | ライブAPIログ |
| 最適用途 | 自動OEP/動作トレース | ハンズオンステッピング | APIコール監視 |
リソース