NTFS文件系統詳解

注:本文參考博客地址

NTFS (New Technology File System),是 WindowsNT 環境的文件系統。新技術文件系統是Windows NT家族(如,Windows 2000、Windows XP、Windows Vista、Windows 7和 windows 8.1)等的限制級專用的文件系統(操作系統所在的盤符的文件系統必須格式化爲NTFS的文件系統,4096簇環境下)。NTFS取代了老式的FAT文件系統。
NTFS對FAT和HPFS作了若干改進,例如,支持元數據,並且使用了高級數據結構,以便於改善性能、可靠性和磁盤空間利用率,並提供了若干附加擴展功能。NTFS文件系統擁有以下特點:
安全性高:NTFS支持基於文件或目錄的ACL,並且支持加密文件系統(EFS)。
可恢復性:NTFS支持基於原子事務概念的文件恢復,比較符合服務器文件系統的要求。
文件壓縮:NTFS支持基於文件或目錄的文件壓縮,可以很方便的節省磁盤空間。
磁盤配額:NTFS支持磁盤配額,可針對系統中每個用戶分配磁盤資源。


一、分析NTFS文件系統的結構

當用戶將硬盤的一個分區格式化爲NTFS分區時,就建立了一個NTFS文件系統。NTFS文件系統同FAT32文件系統一樣,也是用“簇”爲存儲單位,一個文件總是佔用一個或多個簇。
NTFS文件系統使用邏輯簇號(LCN)和虛擬簇號(VCN)對分區進行管理。
邏輯簇號:既對分區內的第一個簇到最後一個簇進行編號,NTFS使用邏輯簇號對簇進行定位。
虛擬簇號:既將文件所佔用的簇從開頭到尾進行編號的,虛擬簇號不要求在物理上是連續的。
NTFS文件系統一共由16個“元文件”構成,它們是在分區格式化時寫入到硬盤的隱藏文件(以”$”開頭),也是NTFS文件系統的系統信息。

NTFS的16個元文件介紹:
這裏寫圖片描述


二、分析$Boot文件

這裏寫圖片描述

下面我們分析一下DBR中的各參數

EB 52 90:(跳轉指令)本身佔2字節它將程序執行流程跳轉到引導程序處。

“EB 52 90″清楚地指明瞭OS引導代碼的偏移位置。jump 52H加上跳轉指令所需的位移量,即開始於0×55。

4E 54 46 53 20 20 20 20:(OEM代號)這部分佔8字節,其內容由創建該文件系統的OEM廠商具體安排。爲“NTFS”。

BPB:NTFS文件系統的BPB從DBR的第12個字節開始,佔用73字節,記錄了有關該文件系統的重要信息,
下表中的內容包含了“跳轉指令”、“OEM代號”以及“BPB”的參數。

這裏寫圖片描述

對照上表,對BPB的分析如下:

02 00:每個扇區512個字節
08:每個簇8個扇區
00 00:保留扇區爲0
00 00 00:爲0
00:不使用
F8:爲硬盤
00 00:爲0
00 3F:每磁道63個扇區
00 FF:每柱面255個磁頭
00 00 00 3F:隱藏扇區數(MBR到DBR)
00 00 00 00:不使用
80 00 80 00:不使用
00 00 00 00 04 FF D5 E5:扇區總數83875301
00 00 00 00 00 0C 00 00:MFT7864320000000000000010 MFTmirr的開始簇號16
00 00 00 F6:每個MFT記錄的簇數
00 00 00 01:每索引的簇數
B6 FC 23 AA FC 23 63 B9:分區的邏輯序列號
引導程序:DBR的引導程序佔用426字節,其負責完成將系統文件NTLDR裝入,對於沒有安裝系統的分區是無效的。


三、分析$MFT元文件

在NTFS文件系統中,磁盤上的所有數據都是以文件的形式存儲,其中包括元文件。每個文件都有一個或多個文件記錄,每個文件記錄佔用兩個扇區,而MFTNTFS MFT來確定文件在磁盤上的位置以及文件的屬性,所以MFT MFT的起始位置在DBR中有描述。MFT0 MFT的前16個文件記錄總是元文件的,並且順序是固定不變的。


四、分析文件記錄

1、文件記錄的結構

文件記錄由兩部分構成,一部分是文件記錄頭,另一部分是屬性列表,最後結尾是四個“FF”。然後我們根據上面BPB中的MFT786432(7864324096()+63512(C)=3221257728=0xC0007E00) MFT所在地址,查看文件記錄格式如下是一個完整的文件記錄:
這裏寫圖片描述

在同一系統中,文件記錄頭的長度和具體偏移位置的數據含義是不變的,而屬性列表是可變的,其不同的屬性有着不同的含義。後文將對屬性進行具體分析,先來看看文件記錄頭的信息。

這裏寫圖片描述

