国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

ELEOK

標題: FAT文件系統DBR損壞后的恢復 U提示需格式化才能使用 [打印本頁]

作者: 山海致遠    時間: 2013-12-15 15:32
標題: FAT文件系統DBR損壞后的恢復 U提示需格式化才能使用
對于FAT16文件系統,因為沒有DBR備份扇區,所以當DBR損壞時,就需要根據分區中的數據存儲情況重建其DBR,手工恢復如此,軟件也如此,只不過軟件是虛擬出一個文件系統而已。
對于FAT32文件系統,如果只是DBR意外損壞,位于文件系統6號扇區的備份完好的情況下,可以使用備份DBR恢復主DBR。如果備份DBR也已經損壞,同樣只能通過重建DBR來恢復其中的數據。
CIH病毒破壞后的結果應該算是重建DBR的最好案例,也是使用FAT2恢復FAT1的最好案例。CIH病毒對文件系統的破壞方式是使用隨機碼由文件系統的起始處開始覆蓋,通常覆蓋掉FAT1的部分內容后即導致計算機死機并崩潰。如圖10.32所示,加亮的部分被CIH病毒進行了覆蓋寫入。


下面我們仍以隨書光盤中的虛擬磁盤文件format.hdd為例,使用其中的第二個分區,即F32分區來說明在這種情況下如何使用FAT2恢復FAT1,并根據分區中的數據存儲情況計算BPB參數從而重建DBR
首先將虛擬磁盤文件加載為虛擬盤后,向F32分區中拷入一些文件和目錄(也可以直接在其中建立一些目錄和文件),以營造數據存儲環境。為了便于講述,我們在其中建立三個目錄并分別命名為“目錄1”、“目錄2”、“目錄3”(見圖10.33),每個目錄下都有一個文件或目錄。



然后,我們將保留區域及FAT1中的內容全部清空,制造DBRFAT1被破壞的實際情景(該鏡象文件位于隨書光盤A的“第10章”目錄下,文件名為DBR_delete.hdd。讀者可以將其拷貝到本地磁盤根目錄下跟隨我們一起完成DBR的重建過程。恢復成功后的鏡象文件請保存好,在后面的刪除分析章節中我們將會使用這個文件)。完畢后,將虛擬磁盤卸載后重新加載,發現該分區的卷標已經不再顯示,試圖打開分區時提示未格式化。
這時候,在Winhex中的邏輯磁盤內選擇該分區也無法將其打開,Winhex會提示沒有找到可識別的文件系統。這是因為使用Winhex直接打開一個文件系統分區時,也是通過調用DBR中的參數對文件系統中的內容進行解釋,DBR損壞后當然也就無法打開了。所以,我們應該選擇打開物理磁盤,然后在打開的物理磁盤界面中單擊 按鈕選擇該分區將其打開。如圖10.34所示。




在物理磁盤界面中之所以能夠打開DBR已經損壞的分區,是因為這時候Winhex并不是使用該分區的文件系統參數對分區內的數據進行解釋,而只是利用分區表對該分區的起始位置及大小描述將其空間呈現給我們而已。
分區打開后,我們看到分區DBR已經不存在,向下翻看幾十個扇區也沒有找到可用的內容。在實際工作中,遇到這種情況時,我們有可能已經了解到該分區原來的文件系統格式為FAT32,也有可能是不知道的。因此,我們第一步應該進行嘗試性搜索,來確定原文件系統的類型。下面我們就開始對該分區進行分析與恢復。
步驟1  通過搜索十六進制字節“F8FFFF”尋找FAT表。搜索位于某個扇區偏移0字節處的“F8FFFF”是為了嘗試尋找FAT表,如果能找到FAT表,說明原來的文件系統是FAT系列文件系統,然后根據FAT表的特征值進而判斷是哪一種FAT類型。這也是我們不建議直接搜索“F8FFFF0F”的原因,因為目前沒有確定該分區就是一個FAT32分區,如果是一個FAT16分區的話,它的FAT表起始處就會是“F8FFFFFF”,所以搜索它們的共性更容易搜索到目標。搜索十六進制“F8FFFF”時,設置如圖10.35所示。



很快,在779號扇區找到一個“F8FFFF”,如圖10.36所示。



