U盤SD卡文件誤刪恢復探討
今天把U盤的一個文件誤刪了,想通過修復軟件修復,發現修復回來的文件是空的。用winhex打開一看基本都是0,頓時對修復軟件很失望!想自己來恢復,同時一探究竟!
說 明:
操作系統:win7 旗艦版 64位
U 盤:16G
所有地址均指物理地址
注意winhex軟件與物理地址的相對性
1.0 文件的位置確定
1.1 引導扇區(DBR)
圖1
這是我的U盤引導扇區截圖,有用的數據均做顏色標記。
黑色(0x1B 0x1C) :0x0200 (每個扇區512字節)
綠色(0x1D) :0x10 (一個簇包含16個扇區,既512 * 16 =8096)
紅色(0x1E 0x1F) :0x08BE(2238,保留扇區大小)
粉色(0x20~23) :0x01DD7FFF(31293439,扇區總數)
紫色(0x24~27) :0x00003BA1(15265,FAT表所佔用扇區數)
黃色(0x2c~2F) :0x00000002(2,根目錄所在第一個簇的簇號)
DBR具體介紹參考前一篇博文:http://blog.csdn.net/mjx91282041/article/details/8904705
圖2
我們需要確定數據區的起始地址 = 橙色 + 綠色 + 黃色
綠色和黃色的地址 = (0x08BE + 0x3BA1 * 2 )* 512 = 0x1000000
橙色 = 0x0400000
數據區的起始地址 = 0x01400000
這個地址也是根目錄所在的位置
1.2 根目錄文件查找
爲了便於分析,這裏專門在根目錄下建了一個123456.txt的文件,跳轉到0x01400000位置
圖3
紅色是文件名稱
綠色是文件的存儲簇號(0x00016AC6)
文件的位置存儲內容如下圖:
圖4
1.3FAT表
圖片中紅色方框即爲123456.txt文件存儲的位置。
FAT表的起始地址爲:0x000117C00
123456.txt存儲地址爲起始地址+偏移地址
0x000117C00 + 0x00016AC6 *4 = 0x0172718
圖5
2.0 刪除文件
現在人爲刪除123456.txt文件,然後來對比根目錄和FAT表的變化。
首先看一下根目錄:
圖6
和圖3對比會發現,紅色和綠色都改變了,變化的數據標爲藍色。我們知道綠色部分爲文件存儲的起始簇,這個數據變化了,那麼恢復文件的可能性就比較難了。我們再去看看FAT表做了哪些修改。
圖7
和圖5對比,發現原來的結束簇標誌被清除了,變爲0.
最後我們去看看文件數據是否也刪除了!
(0x00016AC6-0x02) * 16 * 512 = 0x2D588000
公式說明:
0x00016AC6,簇的位置
0x2,簇從3開始有效
16 ,每個簇16個扇區
512 每個扇區512字節
這個地址是基於數據區的起始地址0x01400000
所以123456.txt實際地址 = 0x01400000 +0x2D588000 = 0x02E588000
圖8
3.0總結
根據分析發現和實際測試,發現電腦的刪除操作清除了FAT表的簇號和目錄的起始簇地址高16位,但是文件的實際數據還是存儲在U盤當中,當然刪除後再次寫入除外。所以當起始簇有在高16位的文件,軟件恢復的可能性不大,當起始簇只有低16位的,恢復起來比較容易。