@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

SANS ポスター:Windows Artifact Analysis(28) Jump Lists

Windows 7 の Jump Lists ファイルである、 <ApplicationID>.automaticDestinations-ms ファイル構造の続きになります。
Jump Listsファイルの内部では、データとしてMS-SHLINK構造でデータが保存されています。
下記はディレクトリエントリ名 1 の 128byte 分になります。

31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
04 00 02 01 FF FF FF FF 02 00 00 00 FF FF FF FF
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 A0 01 00 00 00 00 00 00

オフセット 66 の値が 02 ですので、Stream Object となり、セクタ位置はMini Sectorの番号になります。
オフセット 116 からの4バイト Starting Sector Location は 00 00 00 00 となっており、オフセット 120 からの 8バイト Stream Size は A0 01 00 00 00 00 00 00 ⇒ 416byte という事になります。

Mini Sector のセクタ 0 にあるデータ内容を確認すると下記のデータ構造になっている事が確認できます。これは、[MS-SHLINK].pdf の Page 9 にある ShellLinkHeader になっています。

4C 00 00 00 01 14 02 00 00 00 00 00 C0 00 00 00
00 00 00 46 83 00 00 00 20 20 00 00 A7 CA 99 AF
03 03 CC 01 35 81 7D 25 19 70 CF 01 35 81 7D 25
19 70 CF 01 C8 0D 00 00 00 00 00 00 01 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 36 00 14 00

先頭 4バイトが HeaderSize (4 bytes) となっており、4C 00 00 00 ですので 76byte 分がヘッダという事になります。
続く 16byte は LinkCLSID で、00021401-0000-0000-C000-000000000046 が class identifier (CLSID) として設定されていますので、これが ShellLinkHeader と識別できます。

ShellLinkHeaderのデータ構造は下記になっています。(MS-SHLINK Page 10~11参照)

HeaderSize (4 bytes)
LinkCLSID (16 bytes)
LinkFlags (4 bytes)
FileAttributes (4 bytes)
CreationTime (8 bytes)
AccessTime (8 bytes)
WriteTime (8 bytes)
FileSize (4 bytes)
IconIndex (4 bytes)
ShowCommand (4 bytes)
HotKey (2 bytes)
Reserved1 (2 bytes)
Reserved2 (4 bytes)
Reserved3 (4 bytes)