《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Windows的磁盤數(shù)據(jù)清除技術(shù)
基于Windows的磁盤數(shù)據(jù)清除技術(shù)
電子技術(shù)
何 娜,,趙亦工,,江 華
摘要: 在研究Windows操作系統(tǒng)中文件管理系統(tǒng)NTFS的基礎(chǔ)上,提出一種徹底清除磁盤數(shù)據(jù)的方法,。NTFS對文件的訪問操作,,主要通過與文件相關(guān)的MFT表進(jìn)行,這與FAT系統(tǒng)存在較大差異,。通過分析MFT表管理磁盤數(shù)據(jù)的方法,,建立一種樹形目錄結(jié)構(gòu),并以該樹形目錄作為管理磁盤中所有MFT表的工具,。采用遍歷之后立即釋放樹結(jié)點(diǎn)的方法,,解決了內(nèi)存過度占用的問題。該技術(shù)可以在磁盤扇區(qū)直接清除數(shù)據(jù),,還可對數(shù)據(jù)進(jìn)行更加直接的管理,,減少了對操作系統(tǒng)的
Abstract:
Key words :

安全的磁盤清理軟件可以很好地為數(shù)字化信息系統(tǒng)服務(wù)。目前大部分磁盤清理軟件未能徹底清除在磁盤中的數(shù)據(jù),,對于磁盤上已經(jīng)刪除的文件信息在未重新寫入新的文件時(shí),,Windows只是標(biāo)記,并沒有進(jìn)行數(shù)據(jù)清理。這就使得可以通過數(shù)據(jù)恢復(fù)的手段獲取保密信息,,大多數(shù)清理軟件只是采用重新填寫無效文件的方式清除磁盤上的數(shù)據(jù),。而這樣會(huì)大大縮短磁盤的使用壽命,。文中研究了Windows的文件系統(tǒng)NTFS清除磁盤數(shù)據(jù)的原理,,采用直接訪問NTFS的主文件列表找到文件具體存儲(chǔ)的位置,并解碼二進(jìn)制文件,,從而徹底清除文件,,減少了對操作系統(tǒng)的依賴,,避免了大量盲目填寫無效文件的操作,并保護(hù)了磁盤使用壽命,。