可以看到,這個扇區的內容是一個FAT32FAT表,說明原來的文件系統為FAT32。因此,我們下面要做的就是重建它的DBR
重建FAT32DBR需要以下幾個參數:保留區大小扇區數、FAT表個數(通常為2)、每FAT表大小扇區數、根目錄簇號(通常為2號簇)、每簇扇區數、分區前隱含扇區數及分區大小扇區數(這兩個數值可以在該分區的分區表項中找到)。下面我們就來分析并計算這些參數。
通常FAT1的起始處位于40號扇區以前,而我們搜索到的這個FAT表位置在779號扇區,所以我們應該考慮到它是FAT2,我們按F3鍵繼續向下搜索,沒有再次找到該值,說明這確實是FAT2的起始扇區。我們可以畫一個簡單的示意圖。如圖10.37所示。




步驟2  尋找根目錄。尋找根目錄是為了確定FAT2的大小,從而可以使用FAT2恢復FAT1
尋找根目錄的方法有多種:
u  一種是搜索回收站。在文件系統剛剛創建時,該文件系統下是沒有回收站“Recycled”目錄的。在第一次將數據刪除至回收站時,系統即會在根目錄下建立該目錄。因此,可以通過搜索字符“Recycled”來尋找根目錄。但理論上來講,如果在第一次分配給根目錄的2號簇裝滿目錄項前沒有進行過刪除操作,那么Recycled目錄就會建立在分配給根目錄的后續簇空間中,而這個簇可以是未分配的任何一個簇。在這種情況下,我們通過搜索“Recycled”找到的根目錄就不是根目錄的起始簇。
u  還有一種方法是估算法。由于FAT2起始于779號扇區,通常FAT32文件系統的FAT1起始于3040號扇區的位置,由此可以估算出一個FAT表的大小扇區數,然后向后跳過該扇區數,手工查找根目錄。根目錄前為FAT2的結尾處,而這個結尾處一定會有大量的“00”存在,可以據此判斷是否正確地找到了根目錄的位置。
u  第三種方法是搜索卷標。如果為文件系統設置了卷標,則根目錄下的第一個目錄項一定是卷標目錄項。
u  第四種方法是搜索較早建立于根目錄下的目錄或文件名。
其他方法我們不再一一列舉,讀者可以在實際恢復中根據不同情況區別對待,靈活掌握。
為了向讀者介紹如何在Winhex中搜索字符,在此我們使用第四種方法。假定我們知道根目錄下有一個目錄的名字為“目錄1”,在Winhex工具欄中單擊搜索文本字符按鈕 或選擇菜單欄中的Search | Find Text,即可彈出文本搜索設置框。如圖10.38所示。




在設置框中進行如下設置:
u  在搜索文本框中輸入“目錄1”。
u  字符集選擇“ASCII/Code page”,這是因為FAT32使用ASCII碼存儲文本字符。如果在NTFS下,則需要選擇“Unicode”。
u  因為我們當前所處的位置是FAT2的起始扇區,要搜索的根目錄位于其后,因此在搜索方向中選擇“Down”,即向下搜索。
u  每個目錄項的大小為32個字節,所以我們只需要位于可以被32整除的偏移處的結果,因此偏移調制設置為“?MOD 32 0”。
設置完畢后單擊OK即開始搜索,最終在1520號扇區找到“目錄1”。同時還可以看到了其他兩個目錄的目錄項。也如圖10.39所示。




我們將根目錄添加進文件系統結構示意圖中,如圖10.40所示。



現在,我們可以計算出FAT2的大小為1520 – 779 741個扇區。因此,FAT1的起始位置為779 – 741 38號扇區,如圖10.41所示。




