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

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

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

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

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

c.JPG


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

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

a.JPG

b.JPG


執(zhí)行程序后結(jié)果如圖3所示??梢钥吹轿募拇笮w0,并且80H的信息發(fā)生變化,原本存儲的索引內(nèi)容全部被清除為0,即文件的數(shù)據(jù)信息全部被清除。

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

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