1 NTFS系統(tǒng)結(jié)構(gòu)原理
1.1 基本原理
NTFS是Windows NT引入的新型文件系統(tǒng),,由于NTFS的結(jié)構(gòu)復(fù)雜,內(nèi)容繁多,,這里僅對NTFS卷上的底層結(jié)構(gòu)做分析,。在NTFS格式中,文件以簇的形式分配,。最小的單位為扇區(qū),,N個(gè)扇區(qū)為一簇。其中,,N的值由引導(dǎo)扇區(qū)規(guī)定,。NTFS格式磁盤的數(shù)據(jù)分為4大部分:引導(dǎo)區(qū)、主文件列表,、系統(tǒng)文件和文件數(shù)據(jù)區(qū),。
引導(dǎo)區(qū)(Partition boot sector):所有磁盤格式都有這個(gè)區(qū),占用了磁盤第一個(gè)扇區(qū),。
主文件列表(Master File List):記錄了卷上所有文件,,每個(gè)文件對應(yīng)了表上的一條記錄。
系統(tǒng)文件(System file):NTFS一共有16個(gè)系統(tǒng)文件,,8個(gè)隱藏文件,。
文件數(shù)據(jù)區(qū)(File Area):存放文件數(shù)據(jù)。
NTFS跟FAT16,,F(xiàn)A332一樣都在引導(dǎo)扇區(qū)中有一些BPB參數(shù),,但與FAT32,F(xiàn)AT16并不完全相同,。文獻(xiàn)對NTFS引導(dǎo)扇區(qū)一些重要數(shù)據(jù)的含義進(jìn)行了詳細(xì)介紹,。
1.2 主控文件表與元數(shù)據(jù)文件
MFT是一個(gè)對應(yīng)的數(shù)據(jù)庫,由一系列的文件記錄組成,,卷中每一個(gè)文件都有一個(gè)文件記錄,。主文件表本身也有自己的文件記錄。實(shí)際上,,MFT自身也是一個(gè)文件,,因此,主文件列表的第一個(gè)記錄就是它自身,。MFT的每個(gè)記錄都有一個(gè)編號(hào),,這里稱為ID號(hào),這個(gè)ID從0開始,。MFT自身是NTFS系統(tǒng)的第一個(gè)文件,,所以文件$MFT的ID號(hào)為0。
MFT和其他23個(gè)文件一起,,用戶每添加一個(gè)文件ID號(hào)加1,。MFT頭的長度跟偏移處的數(shù)據(jù)含義不變,但屬性列表是可變的,,其不同的屬性列表,,有著不同的含義,最后能看到MFT表以FFFFFFFFH結(jié)束,。
MFT頭的標(biāo)準(zhǔn)信息見文獻(xiàn),,它對MFT表的結(jié)構(gòu)進(jìn)行了全面的分析。MFT前16個(gè)文件屬于系統(tǒng)文件,,也稱為元文件,,用于存放系統(tǒng)中的元數(shù)據(jù),元數(shù)據(jù)文件及其作用見文獻(xiàn),。
1.3 文件的MFT記錄及其包含的屬性
一個(gè)文件通常占用一條文件記錄,。然而當(dāng)一個(gè)文件具有多項(xiàng)屬性值的時(shí)候,就可以占用一個(gè)以上的文件記錄,。這樣的情況下,,第一個(gè)文件記錄就是基本文件記錄。其中存儲(chǔ)了該文件需要其他文件記錄的位置,。小文件和小的文件夾將全部存放在MFT記錄中,。
文件記錄包含索引信息,小的文件夾記錄完全存儲(chǔ)在MFT結(jié)構(gòu)里,。然而大文件與文件夾被組織成為B+樹結(jié)構(gòu),,一個(gè)指針指向一個(gè)外部簇,該簇用來存放那些MFT內(nèi)存儲(chǔ)不了的文件夾屬性,。
在MFT記錄中的每個(gè)屬性都有一個(gè)屬性頭,,這個(gè)屬性頭包含一些該屬性的重要信息,如屬性類型,、大小,、名字以及是否為常駐屬性等,。

2 具體實(shí)現(xiàn)方法
具體實(shí)現(xiàn)分為兩個(gè)模塊:(1)索引磁盤中所有文件的數(shù)據(jù)段在磁盤中存放的起始簇號(hào)。(2)動(dòng)態(tài)建立一個(gè)與磁盤文件存放相對的文件樹,,對子樹進(jìn)行遍歷查找每個(gè)文件數(shù)據(jù)段的簇號(hào),,從而可以從扇區(qū)直接清除數(shù)據(jù)信息。最后刪除所建立的子樹,,釋放占據(jù)的內(nèi)存空間,。
2.1 索引磁盤中未刪除文件的簇號(hào)
在NTFS中,文件目錄僅是文件名的一個(gè)索引,,NTFS使用了一種特殊的方式把文件名組織起來,,以便快速訪問。當(dāng)創(chuàng)建一個(gè)目錄時(shí),,NTFS必須對目錄中的文件名屬性進(jìn)行索引,。

一個(gè)目錄的MFT將其目錄中的文件名與子目錄名進(jìn)行排序,并保存在索引根屬性中,。所以可以通過訪問根目錄的索引分配找到磁盤上面的一級目錄,,并記錄下其MFT參考號(hào),然后在通過該參考號(hào)獲取MFT文件,,進(jìn)而再找到其索引分配,,就可以將一級目錄下的子目錄全部及找到,直到不再有子目錄為止,??山⒊稣麄€(gè)磁盤的目錄樹,每項(xiàng)MFT文件中都記錄了該文件是被刪除或正在被使用的目錄,。通過解析以上分析的屬性就能獲取這些信息,,該算法流程如圖1所示。

