iT邦幫忙

2026 iThome 鐵人賽

DAY 15
0
Security

那些留在電腦裡的證據:從零開始認識數位鑑識系列 第 15 篇

[DAY 15] 刪掉的檔案去哪了?從 $Recycle.Bin 追出刪除紀錄

  • 分享至 

  • xImage
  •  

昨天從 $MFT 的 File Status,可以判斷一筆 MFT Record 是否已經被刪除。

不過 NTFS 本身並沒有另外提供一個 Deleted Time,告訴我們檔案是在什麼時間被刪除。如果要繼續追這個資訊,其中一個可以看的地方就是 Windows 的 $Recycle.Bin。

除了刪除時間之外,$Recycle.Bin 裡還可以找到檔案刪除前的原始路徑,以及被刪除的檔案本身。

$Recycle.Bin 裡有什麼?

每個磁碟分割區都會有自己的 $Recycle.Bin,裡面再依不同使用者的 SID / RID 建立對應的資料夾。

在 CMD 輸入:

cd \$Recycle.Bin
dir /a

https://ithelp.ithome.com.tw/upload/images/20260929/201465914NJN8gIVWb.png

因為 $Recycle.Bin 屬於系統目錄,所以使用 dir /a 才能把這些項目一起列出來。

這時可以看到類似:

S-1-5-18
S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-1001

接著進入要分析的使用者目錄:

cd S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-1001
dir /a

https://ithelp.ithome.com.tw/upload/images/20260929/20146591c1tYPkTYUr.png

就會看到許多 $I 和 $R 開頭的檔案。

例如:

$I0KJCFK.mp3
$R0KJCFK.mp3

可以發現 $I 和 $R 後面的英數字與副檔名是一樣的,因此可以把它們配成同一組,代表的是同一個被刪除的 mp3。

Windows 將進入 Recycle Bin 的檔案分成兩個部分:

檔案 內容
$I Index / Information,記錄刪除時間、原始路徑等資訊
$R 對應實際被刪除的檔案

所以在分析 $Recycle.Bin 時,不能只看到一堆亂碼檔名。

真正要注意的是 $I 和 $R 後面的字串是否相同,藉此把刪除資訊和實際檔案對應起來。

從 $I 找出刪除時間與原始路徑

我們把上面的兩個檔案從 $Recycle.Bin 複製到 Desktop 看看。

copy "$I0KJCFK.mp3" "%USERPROFILE%\Desktop\$I0KJCFK.mp3"
copy "$R0KJCFK.mp3" "%USERPROFILE%\Desktop\$R0KJCFK.mp3"

其中 $R 是實際被刪除的檔案內容。把 $R0KJCFK.mp3 複製出來後,能發現這個音檔可以正常播放,而且音檔長度也可以正常讀取。

https://ithelp.ithome.com.tw/upload/images/20260929/20146591xitrRMfFTy.png

所以雖然原本的檔案已經被丟進 Recycle Bin,資源回收桶也被清空了,但 $R 裡保存的 File Content 仍然是完整的。

接著試試看用 HxD 開啟 $I0KJCFK.mp3。

對數位鑑識來說,$I 很重要,因為它記錄了被刪除檔案的相關資訊。

https://ithelp.ithome.com.tw/upload/images/20260929/20146591RiYKkzDy1o.png

$I 裡幾個重要的位置如下:

Decimal Offset Hex Offset Length 內容
0 0x00 8 Bytes Version
8 0x08 8 Bytes Logical File Size
16 0x10 8 Bytes Deleted Time
24 0x18 4 Bytes Original Path 字元長度(Version 2)
28 0x1C Variable Original Path(Version 2)

先看檔案開頭的 8 Bytes:

02 00 00 00 00 00 00 00

以 Little Endian 解讀後是 0x02,代表這是一筆 Version 2 的 $I 格式。

通常 Version 1 對應 Windows 7、Version 2 對應 Windows 10 的 $I 結構。

接著從 Decimal Offset 8 開始的 8 Bytes,記錄的是原始檔案的 Logical File Size。

D6 B7 6F 02 00 00 00 00

以 Little Endian 解讀後,可以得到這個檔案原本的大小為 40,875,990 Bytes。

再往後看 Decimal Offset 16 開始的 8 Bytes,就是這個檔案的 Deleted Time。

00 D2 E2 29 94 4E DD 01

和昨天分析 MFT Timestamp 一樣,在 HxD 中選取這 8 Bytes,再查看右側 Data Inspector 的 FILETIME,就能把 Raw Hex 轉成實際的刪除日期與時間。

最後從 Offset 0x1C 往後看,可以直接在右側看到 UTF-16 編碼的原始路徑,例如這次可以還原出原本的檔案位置:

C:\Users\kitty\Downloads\TEST 1.mp3

所以光是一個 $I,就可以把 Version、File Size、Deleted Time 和 Original Path 這幾個重要資訊找回來。

再搭配同一組的 $R,還可以取得實際被刪除的檔案內容。

SID / RID 又是誰?

剛才進入 $Recycle.Bin 時,可以看到資料夾名稱不是一般的 User Name,而是一長串 SID:

S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-1001

Windows 的使用者帳號識別資訊包含:

SID = Security Identifier
RID = Relative Identifier

例如上面這組 SID 最後的 1001 就是 RID。

如果要知道這個 SID 實際對應到哪一個 Windows 使用者,可以再搭配 Registry 進行確認。

其中一種方式是在:

Microsoft\Windows NT\CurrentVersion\ProfileList

找到對應的 SID,並查看其中的 ProfileImagePath。

例如:

S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-1001
↓
ProfileImagePath
↓
C:\Users\kitty

就可以把 $Recycle.Bin 裡看到的 SID 和實際使用者帳號對應起來。

除了 SOFTWARE 裡的 ProfileList,也可以透過 SAM 的內容進行帳號與識別碼的關聯比對。

從昨天的 $MFT 到今天的 $Recycle.Bin,其實是在看同一件事情的不同紀錄。

$MFT 可以看到 File Record 是否已經被刪除,而 $Recycle.Bin 裡的 $I 和 $R,則可以再往下找到刪除時間、原始路徑,以及對應的被刪除檔案。

$MFT
→ Deleted File Record

$Recycle.Bin
→ $I:Deleted Time / Original Path / File Size
→ $R:Deleted File

SID / RID
→ 對應實際 Windows User

把這些資訊串起來後,才能更完整地還原檔案被刪除前後留下的紀錄。


上一篇
[DAY 14] $MFT 實戰:判斷檔案狀態與檔案時間
下一篇
[DAY 16] LNK 不只是捷徑,它還記得你開過哪些檔案
系列文
那些留在電腦裡的證據:從零開始認識數位鑑識 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言