如果今天想知道使用者曾經開過哪些檔案?這些檔案原本放在哪裡?
Windows 裡有一個很常看的 Artifact,就是 LNK。
LNK 是 Windows 的捷徑檔案。使用者操作檔案或程式時,系統可能留下 .lnk 紀錄,而裡面不只有捷徑指向的位置,還可能保存 Target File 的路徑、大小、Timestamp、磁碟資訊等資料。
所以即使原本的檔案已經被移動,甚至不存在原本的位置,LNK 還是可能留下和它有關的線索。
可以用 CMD 搜尋使用者目錄中的 .lnk。
dir C:\Users\<username>\*.lnk /b /s
其中 /s 會往子目錄一起搜尋,/b 則只顯示檔案路徑。

這次我用 IMG_1833.JPG.lnk 當作分析範例。
先把它 Copy 到 Desktop,方便後續用 HXD 分析。
copy "C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Recent\IMG_1833.JPG.lnk" "%USERPROFILE%\Desktop\IMG_1833.JPG.lnk"
LNK 裡可以找到不少資訊:
| 資訊 | 可以看到什麼 |
|---|---|
| LNK Header | 確認 LNK 的基本結構 |
| Target File Timestamp | Target File 的 Created、Accessed、Modified Time |
| Target File Size | 原始檔案大小 |
| Local Path | 原始檔案路徑 |
| Drive Serial Number | 原始檔案所在磁碟的序號 |
| NetBIOS Name | 和檔案來源主機有關的線索 |
| Object ID / UUID | 可以進一步分析檔案及主機相關資訊 |
今天先看和 Target File 本身最直接相關的幾個部分,下一篇再看磁碟序號、NetBIOS Name、Object ID 和 UUID 等資訊。
接著用 HxD 開啟剛才 Copy 出來的 IMG_1833.JPG.lnk。
在檔案最前面可以看到:
4C 00 00 00 01 14 02 00

其中前面四個 Bytes 以 Little Endian 解讀為 0x4C,是這個 Shell Link Header 的大小。
4C 00 00 00
接著往後看 Target File 的 Timestamp。
三組時間從 Decimal Offset 28 開始,每一組都是 8 Bytes。
Decimal Offset 28
= Hex Offset 0x1C

這筆 LNK 中看到的三組 Timestamp 分別是:
Created Time
00 DC C5 C9 E0 38 DD 01
Accessed Time
99 45 DA AE 60 3D DD 01
Modified Time
64 03 8B 69 5F 39 DD 01
和前面分析 $MFT、$Recycle.Bin 一樣,可以在 HxD 中單獨選取其中 8 Bytes,再看右側 Data Inspector 的 FILETIME,把 Raw Hex 轉成實際日期與時間。
要記得 FILETIME 是以 UTC 為基準時區,所以如果後續要把不同 Artifact 的時間放進同一條 Timeline,還要確認工具目前顯示的是 UTC 還是已經轉換過的 Local Time。
這裡看到的是 Target File 本身所記錄的時間資訊,不是單純把它當成「這個 LNK 是什麼時候被建立的」。
除了 Timestamp 之外,LNK 還會保存 Target File Size,也就是這個捷徑所指向的檔案,在當時記錄下來的檔案大小。
這個欄位從檔案開頭往後 52 Bytes 的位置開始,長度為 4 Bytes。
Decimal Offset 52
= Hex Offset 0x34

因為數值是以 Little Endian 儲存,所以要反過來解讀:
4B 26 32 00
→ 00 32 26 4B

所以這個 LNK 當時記錄下來的 Target File Size 是 3,286,603 Bytes。
這個資訊可以拿來和其他 Artifact 中看到的檔案大小互相比對,確認不同紀錄是不是在描述同一個檔案。
再往後看,還可以找到原始檔案的 Path。
C:\Users\<username>\...\IMG_1833.JPG
且可以同時看到 ASCII/ANSI Path 和 Unicode Path。

ASCII / ANSI 形式主要是為了相容較早期的 Windows 程式與字串格式,Unicode 則可以表示更多字元,例如中文、日文或其他非英文字元。
對鑑識來說,這個路徑很有價值,因為即使現在只剩下一個 .lnk,Target File 已經被移動或刪除,還是有機會從 LNK 裡知道檔案名稱和原本所在的位置。
不過 Path 的位置不像前面的 Timestamp 一樣可以直接背一個固定 Offset。
因為 LNK 後面的結構和欄位長度可能不同,所以實際分析時還是要依目前這筆 LNK 的內容往後判斷。