昨天先認識了 NTFS、$MFT 和 MFT Record,今天直接把 $MFT 拉出來看。
這次會用到三個工具:
$MFT
先用 FTK Imager 開啟要分析的 Disk Image,在 NTFS Volume 中找到 $MFT。
接著將 $MFT Export 出來,後面的 MFT Explorer 和 HxD 都會直接用這份檔案分析。

把剛才 Export 出來的 $MFT 載入 MFT Explorer。

MFT Explorer 會直接解析出 File Name、Parent Path、Directory、Deleted 狀態和 Timestamp 等資訊,下方同時保留這筆 Record 的 Raw Hex。

選擇一筆 Record 後,可以先看到最前面的:
46 49 4C 45
右側 ASCII 則是:
FILE
這就是 MFT Record 的 Signature。
接著看這筆 Record 開頭後的第 22 Bytes。
Decimal Offset 22
= Hex Offset 0x16

這兩個 Bytes 是 MFT Record Header 裡的 Flags。
常見組合為:
| Value | 狀態 |
|---|---|
00 00 |
Deleted File |
01 00 |
Allocated File |
02 00 |
Deleted Directory |
03 00 |
Allocated Directory |
這次看到的是:
00 00
所以可以知道這是一筆 Deleted File Record。
同時,也可以看到 MFT Explorer 左下角的 Is deleted 是被勾選的。
接著看這筆 Record 開頭後的第 44 Bytes。
Decimal Offset 44
= Hex Offset 0x2C
這裡的 4 Bytes 是 69 FB 00 00,記錄的是這筆 MFT Record 的 Record Number (File Identify)。

因為 NTFS 以 Little Endian 儲存數值,所以要反過來解讀成 00 00 FB 69,也就是 0xFB69。換成十進位後得到 64361,因此這筆資料就是 MFT Record 64361。
上一篇提過,一筆 MFT Record 通常是 1024 Bytes,所以還要將 64361*1024。

65,905,664 就是這筆 Record 在目前匯出的 $MFT 檔案中的起始 Offset。
這裡算的是
$MFT檔案內的位置,不是整顆 Disk Image 的 Physical Offset,也不是 File Data 本身所在的 Cluster。
接著用 HxD 開啟 $MFT。
點選功能列搜尋-->到... (CTRL+G),並輸入 65905664。


跳到這個 Offset 後,開頭會看到:
46 49 4C 45
右側 Text View 也出現:
FILE
代表我們已經從 Record Number,成功回到 MFT Explorer 剛才看到的同一筆 Record。
找到 MFT Record 之後,接著往 $STANDARD_INFORMATION Attribute 看。
這個 Attribute 的 Type 是 0x10,裡面會記錄四組 NTFS Timestamp,分別是 Creation Time、File Modified Time、MFT Modified Time、Last Access Time。
每組 Timestamp 為 8 Bytes,所以四組總共是 32 Bytes。在這筆 Record 中,Timestamp 從 Record 開頭後的第 80 Bytes 開始,也就是:
Decimal Offset 80
= Hex Offset 0x50

選取其中一組 8 Bytes 的 Timestamp 後,HxD 右側的 Data Inspector 會自動用不同格式解析目前選取的資料。
找到 FILETIME 欄位,就可以直接看到這組 Raw Bytes 對應的日期與時間。
例如這次選取 Creation Time:
20 52 47 F8 FF C7 CB 01
HxD 解析後顯示:
2011/2/9 02:20:50

另外需要注意,Windows NTFS 使用的 FILETIME 是以 UTC 為基準記錄時間,因此後續建立 Timeline 時,要自行轉換。
例如台灣是 UTC+8,所以還需要再加 8 小時後才是台灣時間。
除了 $STANDARD_INFORMATION 之外,$FILE_NAME Attribute 裡也會保存一組 Timestamp。
同樣包含 Creation Time、File Modified Time、MFT Modified Time 和 Last Access Time。
每組 Timestamp 一樣是 8 Bytes,所以四組總共也是 32 Bytes。
在這次分析的 Record 中,$FILE_NAME 的 Timestamp 從 Record 開頭後的第 184 Bytes 開始:
Decimal Offset 184
= Hex Offset 0xB8

如果要查看 $FILE_NAME 裡其中一組時間,一樣可以在 HxD 中選取對應的 8 Bytes,再從右側 Data Inspector 的 FILETIME 查看解析後的日期與時間。
$STANDARD_INFORMATION 和 $FILE_NAME 都會保存四組 Timestamp,但實際數值不一定完全相同。
$STANDARD_INFORMATION 的 Timestamp 比較容易受到一般 Windows API 或應用程式操作影響。
$FILE_NAME 的 Timestamp 主要由 NTFS 維護,因此在 Digital Forensics 中,常會把兩邊的時間拿來交叉比對。
不過 $FILE_NAME 的 Timestamp 並不是完全不能被修改,所以不能只因為兩組時間不同,就直接判斷有 Timestomping 或人為竄改。