曹紀磊 河南省交通高級技工學校
基于FAT32分區格式的U盤文件亂碼的手工恢復研究
曹紀磊 河南省交通高級技工學校
FAT32作為一種常見的Windows分區格式,應用非常廣泛,這種格式采用了32位的文件分配表,使其對磁盤的管理能力大大增強。例如現在許多U盤都是采用FAT32文件格式實現存儲的。本文針對FAT32格式的U盤為例,借助WINHEX數據恢復軟件進行了最為常見的U盤文件亂碼故障的手動恢復。通過數據故障描述、數據丟失原因分析、數據恢復的思路及方法進行了深入的研究。
FAT32 數據恢復 目錄 目錄項
在日常的辦公和生活當中,用戶經常會遇到這樣的麻煩:用戶的一個U盤,容量1GB,其中有大量的文件和文件夾。所有這些文件都與用戶的一篇論文有關系。因為同時在家里及單位的多臺計算機上寫這篇論文,為了方便用戶把有關該論文的所有資料及論文本身都存放在這個U盤中,寫論文時就把U盤插在計算機上,直接在U盤上編輯。就這樣論文寫了兩個多月的時間,基本已經定稿。
一天用戶來到單位,把U盤插在計算機上,像往常一樣,雙擊U盤的盤符,但看到的并不是自己熟悉的文件,而是一堆亂碼文件。
詳細詢問用戶都做了什么不當的操作,用戶是也沒做什么,就是頭天晚上寫論文到很晚,最終終于定稿,寫完后想把U盤卸載,但是卸載不掉,于是就直接拔了下來。
問題應該就是出在這里了,沒有按照正常方式卸載U盤,可能破壞了U盤內的文件系統結構。
做完鏡像后直接用WinHex對鏡像文件進行編輯,查看U盤的MBR、DBR扇區都沒有問題。從DBR中可以看出分區用的是FAT32文件系統,對于FAT32的分區,打開后都是亂碼文件的情況,問題很可能除在根目錄區。為了慎重一些,還是先看看FAT表是否正常,查看了FAT1和FAT2,都完全正常,于是定位到根目錄。
很明顯根目錄所在扇區的數據根本不是目錄項,看起來像是某個文件的數據內容,文件系統把這些數據當目錄項讀取,打開分區當然就只能看見亂碼了。
要恢復這個U盤的數據有很多方法,可以通過數據恢復軟件掃描恢復,也可以手工分析并修復損壞的文件系統結構,從而恢復出數據。
用戶說只要能恢復出來一個文件夾就可以了,文件夾名稱為“9月20日最后定稿”。
經過詢問用戶,用戶確定所需文件夾“9月20日最終定稿”就放在根目錄下,并且用戶清楚的記得,在該文件夾下放著“封面”、“目錄與摘要”、“正文”等Word文檔。
下面的工作就是去找文件夾“9月20日最終定稿”所指向的子目錄了。只要能找到這個子目錄所在的簇,然后到根目錄區創建一個目錄項指向該簇,就可以讓文件夾“9月20日最終定稿”下的文件自動出現。
如何找到這個子目錄所在的簇呢?方法有很多,下面介紹兩種:
(1)搜索文件目錄項
因為用戶告知在文件夾“9月20日最終定稿”下面有“封面”、“目錄與摘要”、“正文”等Word文檔,所以可以搜索這些文件的目錄項,就可以很清輕松地找到他們的子目錄區。
(2)搜索“.”目錄或“..”目錄
因為子目錄所在的簇的前兩個目錄一定是“.”目錄和“..”目錄的目錄項,通過搜索這兩個目錄項中的其中一個,就可以找到子目錄區。
字符“.”對應的十六進制數值為“2E”,所以要搜索其十六進制數值“2E”。因為文件目錄中的文件名部分是8.3格式,沒用完的字符會用空格填充,所以為了提高搜索的準確性,可以在“.”之后加幾個空格,空格對應的十六進制值為“20”。
這里以搜索“.”的十六進制數值為例,因為U盤中的文件夾非常多,所以子目錄區也會非常多,如何判斷哪個才是我們要找的呢?首先要排除掉“..”目錄項中“文件起始簇號”不為0的子目錄區。因為“..”目錄表示上級目錄,我們要找的子目錄的上級目錄就是文件夾“9月20日最終定稿”,是根目錄下的文件夾,所以其子目錄區中的“..”目錄的目錄項“文件起始簇號”這個參數一定要是0,如圖1所示。
圖1中的第二條目錄項就是“..”目錄的目錄項,畫圈的四個字節為0,其上級目錄就是根目錄。

