レガシー ShimCache フォーマット:Windows XP、2003、Vista、7、8

読了 2 分

TL;DR. Windows の各世代は AppCompatCache 構造を書き換えました。XP はマジック 0xDEADBEEF と固定 552 バイトのレコードを使い、Server 2003、Vista/2008、Windows 7/2008 R2、Windows 8/8.1 はそれぞれ独自のヘッダとエントリレイアウトを持ちます。パーサーはヘッダのマジックで分岐する必要があります — 単一のフォーマットは存在しません。

ShimCache のドキュメントの多くはWindows 10/11 のレイアウトを扱います。しかしインシデント対応者は、いまだに Windows 7 のドメインコントローラ、Server 2008 R2 機、時には XP のアプライアンスに遭遇します。それらのホストのオンディスク構造は本質的に異なります。これがバージョン別リファレンスです。

なぜ単一のフォーマットがないのか

ShimCache は公開仕様のない Windows 内部構造です。Microsoft は shim インフラの進化に合わせてリリースごとに作り直しました。レジストリ値の名前とパスも移動しています。堅牢なパーサーは、エントリを 1 件読む前にヘッダからバージョンを特定します。

バージョン別チートシート

Windowsレジストリ値ヘッダのマジックエントリ形状
XP(32 ビット)…\AppCompatibility\AppCompatCache0xDEADBEEF固定 552 バイトのレコード、最大 96
Server 2003…\AppCompatCache\AppCompatCache0xBADC0FFE24 バイト(x86)/ 32 バイト(x64)エントリ
Vista / 2008…\AppCompatCache\AppCompatCache0xBADC0FFE2003 と同様、フラグが異なる
Windows 7 / 2008 R2…\AppCompatCache\AppCompatCache0xBADC0FEE32 バイトヘッダ;エントリは挿入フラグを持つ
Windows 8 / 2012…\AppCompatCache\AppCompatCache0x00000080可変長エントリ署名 00ts
Windows 8.1 / 2012 R2…\AppCompatCache\AppCompatCache0x00000080エントリ署名 10ts

(Windows 10/11 の現代的な 10ts/00ts レイアウトは別記事で詳述。)

XP — 例外

Windows XP は後続のどれとも似ていません。マジック 0xDEADBEEF固定幅 552 バイトのレコード、96 エントリの厳格な上限、固定長にパディングされた UTF-16 パス。後のバージョンが廃止した最終更新タイムスタンプとファイルサイズフィールドも保存していました。0xDEADBEEF を見たら XP 領域であり、現代的な解析ロジックは一切当てはまりません。

Windows 7 — 最も遭遇するもの

Windows 7 / Server 2008 R2 は IR でいまだ一般的です。マジック 0xBADC0FEE、32 バイトヘッダ、そしてパス・ファイルの最終更新時刻・特に有用な 実行フラグ(Windows 8 以降で削除)を含むエントリレコード。Windows 7 ではフラグが立っていれば実行の妥当な(絶対ではない)裏付けになります。新しいシステムへ外挿しないでください。ShimCache は実行を証明するかで説明しています。

8 / 8.1 の移行

Windows 8 はエントリごとの署名(00ts)を持つ可変長エントリを導入し、8.1 はそれを 10ts に上げました。これは Windows 10/11 フォーマットの構造的祖先であり、8.1 を扱えるパーサーは 10 を扱う準備がほぼできています。

ツールチェーンなしで解析する

Shimcache Parser はヘッダのマジックを自動検出し、XP、2003、Vista、7、8、8.1、10/11 の正しいデコーダへ分岐します — 古いツールを用意せずにレガシーな SYSTEM ハイブをブラウザで読めます。これら古いシステムでの収集についてはSYSTEM ハイブの取得を参照。

さらに読む

関連記事