至此,我們已經得到的參數有:保留區為38個扇區;每FAT大小為741個扇區。我們只要再計算出每簇大小扇區數就可以進行文件系統的修復工作了。
步驟3  計算每簇大小扇區數。在此我們只介紹計算FAT文件系統每簇大小扇區數最常用的方法,這種方法需要依賴于分區原來的根目錄下有子目錄,如果分區中原來沒有子目錄,只在根目錄下存儲所有的文件,則無法使用此方法。不過這種情況畢竟很少出現,沒有哪個用戶會這樣存儲數據。
我們知道,為子目錄分配的簇空間中,第一個目錄項一定是一個“.”目錄項,這個目錄項用以描述該子目錄本身,其中有一個參數描述了它現在所處的扇區的簇號。我們利用兩個子目錄間的起始扇區號差和它們的簇號差,就可以計算出每個簇的大小扇區數。甚至只需要利用一個子目錄和根目錄間的扇區號差及簇號差就可以計算得到。
要搜索一個子目錄,可以在Winhex中搜索位于扇區起始處的十六進制值“2E20202020202020202020”,這是“.”后面跟隨10個空格的十六進制表現形式。其搜索設置框如圖10.42所示。


第一個搜索到的子目錄起始于1521號扇區,由第一個目錄項可以獲知該扇區所在的簇號:偏移0x140x15為簇號的高二位,偏移0x1A0x1B處為簇號的低二位,不要忘記,這兩個位置的數字本身都是以little-endian順序存儲的,也就是低位在前,高位在后。因此該扇區的簇號為0x00000003,即3號簇。如圖10.43所示。




其實,我們現在已經可以利用該子目錄的信息和根目錄的信息計算出每簇的大小扇區數:根目錄的簇號為2,起始扇區為1520;當前子目錄的簇號為3,起始扇區為1521,所以:( 1521 – 1520 ) / ( 3 – 2 ) = 1,即每簇大小為1個扇區。
由于在實際當中,有可能某個子目錄的信息是過去某個文件系統遺留下來的,所以為了確保結果正確,首先應該驗證計算結果是否為2的整數次冪,如果不是2的整數次冪,結果一定是錯誤的。另外,就是要多搜索幾個子目錄,根據不同子目錄間的關系計算簇大小,以驗證當前的結果是否正確。為了節省篇幅,我們在此不再對這個過程進行講述。
步驟4  從該分區的分區表項中獲得其分區前隱含扇區數及分區大小扇區數。如圖10.44所示,在物理磁盤界面中,單擊按鈕 ,然后選擇丟失分區下的Partition table(template)即可跳轉到該分區的分區表所在扇區,并自動用模版將其打開,可以從中獲知該分區前的隱含扇區數及分區大小扇區數。


從其分區表項中可知,該分區的分區前隱含扇區數和分區大小扇區數分別為63和96327。
步驟5  重構文件系統。目前為止,我們已經得到了所有需要的參數:保留扇區數38,FAT表個數2,每FAT表大小扇區數741,每簇扇區數1,由分區表得到分區前隱含扇區數和分區大小分別為63、96327,可以重構文件系統了。
1)    利用我們前面講到的備份DBR的方法,復制FAT2,然后轉到38號扇區將其寫入,重建FAT1。
2)    復制一個FAT32的DBR扇區,寫入0號扇區。如果沒有現成的FAT32的DBR,可以虛擬一個磁盤,劃分一個分區后將其格式化成FAT32文件系統,然后復制它的DBR扇區。恰好我的計算機C分區是FAT32,所以直接將它復制過來。然后修復其中的參數。如圖10.45所示。


可以看到,我們需要修改的參數只有圖中所示的四個位置。修改完畢后,將其寫入0號扇區。
提示:偏移0x43處的卷序列號也做了修改,因為這個DBR是由筆者計算機的C分區拷貝而來,為了避免沖突造成的不穩定,所以對其進行了修改。讀者在實際恢復過程中也應該注意到這一點。
3)    將0號扇區復制一份,備份至6號扇區。
步驟6  重新識別硬盤。在我們的講解中使用的是虛擬磁盤,所以將虛擬磁盤卸載并重新加載后原分區再現。如果在實際恢復中使用硬盤,可以在設備管理器中將其卸載后再檢測新硬件,硬盤被重新加載后即可完成恢復。
在恢復過程中我們可以注意到,對于Fsinfo信息扇區可不必理會,并不影響數據的正常恢復。




作者: doglove    時間: 2013-12-20 11:52
不錯,很專業                    。
作者: shenju    時間: 2014-1-11 17:08
大哥竟然還研究過 fat16的文件恢復啊。哈哈
我當年也弄過FAT32的 還有ntfs,同感啊。。




歡迎光臨 ELEOK (http://m.afoofa.cn/) Powered by Discuz! X5.0