圖1 “.”和“..”目錄的目錄項

圖2 “..”目錄項的結構
“..”目錄項中“文件起始簇號”為0的子目錄區,就都是根目錄下的目錄區了,但這樣的子目錄也很多,能不能讓搜索更加精確一些呢?
用戶說文件夾“9月20日最終定稿”是9月20日當天創建的,論文寫完后就把最終稿移入了該文件夾。這樣我們就可以把時間作為搜索條件,精確度就進一步提高了。
該如何利用這個時間呢,首先看看“..”目錄項的結構,如圖2所示。
文件目錄項的偏移18H~19H處的兩個字節就是文件最后修改日期。對文件夾來說,其修改時間很少改變,基本上總是與創建時間保持一致,而“..”目錄項的“文件修改時間”也應該是9月20日,年份是2009.用前面講過的日期換算方法,將2009年9月20日換算為十六進制數值,等于3B34H。
另外,我們要搜索的“..”目錄項的起始簇號必須為0,所以我們現在可以搜索十六進制數值“343B000000000000”,來找我們要的目錄項。搜索的具體設置如圖3所示。設置好就開始搜索,結構很快就搜到了目標。

圖3 搜索的設置
為了進一步驗證,我們用模板看看“..”目錄項后面的一條目錄項,這條目錄項的文件名是“封面.DOC”,修改日期正是“2009-09-20”,與用戶說的都相符,可以確定這就是我們要找的子目錄區了。
找到子目錄區只完成了一半,下面要找到根目錄區創建一個目錄項指向該簇。該簇的簇號可以從“.”目錄的目錄項中查看到,因為“.”目錄表示當前目錄,其指向的簇號就是當前簇號。從“.”目錄項中看到該簇號為十進制的1263簇。
下面返回到根目錄區,把該簇的數據全部清零,然后創建一個文件夾的目錄項指向1263簇。為了簡單些,文件夾的名字就叫“123”吧。
具體創建的方法:先復制一個完整的文件夾的目錄項放到根目錄區,然后在此基礎上修改。
最簡單的方法就是直接把找到的子目錄區中的“.”目錄項復制到根目錄區,再把文件名修改一下就可以了,修改時可以打開模板,這樣比較方便。
只需要把文件名該為“123”就可以了,其他的都不要改。創建完的目錄項如圖4所示。

圖4 打開模板修改目錄項
修改完后存盤,然后用虛擬硬盤工具“Inspro Disk”加載該U盤的鏡像就可以打開分區看到數據了。做到這一步,用戶的數據就全部恢復成功了。
在生活和工作當中,經常會遇到這樣的經歷:多年積累和收藏的數據因為病毒、人為或者不經意的被破壞、丟失或成為亂碼。希望通過本文的分析與研究,可以把各位用戶從數據丟失和毀壞的“噩夢”中走出來,不再受數據丟失的煩惱。“硬件有價,數據無價。”
[1]劉偉.數據恢復技術深度揭秘.電子工業出版社2013.9:84-100
[2]戴士劍,陳永紅。數據恢復技術,電子工業出版社,2003
[3]汪中夏,戴士劍。數據恢復高級技術,電子工業出版社,2006
[4]劉麗君,張婭珊。FAT32文件數據手工恢復方法研究,湖北警官學院學報,2009