對(duì)于FAT16文件系統(tǒng),因?yàn)闆](méi)有DBR備份扇區(qū),所以當(dāng)DBR損壞時(shí),就需要根據(jù)分區(qū)中的數(shù)據(jù)存儲(chǔ)情況重建其DBR,手工恢復(fù)如此,軟件也如此,只不過(guò)軟件是虛擬出一個(gè)文件系統(tǒng)而已。
對(duì)于FAT32文件系統(tǒng),如果只是DBR意外損壞,位于文件系統(tǒng)6號(hào)扇區(qū)的備份完好的情況下,可以使用備份DBR恢復(fù)主DBR。如果備份DBR也已經(jīng)損壞,同樣只能通過(guò)重建DBR來(lái)恢復(fù)其中的數(shù)據(jù)。
CIH病毒破壞后的結(jié)果應(yīng)該算是重建DBR的最好案例,也是使用FAT2恢復(fù)FAT1的最好案例。CIH病毒對(duì)文件系統(tǒng)的破壞方式是使用隨機(jī)碼由文件系統(tǒng)的起始處開(kāi)始覆蓋,通常覆蓋掉FAT1的部分內(nèi)容后即導(dǎo)致計(jì)算機(jī)死機(jī)并崩潰。如圖10.32所示,加亮的部分被CIH病毒進(jìn)行了覆蓋寫(xiě)入。
1(1).jpg (14.32 KB)
下載附件
2013-12-15 15:25 上傳
下面我們?nèi)砸噪S書(shū)光盤(pán)中的虛擬磁盤(pán)文件format.hdd為例,使用其中的第二個(gè)分區(qū),即F32分區(qū)來(lái)說(shuō)明在這種情況下如何使用FAT2恢復(fù)FAT1,并根據(jù)分區(qū)中的數(shù)據(jù)存儲(chǔ)情況計(jì)算BPB參數(shù)從而重建DBR。
首先將虛擬磁盤(pán)文件加載為虛擬盤(pán)后,向F32分區(qū)中拷入一些文件和目錄(也可以直接在其中建立一些目錄和文件),以營(yíng)造數(shù)據(jù)存儲(chǔ)環(huán)境。為了便于講述,我們?cè)谄渲薪⑷齻€(gè)目錄并分別命名為“目錄1”、“目錄2”、“目錄3”(見(jiàn)圖10.33),每個(gè)目錄下都有一個(gè)文件或目錄。
2(1).jpg (49.25 KB)
下載附件
2013-12-15 15:25 上傳
然后,我們將保留區(qū)域及FAT1中的內(nèi)容全部清空,制造DBR和FAT1被破壞的實(shí)際情景(該鏡象文件位于隨書(shū)光盤(pán)A的“第10章”目錄下,文件名為DBR_delete.hdd。讀者可以將其拷貝到本地磁盤(pán)根目錄下跟隨我們一起完成DBR的重建過(guò)程。恢復(fù)成功后的鏡象文件請(qǐng)保存好,在后面的刪除分析章節(jié)中我們將會(huì)使用這個(gè)文件)。完畢后,將虛擬磁盤(pán)卸載后重新加載,發(fā)現(xiàn)該分區(qū)的卷標(biāo)已經(jīng)不再顯示,試圖打開(kāi)分區(qū)時(shí)提示未格式化。
這時(shí)候,在Winhex中的邏輯磁盤(pán)內(nèi)選擇該分區(qū)也無(wú)法將其打開(kāi),Winhex會(huì)提示沒(méi)有找到可識(shí)別的文件系統(tǒng)。這是因?yàn)槭褂?font face="Times New Roman">Winhex直接打開(kāi)一個(gè)文件系統(tǒng)分區(qū)時(shí),也是通過(guò)調(diào)用DBR中的參數(shù)對(duì)文件系統(tǒng)中的內(nèi)容進(jìn)行解釋?zhuān)?font face="Times New Roman">DBR損壞后當(dāng)然也就無(wú)法打開(kāi)了。所以,我們應(yīng)該選擇打開(kāi)物理磁盤(pán),然后在打開(kāi)的物理磁盤(pán)界面中單擊 按鈕選擇該分區(qū)將其打開(kāi)。如圖10.34所示。
3.jpg (65.02 KB)
下載附件
2013-12-15 15:26 上傳
在物理磁盤(pán)界面中之所以能夠打開(kāi)DBR已經(jīng)損壞的分區(qū),是因?yàn)檫@時(shí)候Winhex并不是使用該分區(qū)的文件系統(tǒng)參數(shù)對(duì)分區(qū)內(nèi)的數(shù)據(jù)進(jìn)行解釋?zhuān)皇抢梅謪^(qū)表對(duì)該分區(qū)的起始位置及大小描述將其空間呈現(xiàn)給我們而已。
分區(qū)打開(kāi)后,我們看到分區(qū)DBR已經(jīng)不存在,向下翻看幾十個(gè)扇區(qū)也沒(méi)有找到可用的內(nèi)容。在實(shí)際工作中,遇到這種情況時(shí),我們有可能已經(jīng)了解到該分區(qū)原來(lái)的文件系統(tǒng)格式為FAT32,也有可能是不知道的。因此,我們第一步應(yīng)該進(jìn)行嘗試性搜索,來(lái)確定原文件系統(tǒng)的類(lèi)型。下面我們就開(kāi)始對(duì)該分區(qū)進(jìn)行分析與恢復(fù)。
步驟1 通過(guò)搜索十六進(jìn)制字節(jié)“F8FFFF”尋找FAT表。搜索位于某個(gè)扇區(qū)偏移0字節(jié)處的“F8FFFF”是為了嘗試尋找FAT表,如果能找到FAT表,說(shuō)明原來(lái)的文件系統(tǒng)是FAT系列文件系統(tǒng),然后根據(jù)FAT表的特征值進(jìn)而判斷是哪一種FAT類(lèi)型。這也是我們不建議直接搜索“F8FFFF0F”的原因,因?yàn)槟壳皼](méi)有確定該分區(qū)就是一個(gè)FAT32分區(qū),如果是一個(gè)FAT16分區(qū)的話,它的FAT表起始處就會(huì)是“F8FFFFFF”,所以搜索它們的共性更容易搜索到目標(biāo)。搜索十六進(jìn)制“F8FFFF”時(shí),設(shè)置如圖10.35所示。
4.jpg (21.08 KB)
下載附件
2013-12-15 15:26 上傳
很快,在779號(hào)扇區(qū)找到一個(gè)“F8FFFF”,如圖10.36所示。
5.jpg (72.38 KB)
下載附件
2013-12-15 15:26 上傳
可以看到,這個(gè)扇區(qū)的內(nèi)容是一個(gè)FAT32的FAT表,說(shuō)明原來(lái)的文件系統(tǒng)為FAT32。因此,我們下面要做的就是重建它的DBR。
重建FAT32的DBR需要以下幾個(gè)參數(shù):保留區(qū)大小扇區(qū)數(shù)、FAT表個(gè)數(shù)(通常為2)、每FAT表大小扇區(qū)數(shù)、根目錄簇號(hào)(通常為2號(hào)簇)、每簇扇區(qū)數(shù)、分區(qū)前隱含扇區(qū)數(shù)及分區(qū)大小扇區(qū)數(shù)(這兩個(gè)數(shù)值可以在該分區(qū)的分區(qū)表項(xiàng)中找到)。下面我們就來(lái)分析并計(jì)算這些參數(shù)。
通常FAT1的起始處位于40號(hào)扇區(qū)以前,而我們搜索到的這個(gè)FAT表位置在779號(hào)扇區(qū),所以我們應(yīng)該考慮到它是FAT2,我們按F3鍵繼續(xù)向下搜索,沒(méi)有再次找到該值,說(shuō)明這確實(shí)是FAT2的起始扇區(qū)。我們可以畫(huà)一個(gè)簡(jiǎn)單的示意圖。如圖10.37所示。
6.jpg (19.56 KB)
下載附件
2013-12-15 15:26 上傳
步驟2 尋找根目錄。尋找根目錄是為了確定FAT2的大小,從而可以使用FAT2恢復(fù)FAT1。
尋找根目錄的方法有多種:
u 一種是搜索回收站。在文件系統(tǒng)剛剛創(chuàng)建時(shí),該文件系統(tǒng)下是沒(méi)有回收站“Recycled”目錄的。在第一次將數(shù)據(jù)刪除至回收站時(shí),系統(tǒng)即會(huì)在根目錄下建立該目錄。因此,可以通過(guò)搜索字符“Recycled”來(lái)尋找根目錄。但理論上來(lái)講,如果在第一次分配給根目錄的2號(hào)簇裝滿目錄項(xiàng)前沒(méi)有進(jìn)行過(guò)刪除操作,那么Recycled目錄就會(huì)建立在分配給根目錄的后續(xù)簇空間中,而這個(gè)簇可以是未分配的任何一個(gè)簇。在這種情況下,我們通過(guò)搜索“Recycled”找到的根目錄就不是根目錄的起始簇。
u 還有一種方法是估算法。由于FAT2起始于779號(hào)扇區(qū),通常FAT32文件系統(tǒng)的FAT1起始于30~40號(hào)扇區(qū)的位置,由此可以估算出一個(gè)FAT表的大小扇區(qū)數(shù),然后向后跳過(guò)該扇區(qū)數(shù),手工查找根目錄。根目錄前為FAT2的結(jié)尾處,而這個(gè)結(jié)尾處一定會(huì)有大量的“00”存在,可以據(jù)此判斷是否正確地找到了根目錄的位置。
u 第三種方法是搜索卷標(biāo)。如果為文件系統(tǒng)設(shè)置了卷標(biāo),則根目錄下的第一個(gè)目錄項(xiàng)一定是卷標(biāo)目錄項(xiàng)。
u 第四種方法是搜索較早建立于根目錄下的目錄或文件名。
其他方法我們不再一一列舉,讀者可以在實(shí)際恢復(fù)中根據(jù)不同情況區(qū)別對(duì)待,靈活掌握。
為了向讀者介紹如何在Winhex中搜索字符,在此我們使用第四種方法。假定我們知道根目錄下有一個(gè)目錄的名字為“目錄1”,在Winhex工具欄中單擊搜索文本字符按鈕 或選擇菜單欄中的Search | Find Text,即可彈出文本搜索設(shè)置框。如圖10.38所示。
7.jpg (111.71 KB)
下載附件
2013-12-15 15:26 上傳
在設(shè)置框中進(jìn)行如下設(shè)置:
u 在搜索文本框中輸入“目錄1”。
u 字符集選擇“ASCII/Code page”,這是因?yàn)?font face="Times New Roman">FAT32使用ASCII碼存儲(chǔ)文本字符。如果在NTFS下,則需要選擇“Unicode”。
u 因?yàn)槲覀儺?dāng)前所處的位置是FAT2的起始扇區(qū),要搜索的根目錄位于其后,因此在搜索方向中選擇“Down”,即向下搜索。
u 每個(gè)目錄項(xiàng)的大小為32個(gè)字節(jié),所以我們只需要位于可以被32整除的偏移處的結(jié)果,因此偏移調(diào)制設(shè)置為“?MOD 32 = 0”。
設(shè)置完畢后單擊OK即開(kāi)始搜索,最終在1520號(hào)扇區(qū)找到“目錄1”。同時(shí)還可以看到了其他兩個(gè)目錄的目錄項(xiàng)。也如圖10.39所示。
8.jpg (94.04 KB)
下載附件
2013-12-15 15:26 上傳
我們將根目錄添加進(jìn)文件系統(tǒng)結(jié)構(gòu)示意圖中,如圖10.40所示。
9.jpg (21.04 KB)
下載附件
2013-12-15 15:26 上傳
現(xiàn)在,我們可以計(jì)算出FAT2的大小為1520 – 779 = 741個(gè)扇區(qū)。因此,FAT1的起始位置為779 – 741 = 38號(hào)扇區(qū),如圖10.41所示。
10.jpg (22.76 KB)
下載附件
2013-12-15 15:26 上傳
至此,我們已經(jīng)得到的參數(shù)有:保留區(qū)為38個(gè)扇區(qū);每FAT大小為741個(gè)扇區(qū)。我們只要再計(jì)算出每簇大小扇區(qū)數(shù)就可以進(jìn)行文件系統(tǒng)的修復(fù)工作了。
步驟3 計(jì)算每簇大小扇區(qū)數(shù)。在此我們只介紹計(jì)算FAT文件系統(tǒng)每簇大小扇區(qū)數(shù)最常用的方法,這種方法需要依賴(lài)于分區(qū)原來(lái)的根目錄下有子目錄,如果分區(qū)中原來(lái)沒(méi)有子目錄,只在根目錄下存儲(chǔ)所有的文件,則無(wú)法使用此方法。不過(guò)這種情況畢竟很少出現(xiàn),沒(méi)有哪個(gè)用戶會(huì)這樣存儲(chǔ)數(shù)據(jù)。
我們知道,為子目錄分配的簇空間中,第一個(gè)目錄項(xiàng)一定是一個(gè)“.”目錄項(xiàng),這個(gè)目錄項(xiàng)用以描述該子目錄本身,其中有一個(gè)參數(shù)描述了它現(xiàn)在所處的扇區(qū)的簇號(hào)。我們利用兩個(gè)子目錄間的起始扇區(qū)號(hào)差和它們的簇號(hào)差,就可以計(jì)算出每個(gè)簇的大小扇區(qū)數(shù)。甚至只需要利用一個(gè)子目錄和根目錄間的扇區(qū)號(hào)差及簇號(hào)差就可以計(jì)算得到。
要搜索一個(gè)子目錄,可以在Winhex中搜索位于扇區(qū)起始處的十六進(jìn)制值“2E20202020202020202020”,這是“.”后面跟隨10個(gè)空格的十六進(jìn)制表現(xiàn)形式。其搜索設(shè)置框如圖10.42所示。
11.jpg (21.96 KB)
下載附件
2013-12-15 15:26 上傳
第一個(gè)搜索到的子目錄起始于1521號(hào)扇區(qū),由第一個(gè)目錄項(xiàng)可以獲知該扇區(qū)所在的簇號(hào):偏移0x14~0x15為簇號(hào)的高二位,偏移0x1A~0x1B處為簇號(hào)的低二位,不要忘記,這兩個(gè)位置的數(shù)字本身都是以little-endian順序存儲(chǔ)的,也就是低位在前,高位在后。因此該扇區(qū)的簇號(hào)為0x00000003,即3號(hào)簇。如圖10.43所示。
12.jpg (94.54 KB)
下載附件
2013-12-15 15:26 上傳
其實(shí),我們現(xiàn)在已經(jīng)可以利用該子目錄的信息和根目錄的信息計(jì)算出每簇的大小扇區(qū)數(shù):根目錄的簇號(hào)為2,起始扇區(qū)為1520;當(dāng)前子目錄的簇號(hào)為3,起始扇區(qū)為1521,所以:( 1521 – 1520 ) / ( 3 – 2 ) = 1,即每簇大小為1個(gè)扇區(qū)。
由于在實(shí)際當(dāng)中,有可能某個(gè)子目錄的信息是過(guò)去某個(gè)文件系統(tǒng)遺留下來(lái)的,所以為了確保結(jié)果正確,首先應(yīng)該驗(yàn)證計(jì)算結(jié)果是否為2的整數(shù)次冪,如果不是2的整數(shù)次冪,結(jié)果一定是錯(cuò)誤的。另外,就是要多搜索幾個(gè)子目錄,根據(jù)不同子目錄間的關(guān)系計(jì)算簇大小,以驗(yàn)證當(dāng)前的結(jié)果是否正確。為了節(jié)省篇幅,我們?cè)诖瞬辉賹?duì)這個(gè)過(guò)程進(jìn)行講述。
步驟4 從該分區(qū)的分區(qū)表項(xiàng)中獲得其分區(qū)前隱含扇區(qū)數(shù)及分區(qū)大小扇區(qū)數(shù)。如圖10.44所示,在物理磁盤(pán)界面中,單擊按鈕 ,然后選擇丟失分區(qū)下的Partition table(template)即可跳轉(zhuǎn)到該分區(qū)的分區(qū)表所在扇區(qū),并自動(dòng)用模版將其打開(kāi),可以從中獲知該分區(qū)前的隱含扇區(qū)數(shù)及分區(qū)大小扇區(qū)數(shù)。
13.jpg (53.5 KB)
下載附件
2013-12-15 15:26 上傳
從其分區(qū)表項(xiàng)中可知,該分區(qū)的分區(qū)前隱含扇區(qū)數(shù)和分區(qū)大小扇區(qū)數(shù)分別為63和96327。
步驟5 重構(gòu)文件系統(tǒng)。目前為止,我們已經(jīng)得到了所有需要的參數(shù):保留扇區(qū)數(shù)38,F(xiàn)AT表個(gè)數(shù)2,每FAT表大小扇區(qū)數(shù)741,每簇扇區(qū)數(shù)1,由分區(qū)表得到分區(qū)前隱含扇區(qū)數(shù)和分區(qū)大小分別為63、96327,可以重構(gòu)文件系統(tǒng)了。
1) 利用我們前面講到的備份DBR的方法,復(fù)制FAT2,然后轉(zhuǎn)到38號(hào)扇區(qū)將其寫(xiě)入,重建FAT1。
2) 復(fù)制一個(gè)FAT32的DBR扇區(qū),寫(xiě)入0號(hào)扇區(qū)。如果沒(méi)有現(xiàn)成的FAT32的DBR,可以虛擬一個(gè)磁盤(pán),劃分一個(gè)分區(qū)后將其格式化成FAT32文件系統(tǒng),然后復(fù)制它的DBR扇區(qū)。恰好我的計(jì)算機(jī)C分區(qū)是FAT32,所以直接將它復(fù)制過(guò)來(lái)。然后修復(fù)其中的參數(shù)。如圖10.45所示。
14.jpg (68.49 KB)
下載附件
2013-12-15 15:26 上傳
可以看到,我們需要修改的參數(shù)只有圖中所示的四個(gè)位置。修改完畢后,將其寫(xiě)入0號(hào)扇區(qū)。
提示:偏移0x43處的卷序列號(hào)也做了修改,因?yàn)檫@個(gè)DBR是由筆者計(jì)算機(jī)的C分區(qū)拷貝而來(lái),為了避免沖突造成的不穩(wěn)定,所以對(duì)其進(jìn)行了修改。讀者在實(shí)際恢復(fù)過(guò)程中也應(yīng)該注意到這一點(diǎn)。
3) 將0號(hào)扇區(qū)復(fù)制一份,備份至6號(hào)扇區(qū)。
步驟6 重新識(shí)別硬盤(pán)。在我們的講解中使用的是虛擬磁盤(pán),所以將虛擬磁盤(pán)卸載并重新加載后原分區(qū)再現(xiàn)。如果在實(shí)際恢復(fù)中使用硬盤(pán),可以在設(shè)備管理器中將其卸載后再檢測(cè)新硬件,硬盤(pán)被重新加載后即可完成恢復(fù)。
在恢復(fù)過(guò)程中我們可以注意到,對(duì)于Fsinfo信息扇區(qū)可不必理會(huì),并不影響數(shù)據(jù)的正常恢復(fù)。
【必讀】版權(quán)免責(zé)聲明
1、本主題所有言論和內(nèi)容純屬會(huì)員個(gè)人意見(jiàn),與本論壇立場(chǎng)無(wú)關(guān)。2、本站對(duì)所發(fā)內(nèi)容真實(shí)性、客觀性、可用性不做任何保證也不負(fù)任何責(zé)任,網(wǎng)友之間僅出于學(xué)習(xí)目的進(jìn)行交流。3、對(duì)提供的數(shù)字內(nèi)容不擁有任何權(quán)利,其版權(quán)歸原著者擁有。請(qǐng)勿將該數(shù)字內(nèi)容進(jìn)行商業(yè)交易、轉(zhuǎn)載等行為,該內(nèi)容只為學(xué)習(xí)所提供,使用后發(fā)生的一切問(wèn)題與本站無(wú)關(guān)。 4、本網(wǎng)站不保證本站提供的下載資源的準(zhǔn)確性、安全性和完整性;同時(shí)本網(wǎng)站也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的損失或傷害。 5、本網(wǎng)站所有軟件和資料均為網(wǎng)友推薦收集整理而來(lái),僅供學(xué)習(xí)用途使用,請(qǐng)務(wù)必下載后兩小時(shí)內(nèi)刪除,禁止商用。6、如有侵犯你版權(quán)的,請(qǐng)及時(shí)聯(lián)系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|