史春水 劉思磊
摘要:通過數(shù)據(jù)恢復(fù)軟件掃描出來的文件的文件名很多都已經(jīng)改變,現(xiàn)在的硬盤已經(jīng)容量很大,通常用戶在硬盤里存的文件也非常多,再通過這種掃描的方法恢復(fù)丟失文檔必然造成再次尋找文件的麻煩,通過手動恢復(fù)某個具體的文件就變得有價值。
關(guān)鍵詞:計算機;數(shù)據(jù);恢復(fù)
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2020)09-0036-03
現(xiàn)今數(shù)據(jù)恢復(fù)的軟件較多,大多數(shù)數(shù)據(jù)恢復(fù)軟件可以掃描出丟失的文件,不過多數(shù)掃描出來的文件的文件名都已經(jīng)改變?nèi)缦聢D1所示,如果硬盤里的文件數(shù)目比較少這種文件名改變的情況引起的問題還不大但是現(xiàn)在的硬盤已經(jīng)容量很大,通常用戶在硬盤里存的文件也非常多,再通過這種掃描的方法恢復(fù)丟失文檔必然造成再次尋找文件的麻煩,通過手動恢復(fù)某個具體的文件就變得有價值。下面我們探討一下針對個別文件進(jìn)行恢復(fù)的方法。
當(dāng)用戶把硬盤分區(qū)格式化為NTFS文件系統(tǒng)就建立了一個NTFS的結(jié)構(gòu),將整個磁盤分區(qū)上的任何一件事物都看作一個文件,而文件的相關(guān)事物又看作一個屬性。“Master File Table”(MFT主文件表)就是NTFS文件系統(tǒng)中一個特殊的文件,它詳細(xì)地記錄了各個文件的屬性。每個文件記錄在主文件表中占據(jù)的磁盤空間一般為兩個扇區(qū),大小1KB,因為MFT的重要性在NTFS文件系統(tǒng)的原文件中還有MFT的備份“MFTMirr”,不過MFTMirr只備份了MFT的前8個扇區(qū)。文件放人回收站不小心清空了,按Shift+Del鍵永久刪除之后又想找回這個文檔,格式化,重裝系統(tǒng)等通常是導(dǎo)致文件丟失的幾種常見方式。下面我們來分別看看清空回收站、按Shift+Del鍵永久刪除文件丟失后對$MFT文件的分析。
1 清空回收站
我們在VHDI硬盤的NTFS分區(qū)內(nèi)放人一個文件名為“大家好”的word文檔,我們先用winhex打開這個盤然后找到$MFT元文件,然后我們新建一個txt文本文件在里面輸入大家好另存為的時候選擇Unicode如圖2所示,這樣我們就可以知道文件名在$MFT中的30H屬性中的編碼如圖3所示。
我們再用Winhex軟件把這個硬盤分區(qū)打開并單擊$MFT,由于NTFS文件系統(tǒng)中所有事物都是以文件的形式管理并在$MFT中記錄并占用2個扇區(qū),因此我們通過搜索文件名的方式找到這個文件在$MFT中的記錄如圖4所示。
從圖中可以看出該文件的文件名在30H屬性中,另外可以看到80H屬性中該文件的RunList為21048927。我們先把這個盤備份,然后再用清空回收站的方式刪除這個分區(qū)里的“大家好.doc”文件,再通過查找文件名的方式可以發(fā)現(xiàn)30H屬性中文件名已經(jīng)發(fā)生變化如圖5所示。
重新根據(jù)變化的文件名找到$MFT中的記錄如圖6所示,通過80H屬性知道這個文件的Runlist為21048927,通過跟沒刪除前進(jìn)行對比可以發(fā)現(xiàn)雖然文件被刪除并在回收站清空了但是文件在分區(qū)里的簇流并沒有發(fā)生變化。
2 Shift+Del鍵永久刪除
下面我們再來看看Shift+Del鍵永久刪除文件方式對文件在分區(qū)中Runlist有沒有影響。我們把剛剛備份的盤重新加載并根據(jù)之前的方法搜索文件名,因為是備份盤,所以80H屬性中該文件的RunList仍然為21048927,然后用Shift+Del鍵永久刪除這個文件,再通過搜索文件名的方式找到文件在$MFT中的記錄如圖七所示,這次我們可以發(fā)現(xiàn)不但文件名沒有變化,而且文件的Runlist仍然為21048927,因此可以知道文件在分區(qū)中的位置沒有發(fā)生變化,也就是說Shift+Del鍵永久刪除文件方式對文件在分區(qū)中Runlist沒有影響。
從上面的分析可以看出,只要MFT中還保留著文件記錄數(shù)據(jù)恢復(fù)就有跡可循,但是一旦文件記錄被破壞掉文件的恢復(fù)就比較困難。我們可以找出一條快速找到文件的思路,就是通過查找文件在MFT中的記錄并利用80H屬性中的Runlist就可以對數(shù)據(jù)進(jìn)行恢復(fù)。
在數(shù)據(jù)恢復(fù)中經(jīng)常會遇到分區(qū)信息丟失的現(xiàn)象如圖8所示。根據(jù)之前的思路我們首先要找到MFT,分區(qū)如果沒有丟失那么我們可以直接看到$MFT,而這種情況我們可以根據(jù)MFT的特性來找,通過搜索十六進(jìn)制數(shù)46494C45(明文FILE)可以快速找到$MFT如圖9所示。
在NTFS文件系統(tǒng)中$MFT元文件中存在大量的46494C45。首先我們要區(qū)分開是MFT還是MFTMirr,區(qū)分的方法是MFTMirr只備份了MFT的前8個扇區(qū),如果找到以46494C45開頭的扇區(qū)并向后跳轉(zhuǎn)8個扇區(qū)發(fā)現(xiàn)扇區(qū)的開頭不是46494C45,可以判斷找到的是MFTMirr。下面我們來研究怎么通過查找MFT和MFTMirr來找到需要的文件。NTFS文件系統(tǒng)結(jié)構(gòu)如下表所示,如果是第一種我們可以很快搜索到$MFT。
如果是第二種結(jié)構(gòu)通過分析文件系統(tǒng)結(jié)構(gòu)我們可以得出如下等式,并且經(jīng)過觀察現(xiàn)在以表二這種結(jié)構(gòu)居多。
MFT的起始扇區(qū)=MFTMirr的起始扇區(qū)+(MFT起始簇一MFTMirr起始簇)*每簇的扇區(qū)數(shù)
把之前備份的盤分區(qū)信息刪除,通過搜索46494C45,在2064扇區(qū)找到一個MFT記錄并在30H屬性中看到這是文件名為$MFT的元文件如圖10所示,之前分析過這并不能判斷一定是MFT,從2064扇區(qū)往后跳轉(zhuǎn)8個扇區(qū)在2072扇區(qū)的00偏移可以判斷之前找到的是MFTMirr如圖11所示。
因為MFTMirr前8個扇區(qū)是完全備份MFT的,可以從MFT的80H屬性中找到MFT的Runlist并通過數(shù)據(jù)解釋器看出MFT的起始簇是786432如圖12所示,接著通過MFTMirr的80H屬性找出MFTMirr的起始簇是2如圖13所示。
根據(jù)上面的分析,已經(jīng)找到了MFTMirr的起始扇區(qū)為2064,MFT的起始簇為786432簇,MFTMirr的起始簇為2簇,那么只要找出每簇的扇區(qū)數(shù)就可以計算出MFT的起始扇區(qū)。一般來講每簇扇區(qū)數(shù)在DBR信息里可以直接看到,但是DBR損壞的話那就必須通過其他方式來找,比如可以通過80H屬性找出這個文件所占的總簇數(shù)以及總字節(jié)數(shù),那么每簇扇區(qū)數(shù)=總字節(jié)數(shù)/512/總簇數(shù),因為每個扇區(qū)為512字節(jié),文件總字節(jié)數(shù)/512=文件總扇區(qū)數(shù),再除總簇數(shù)就可以得出每簇所占的扇區(qū)數(shù),下面我們舉例說明一下。通過數(shù)據(jù)解釋器可以知道這個文件占的總字節(jié)數(shù)為67108864字節(jié)如圖14所示,然后通過這個文件的Runlist可以知道總簇數(shù)為16384簇如圖15所示,計算后得知每簇扇區(qū)數(shù)為8,也符合現(xiàn)在NTFS文件系統(tǒng)常見每簇所占扇區(qū)數(shù)。
現(xiàn)在我們把數(shù)據(jù)代入,MFT的起始扇區(qū)=2064+(786432-2)*8,計算后為6293504扇區(qū),我們根據(jù)計算的結(jié)果直接跳轉(zhuǎn)到該扇區(qū)來驗證一下可以發(fā)現(xiàn)這個辦法是可行的如圖16所示。
找到$MFT元文件后,再來找某個具體的文件就變得容易了。通過搜索文件記錄找到80H屬性然后再根據(jù)文件的Run-list來提取該文件即可。
參考文獻(xiàn):
[1]趙振洲.數(shù)據(jù)恢復(fù)技術(shù)案例教程[Ml.機械工業(yè)出版社,2018.
[2]劉偉.數(shù)據(jù)恢復(fù)技術(shù)深度揭秘[M].電子工業(yè)出版社,2010.
[3]張京生,汪中夏,劉偉.數(shù)據(jù)恢復(fù)方法及案例分析[M].電子工業(yè)出版社,2008.
[4]高志鵬,張志偉,孫云峰.識數(shù)尋蹤[M].人民郵電出版社,2013.
【通聯(lián)編輯:代影】
作者簡介:史春水(1975-),男,湖南邵陽人,中學(xué)高級教師,本科,主要研究方向為計算機。