天天看點

Windows檔案系統-NTFS檔案系統

Windows作為最流行的個人計算機作業系統,成為了我們學習、工作和生活的一部分。我們幾乎每天都會經曆打開檔案管理器,進入具體磁盤,打開具體檔案,而Windows采用檔案系統管理着所有的檔案和磁盤空間,這個檔案系統就是NTFS。

NTFS檔案系統

文檔主要分為兩大部分:

1.NTFS檔案系統簡介

2.檔案磁盤位置計算

NTFS檔案系統簡介

NTFS(New Technology File System)是微軟1993年推出的用于Windows系統的檔案系統,用于代替原來的FAT檔案系統,進而提高性能。NTFS自推出以來經曆了多個版本的更新,更新曆史如下:

Windows檔案系統-NTFS檔案系統

可見2001年發行3.1版本後,NTFS就再沒有更新過了。

NTFS資料結構

一個NTFS檔案系統的結構如下圖所示:

Windows檔案系統-NTFS檔案系統

整個分區主要分為三大區域:

1.VBR(Volume Boot Record):非常重要,存儲跟引導相關的資料,大小為16個扇區;

2.檔案區域:在NTFS的概念裡,一切皆為檔案,包括中繼資料檔案、正常檔案、目錄、一切的一切都是檔案;

3.BBS(Backup Boot Sector):分區的第一個扇區是分區引導記錄,是能否引導系統的關鍵,是以NTFS用分區的最後一個扇區備份第一個扇區,用于修複損壞的第一個扇區。

檔案

檔案可分為三種類型:中繼資料檔案、正常檔案和目錄。

中繼資料檔案

任何檔案系統都會有中繼資料用于描述檔案資訊,資訊有如名稱、大小、修改時間、存放位置等等,注意的是NTFS中繼資料也用檔案表示,總有16個中繼資料檔案,這些檔案的名稱都是以$開頭,屬于隐藏檔案。

Windows檔案系統-NTFS檔案系統

檢視這些檔案:

Windows檔案系統-NTFS檔案系統

MFT(Master File Table)

非常重要的檔案,包含了所有檔案的中繼資料,定位檔案必須要經過$MFT檔案。MFT由一個個檔案記錄組成,一個檔案至少占用一個記錄,$MFT檔案占用第一個記錄。

MFT檔案記錄(固定大小為1KB)由記錄頭部和屬性組成,記錄頭部大小為42或48位元組,3.1版本之前是42位元組,之後是48位元組。記錄頭部資料結構定義如下:

Windows檔案系統-NTFS檔案系統

檔案記錄屬性分為常駐屬性和非常駐屬性,常駐屬性代表屬性的全部内容在檔案記錄中,非常駐屬性代表屬性内容超過了檔案記錄的大小,需要另外開辟空間存儲,例如檔案内容比較大。

檔案記錄頭部中标明了第一個屬性的偏移量,NTFS支援的屬性定義在$AttrDef中,每個屬性有唯一辨別ID,常見的ID有:

Windows檔案系統-NTFS檔案系統

檔案内容

檔案内容由屬性$DATA描述,由于檔案記錄的大小固定為1KB,記錄頭占了48位元組,是以留給檔案存放内容的空間不會超過976位元組。如果檔案内容比較少,則全部存在檔案記錄中,否則另外開辟extents存儲。開辟的extents以族為機關,NTFS基本配置設定機關是族,族大小為4KB。

檔案磁盤位置計算

借助微軟公司提供的工具fsutil可計算出檔案的資料分布範圍,根據檔案的大小,可分為兩種情況。

小檔案

小檔案指的是檔案内容可容納在檔案記錄中,不用開辟extents存放,也是最不友善計算的情況。

第一步:

擷取$MFT檔案的磁盤分布範圍,方式如下:

Windows檔案系統-NTFS檔案系統

指令為:fsutil file queryextents 檔案路徑

輸出結果(結果可能為多行,代表檔案存放位置不連續):

VCN:虛拟族編号,相對于檔案内部的偏移量,機關為族;

族:該extent大小,機關為族;

LCN:邏輯族編号,extent相對于分區的偏移量,機關為族。

這樣就可以知道$MFT檔案在分區的0xc0000(10進制為786432)族(大小4096)處,換算為位元組為786432 4096=3221225472,檔案大小為0x1640(10進制為5696)族,換算為位元組為5696 4096 = 23330816。

第二步:

擷取檔案在$MFT檔案的位置,檔案參考編号的低4位元組就是檔案在$MFT檔案的位置,求檔案參考編号的方法如下:

Windows檔案系統-NTFS檔案系統

通過fsutil volume filelayout 檔案路徑 可擷取到檔案參考編号,0x0007000000005206的低4位元組為0x5206,也就是說E:\12.txt的檔案記錄位于$MFT的第0x5206(10進制為20998)個記錄處。

一個檔案記錄固定為1KB,那麼E:\12.txt的檔案記錄則位于 20998 * 1024 = 21501952 = 0x1481800。

用FTK看看$MFT的0x1481800處是什麼内容:

Windows檔案系統-NTFS檔案系統

字元“FIFE”代表是一個檔案記錄,第二個紫框表明檔案名比對,第三個紫框是檔案内容“helios89”,看看12.txt的内容:

Windows檔案系統-NTFS檔案系統

可見計算得到的E:\12.txt在$MFT的位置是正确的,知道了$MFT在分區的分布範圍,也知道了E:\12.txt在$MFT的位置,通過簡單的計算便可知道E:\12.txt在分區的分布範圍了。

大檔案

大檔案指的是檔案記錄容納不下檔案的内容,需要開辟extents存放,這種檔案是最容易計算其資料分布範圍的,參考小檔案計算的第一步。

分區偏移量

上面的計算結果得到的是檔案在分區的偏移量,需要加上分區偏移量才是磁盤的偏移量。分區偏移量可通過FTK軟體檢視。

方法如下:

選擇【File】->【add Evidence Item..】,彈框如下:

Windows檔案系統-NTFS檔案系統

選擇【Physical Drive】【下一步】選擇磁盤,點選完成。

在【View】中選擇【Properties】顯示出屬性框

在左側的【Evidence Tree】中選擇一個分區,在屬性框中便可檢視到分區的偏移量(機關扇區)了,如下圖所示:

Windows檔案系統-NTFS檔案系統

結束語

Windows作為最流行的個人計算機作業系統,也證明了NTFS檔案系統的強大和穩定。本文檔隻是對NTFS進行了簡單的介紹,還有更多的技術原理值得我們繼續研究,讓我們繼續前進吧。

繼續閱讀