c.JPG


圖中每一步操作都是根據(jù)MFT表的屬性進(jìn)行編碼,。
第一步從分區(qū)信息表即中可以獲得這些有用的信息,。讀取特定扇區(qū)的信息可以調(diào)用CreateFile與ReadFile來實(shí)現(xiàn)。讀取某個(gè)MFT元文件的具體方法是:通過BPB參數(shù)獲取$MFT的位置,,然后根據(jù)源文件的MFT記錄號(hào),,移動(dòng)句柄,就可以順利讀取MFT元文件,。由于每個(gè)MFT文件的大小是1 kB,,所以句柄的偏移dwStartSector=MFT文件記錄號(hào)×2+$MFT所在的扇區(qū)號(hào)。即可訪問任何一個(gè)磁盤的MFT元數(shù)據(jù)文件信息,。
第二步根據(jù)根目錄的MFT文件信息,,解析索引A0H屬性從而找出索引信息,這涉及到解碼二進(jìn)制文件,。
第三步根據(jù)索引中的信息找出根目錄的子目錄的MFT編號(hào),,再根據(jù)這個(gè)編號(hào)打開MFT文件內(nèi)容,,找出30H屬性與MFT屬性頭,解析文件名,,以及標(biāo)記文件是否為目錄,,是否被刪除的信息。
第四步如果該文件是目錄,,則繼續(xù)查找它下面的子目錄,否則轉(zhuǎn)第五步,。
第五步 如果該文件已刪除,,則返回第一步;否則,,打開它對應(yīng)的MFT文件,,然后解析80H屬性,找到文件數(shù)據(jù)段開始的簇號(hào),,并記錄下來,。
2.2 建立磁盤對應(yīng)的文件樹
建立一個(gè)N叉樹來表示每一個(gè)磁盤中的文件存放,只是它的數(shù)據(jù)信息就是上面獲取的文件數(shù)據(jù)段開始的簇的編號(hào),。遍歷文件樹的過程,,即是獲取簇號(hào)以及對相應(yīng)簇的信息進(jìn)行清除的過程。每個(gè)磁盤中MFT表的數(shù)量巨大,,所以在遍歷完根目錄下子目錄的所有文件時(shí),,要?jiǎng)h除該子樹,便于釋放內(nèi)存,,從而減少算法的空間開銷,。而且N叉樹的數(shù)據(jù)結(jié)構(gòu)本身對遍歷效率也有很大提升,筆者采用深度優(yōu)先遞歸搜索,,并對此進(jìn)行優(yōu)化,,取得了良好效果。

測試平臺(tái)為windows7,,測試工具為winhex,。清除之前可以看到新建文本文檔大小是6.9 kB,所在簇的信息如圖2所示,。

a.JPG

b.JPG


執(zhí)行程序后結(jié)果如圖3所示,。可以看到文件的大小歸0,,并且80H的信息發(fā)生變化,,原本存儲(chǔ)的索引內(nèi)容全部被清除為0,即文件的數(shù)據(jù)信息全部被清除,。

3 結(jié)束語
NTFS文件系統(tǒng)十分復(fù)雜,,這里主要針對NTFS系統(tǒng)管理磁盤的MFT文件進(jìn)行分析,,解析它的一系列屬性,得到每個(gè)文件的數(shù)據(jù)段信息的開始簇號(hào),。通過對磁盤建立文件樹,,標(biāo)記所有未刪除文件的數(shù)據(jù)段開始的簇號(hào),從而可以直接清除剩余磁盤簇的信息,,達(dá)到繞過操作系統(tǒng)直接對扇區(qū)進(jìn)行清除的目的,,避免了數(shù)據(jù)恢復(fù)的可能。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。