摘要:隨著信息化進(jìn)程的深入推進(jìn),信息發(fā)展在給人們的日常生活與工作帶來(lái)便捷的同時(shí),也給人們帶來(lái)一系列的信息安全問(wèn)題,如數(shù)據(jù)丟失,信息被盜等,因此不斷探索和完善計(jì)算機(jī)數(shù)據(jù)恢復(fù)技術(shù)成為當(dāng)前一項(xiàng)重要的課題。本文針對(duì)Windows NTFS下硬盤格式化數(shù)據(jù)恢復(fù)技術(shù)進(jìn)行了深入地分析,以期解決因硬盤格式化而造成的數(shù)據(jù)丟失問(wèn)題。
關(guān)鍵詞:Windows NTFS;硬盤格式化;數(shù)據(jù)恢復(fù);數(shù)據(jù)結(jié)構(gòu)
中圖分類號(hào):TP309.3 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 10-0000-02
硬盤,通常由多個(gè)分區(qū)組合而成,是計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)的重要場(chǎng)所。倘若硬盤中某個(gè)分區(qū)一旦被不小心格式化,那么在該分區(qū)中存取的數(shù)據(jù)將相應(yīng)地被丟失掉,倘若整個(gè)硬盤的分區(qū)都被不小心格式化,則所有被保存的數(shù)據(jù)均會(huì)被丟失。所以,對(duì)硬盤格式化數(shù)據(jù)進(jìn)行有效的恢復(fù),探索硬盤格式化數(shù)據(jù)恢復(fù)技術(shù)成為當(dāng)前一項(xiàng)重要的課題。
一、基于Windows NTFS硬盤的格式化數(shù)據(jù)恢復(fù)程序設(shè)計(jì)
當(dāng)用戶以高級(jí)格式化的方式對(duì)一個(gè)NTFS卷進(jìn)行格式化時(shí),計(jì)算機(jī)中的格式化程需會(huì)將根目錄中的索引與Bitmap元數(shù)據(jù)中的內(nèi)容自動(dòng)地予以清除。但是,保存在根目錄之外的索引、數(shù)據(jù)及MFT并未被完全清除掉,其MFT上對(duì)該卷上的所有信息記錄得十分詳細(xì),如該文件創(chuàng)建的時(shí)間,該文件創(chuàng)建的文件名、該文件存取數(shù)據(jù)時(shí)的簇號(hào)等。所以,倘若在硬盤中的數(shù)據(jù)未被全部覆蓋前,對(duì)硬盤的格式化數(shù)據(jù)予以恢復(fù),從理論意義上說(shuō)可能性非常大。但倘若用戶對(duì)一個(gè) NTFS 卷進(jìn)行低級(jí)格式化,格式化程序便會(huì)通過(guò)某個(gè)數(shù)字將該卷的數(shù)據(jù)區(qū)加以填充,而此時(shí)對(duì)格式化數(shù)據(jù)加以恢復(fù)是較為困難的。但就目前受到高度關(guān)注且應(yīng)用廣泛的Windows操作系統(tǒng)來(lái)說(shuō),其格式化方式基本以高級(jí)格式化為主,具體從體現(xiàn)在以下幾個(gè)方面:
(一)獲得文件名屬性和數(shù)據(jù)屬性。在NTFS文件系統(tǒng)中,MFT作為主控文件表對(duì)文件的所有屬性及文件在磁盤中的具體位置都記載的非常清楚,而集合了所有文件的MFT則被存放在MFT區(qū)域的空間中,而該MFT區(qū)域空間比例約占了整個(gè)磁盤空間的12%。所以,一旦尋找到MFT 區(qū)域的起始位置,便能將所有文件的MFT找到,所有文件的文件名屬性及數(shù)據(jù)屬性自然也就可以獲取。
(二)獲取MFT區(qū)域起始位置。在對(duì)NTFS 卷進(jìn)行格式化后,若仍是NTFS文件系統(tǒng),則可通過(guò)BPB參數(shù)將MFT區(qū)域的起始位置快速地尋找到,若文件系統(tǒng)得以改變,如格式化后變?yōu)镕AT32文件系統(tǒng),可以從16扇區(qū)開始掃描MFT的起始位置。因?yàn)镹TFS格式中,MFT的前面16項(xiàng)只用以儲(chǔ)存元數(shù)據(jù)文件,然后才是用以建立文件夾或者文件的MFT。因此可以通過(guò)這個(gè)特點(diǎn)快速的獲取MFT區(qū)域的起始位置。
(三)生成目錄結(jié)點(diǎn)。在使用程序?qū)Ω袷交臄?shù)據(jù)進(jìn)行恢復(fù)時(shí),需要查找出與每個(gè)文件相關(guān)的目錄名,用以恢復(fù)操作。在每個(gè)MFT項(xiàng)中偏移2CH處,就能查找到該文件或者M(jìn)FT中記載該文件時(shí)所保存的編號(hào),而若在30H屬性中偏移18H處,則可以輕易地將父目錄中所記錄的文件參考號(hào)尋找出來(lái)。倘若未能將有關(guān)的目錄信息找尋出來(lái),可以通過(guò)將根目錄的名稱設(shè)置成父目錄的形式,來(lái)尋找相關(guān)的信息,如以DIR形式的目錄名進(jìn)行查找。
(四)重構(gòu)目錄樹。NTFS格式中的目錄結(jié)構(gòu)通常情況以為B+樹形結(jié)構(gòu)得以體現(xiàn),所有子節(jié)點(diǎn)的定位數(shù)據(jù)組成了整個(gè)樹目錄,而樹目錄所需要的定位數(shù)據(jù)信息則被較好的保存在索引分配屬性,所以只要通過(guò)索引分配屬性中保存的定位信息則能夠促進(jìn)目錄樹重構(gòu)的實(shí)現(xiàn)。同時(shí),可以利用每個(gè)MFT項(xiàng)中記錄的文件或文件夾MFT編號(hào),和父目錄的文件參考號(hào)查找出跟該文件相關(guān)的目錄數(shù)據(jù)信息,使用遞歸算法來(lái)重構(gòu)目錄樹。
(五)數(shù)據(jù)恢復(fù)操作。查找出以上數(shù)據(jù)信息后,在儲(chǔ)存位置重新建立一個(gè)與之相對(duì)應(yīng)的文件及目錄,待文件所記錄的物理地址讀取完后,再對(duì)該文件所記載的數(shù)據(jù)流屬性予以判斷,如果其數(shù)據(jù)流屬性是常駐屬性,那么可將文件數(shù)據(jù)讀取后,再重新定義到新件文件當(dāng)中,而如果其數(shù)據(jù)流屬性并非為常駐屬性,那么需從頭到尾對(duì)每個(gè)運(yùn)行的數(shù)據(jù)進(jìn)行讀取,待讀取完后再重新寫入文件中,從而確保能夠?qū)G失的文件進(jìn)行一定的數(shù)據(jù)恢復(fù)。
二、恢復(fù)程序中主要數(shù)據(jù)結(jié)構(gòu)的介紹
(一)DBR 的結(jié)構(gòu)
typedef strNTFS_DBR{
BYTE LogDr;
WORD BPSector;
BYTE SPCluster;
BYTE MDescriptor;
LARGE_INTEGER TSectors;
LARGE_INTEGER MCluster;
LARGE_INTEGER MSCluster;
LARGE _ INTEGER M irrSCluster;
LARGE_ INTEGER MSSector;
LARGE_ INTEGER MESector;
LARGE_ INTEGER MSize;
DWORD CPMFT;
DWORD CPIndex;
BYTE FileSystem [8] ;
}NTFS_DBR;
(二)文件存儲(chǔ)鏈中一項(xiàng)的結(jié)構(gòu)
typedef struct DataRun{
DWORD ClusterNums;
LARGE _INTEGER StartCluster;
} DATARUN
本文主要闡述了恢復(fù)window NTFS下格式化磁盤的數(shù)據(jù)的程序設(shè)計(jì)原理,主要是獲取文件系統(tǒng)中的MFT起始位置,然后構(gòu)建文件系統(tǒng)的目錄樹,讀取文件系統(tǒng)中目錄樹的數(shù)據(jù)存儲(chǔ)地址,查找出詳細(xì)的數(shù)據(jù)記錄,寫入新的文件中,從而實(shí)現(xiàn)丟失數(shù)據(jù)的恢復(fù)操作。
參考文獻(xiàn):
[1]涂彥暉.NTFS 文件系統(tǒng)內(nèi)核分析與數(shù)據(jù)安全,金山軟件股份有限公司,2006,8
[2]鄭平泰.磁盤數(shù)據(jù)安全技術(shù)與編程實(shí)例.北京:中國(guó)水利水電出版社,2007