在NTFS文件系統中所有與文件相關的數據結構均被認爲是屬性,包括文件的內容。文件記錄是一個與文件相對應的文件屬性數據庫,它記錄了文件的所有屬性。每個文件記錄中都有多個屬性,他們相對獨立,有各自的類型和名稱。每個屬性都由兩部分組成,既屬性頭和屬性體。屬性頭的前四個字節爲屬性的類型。從文件記錄頭可以看到第一個屬性流的偏移地址,(C0007E00+0038=C0007E38)如下是以10H屬性爲例的屬性結構
這裏寫圖片描述

另外屬性還有常駐與非常駐之分。當一個文件很小時,其所有屬性體都可以存放在文件記錄中,該屬性就稱爲常駐屬性。如果某個文件很大,1KB的文件記錄無法記錄所有屬性時,則文件系統會在MFT() MFT元文件內的記錄就稱爲非常駐屬性。

分析屬性的屬性頭

每個屬性都有一個屬性頭,這個屬性頭包含了一些該屬性的重要信息,如屬性類型,屬性大小,名字(並非都有)及是否爲常駐屬性等。

常駐屬性的屬性頭分析表:
這裏寫圖片描述

如下是非常駐屬性的屬性頭分析表:
這裏寫圖片描述

前面說過了,屬性的種類有很多,因此各屬性體的含義也不同。下表是NTFS文件系統中的所有屬性體的簡介。
這裏寫圖片描述
這裏寫圖片描述

接下來來看幾個重要的屬性:

分析10H屬性:

10H類型屬性它包含文件的一些基本信息,如文件的傳統屬性,文件的創建時間和最後修改時間和日期,文件的硬鏈接數等等。如下:是一個10H類型的屬性。
這裏寫圖片描述
其中偏移0×20處的文件屬性解釋如下:
這裏寫圖片描述

分析20H屬性

20H類型屬性既屬性列表,當一個文件需要好幾個文件記錄時,纔會用到20H屬性。20H屬性記錄了一個文件的下一個文件記錄的位置。如下:是20H屬性的解釋。
這裏寫圖片描述

分析30H屬性

30H類型屬,該屬性用於存儲文件名 ,它總是常駐屬性。最少68字節,最大578字節,可容納最大Unicode字符的文件名長度。
這裏寫圖片描述

分析80H屬性

80H屬性是文件數據屬性,該屬性容納着文件的內容,文件的大小一般指的就是未命名數據流的大小。該屬性沒有最大最小限制,最小情況是該屬性爲常駐屬性。常駐屬性就不做多的解釋了,上面我標記的是一個非常駐的80H屬性。
這裏寫圖片描述

其中,Run List是最難理解,也是最重要的。當屬性不能存放完數據,系統就會在NTFS數據區域開闢一個空間存放,這個區域是以簇爲單位的。Run List就是記錄這個數據區域的起始簇號和大小,一個Run List例子上所示。這個示例中,Run List的值爲“32 CC 26 00 00 0C”,因爲後面是00H,所以知道已經是結尾。如何解析這個Run List呢? 第一個字節是壓縮字節,高位和低位相加,3 + 2 = 5,表示這個Data Run信息佔用五個字節,其中高位表示起始簇號佔用多少個字節,低位表示大小佔用的字節數。在這裏,起始簇號佔用3個字節,值爲0C 00 00,大小佔用2個字節,值爲26 CC。解析後,得到這個數據流起始簇號爲C0000,大小爲9932簇。
這裏寫圖片描述

分析90H屬性

90H屬性是索引根屬性,該屬性是實現NTFS的B+樹索引的根節點,它總是常駐屬性。該屬性的結構如下圖:
這裏寫圖片描述

索引根的結構如表:
這裏寫圖片描述

索引頭的結構如表:
這裏寫圖片描述

索引項結構如表:
這裏寫圖片描述

分析A0H屬性

A0屬性是索引分配屬性,也是一個索引的基本結構,存儲着組成索引的B+樹目錄索引子節點的定位信息。它總是常駐屬性。如下:是一個A0H屬性的實例。
這裏寫圖片描述

根據上圖A0H屬性的“Run List”可以找到索引區域,偏移到索引區域所在的簇,如下圖:
起始簇:18265

簇大小:3

起始扇區號 = 該分區的其實扇區 + 簇號 * 每個簇的扇區數 也就是

64 + 18265 * 8 = 146124
這裏寫圖片描述

對了,上面的偏移0×28還要加上0×18 = 0×40.

標準索引頭的解釋如下:
這裏寫圖片描述

索引項的解釋如下:
這裏寫圖片描述

到此一些常用屬性基本介紹的差不多了。

下面來說下遍歷一個分區下面文件列表的思路:

1、定位DBR,通過DBR可以得知“$MFT”的起始簇號及簇的大小。

2、定位“MFT MFT”後,在其中尋找根目錄的文件記錄,一般在5號文件記錄。

3、在90H屬性中得到B+樹索引的根節點文件信息,重點在A0屬性上。通過屬性中的“Run List”定位到其數據流。

4、從“Run List”定位到起始簇後,再分析索引項可以得到文件名等信息。

5、從索引項中可以獲取“MFT MFT”找到對應的文件記錄。

6、然後再根據80H屬性中的數據流就可以找到文件真正的數據了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章