@port139 Blog

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

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

LinkInfo構造の内容を確認してみます。(MS-SHLINK の Page 15)
先頭4バイトがLinkInfoSizeですので、下記では 7F 00 00 00 という値から 128byte分のデータ範囲を抜粋しています。

7F 00 00 00 1C 00 00 00 01 00 00 00 1C 00 00 00
2D 00 00 00 00 00 00 00 7E 00 00 00 11 00 00 00
03 00 00 00 FD 7B EA 05 10 00 00 00 00 43 3A 5C
55 73 65 72 73 5C 68 68 68 68 68 68 5C 41 70 70
44 61 74 61 5C 52 6F 61 6D 69 6E 67 5C 4D 69 63
72 6F 73 6F 66 74 5C 57 69 6E 64 6F 77 73 5C 4C
69 62 72 61 72 69 65 73 5C 44 6F 63 75 6D 65 6E
74 73 2E 6C 69 62 72 61 72 79 2D 6D 73 00 00

LinkInfoSize に続く 4バイトは LinkInfoHeaderSize という事になっていますので、1C 00 00 00 が該当箇所になり 28byte になります。Page 20 の説明によると、0x0000001C はオプションフィールドの有り無しとしては、オプションフィールド無しの場合になります。

次の4バイトは LinkInfoFlags で 01 00 00 00 となります。フラグとしてはビット 0,1 で A と B の区別だけになります。上記では 01 で 0 ビット目の A が立っていますので、A:VolumeIDAndLocalBasePath がセット状態になります。(Page 21)

VolumeIDAndLocalBasePathがセット状態の場合、VolumeIDとLocalBasePathフィールドが存在する事になります。
LinkInfoFlags で A が立っている状態で、VolumeIDとLocalBasePathフィールドが存在する事になるので、LinkInfoFlags に続くデータは、VolumeIDOffset (4 bytes) と LocalBasePathOffset (4 bytes) となります。

VolumeIDOffset:1C 00 00 00
LocalBasePathOffset:2D 00 00 00

それぞれオフセット位置を示していますが、これは LinkInfo構造の先頭(0x7F)からのオフセット位置となります。

次の4バイトは CommonNetworkRelativeLinkOffset ですが、フラグが設定されていませんので、ここはゼロになります。続きの4バイトは CommonPathSuffixOffset になりますが、これもLinkInfo構造の先頭(0x7F)からのオフセット位置となります。

CommonNetworkRelativeLinkOffset:00 00 00 00
CommonPathSuffixOffset:7E 00 00 00

LocalBasePathOffsetUnicode、CommonPathSuffixOffsetUnicodeはオプショナルなフィールドになります、今回LinkInfoHeaderSizeが0x00000024以上ではないので、このフィールドはありません。

続いて出てくるのは VolumeID になりますが、これは Page 22 に構造が出ています。

03 00 00 00 FD 7B EA 05 10 00 00 00 00