史春水 劉思磊



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