分析NTFS檔案系統得到特定檔案的內容

2021-09-09 01:42:36 字數 3469 閱讀 8927

找某乙個檔案的內容(如要讀取檔案d:\dir\dir2\text.txt,詳細過程例如以下:

(1)讀取分割槽表/分割槽鍊錶資訊,找到磁碟f的起始扇區。

(2)讀取d盤的第乙個扇區(分割槽的bootsetor)取得分割槽的每簇大小,mft表起始簇號等資訊。

(3)讀取mft表的第五個記錄(根資料夾)找到資料夾索引所在簇號。

(4)讀取根資料夾索引,查詢dir資料夾所在的mft記錄號

(5)讀取dir資料夾的mft記錄,找到資料夾索引所在簇號。

(6)讀取dir資料夾的索引,查詢dir2資料夾所在mft記錄號

(7)讀取dir2資料夾的mft記錄。找到資料夾索引所在簇號。

(8)讀取dir2資料夾的索引,查詢test.txt 所在mft記錄號

(9)讀取test.txt檔案的mft記錄。找到它的data屬性。

(10)依據data屬性中指定的檔案資料存放位置讀取出test.txt檔案的資料。

以下我們借助工具winhex來找到d:\dir\dir2\text.txt的內容

1.讀取分割槽表/分割槽鍊錶資訊。找到磁碟f的起始扇區。

開啟磁碟0號扇區

紅線部分是d分割槽的資訊。藍色方框內是d分割槽的物理起始扇區 0xea58bc。

2.讀取d盤的第乙個扇區(分割槽的bootsetor)取得分割槽的每簇大小,mft表起始簇號等資訊。

開啟物理扇區號為0xea58bc的扇區,例如以下圖,紅線是每簇的扇區數(0x1,每簇乙個扇區)。

藍線部分是$mft的邏輯簇號(0x00 00 00 00 02 0a f3,是相對於d分割槽開始的簇號)

紫線部分是乙個mft記錄所佔的簇數(0x00 00 00 02)

3.讀取mft表的第五個記錄(根資料夾)找到資料夾索引所在簇號。

開啟$mft表,相對於d分割槽的簇號是0x00 00 00 00 02 0a f3,相對於整個磁碟的簇號是 0xea58bc + 0x00 00 00 00 02 0a f3 = 0xec63af。

由於從d分割槽第乙個扇區得到每簇扇區數是1,所以$mft在d分割槽的偏移是0x020af3扇區。

每乙個mft記錄所佔簇數是2。根資料夾是mft中的第5個記錄(記錄從0開始的),根資料夾的mft記錄項所在的簇數是 0x020af3 + 5 * 2 = 0x20afd。

所在扇區數是 0x20afd *每簇扇區數1 = 0x20afd

4.讀取根資料夾索引,查詢dir資料夾所在的mft記錄號

開啟d分割槽偏移扇區0x20afd,找到屬性0x90。在0415fb80一行,偏移0x08是0x01,說明是很駐屬性,得到data run, 31 08 bb 10 03,即在d分割槽偏移簇數0x0310bb,長度是0x8簇。

檢視d分割槽偏移簇號0x0310bb,會看到根資料夾下的索引項,當中可看到$attrdef,$badclus,$bitmap,$boot等系統檔案的索引項。

找到dir的索引項。例如以下圖,紅框部分是本索引項的名稱dir。

前8位元組是檔案的mft索引記錄號(前6個位元組48位是父資料夾的檔案記錄號。0x0375,後2個位元組為序列號)

5.讀取dir資料夾的mft記錄,找到資料夾索引所在簇號。

以下計算dir 的mft表項在$mft中的簇號:

乙個mft表項佔兩個簇,第0x0375項是相對於$mft的第0x0375*2= 0x6ea簇,也就是相對於d分割槽的第 0x02 0a f3 + 0x6ea = 0x211dd簇(扇區是0x211dd)

6.讀取dir資料夾的索引,查詢dir2資料夾所在mft記錄號

開啟扇區0x211dd,例如以下圖。

0423bb00一行。偏移0位置是0x00。說明是常駐屬性,從紫色框中得到dir2的mft記錄項的記錄號是0x0376

7.讀取dir2資料夾的mft記錄,找到資料夾索引所在簇號。

如今來確定dir2的mft記錄項所在的簇數

$mft開始簇數 + 0x0376*每記錄簇數

0x020af3 + 0x0376 *2 = 0x211df

8.讀取dir2資料夾的索引,查詢test.txt 所在mft記錄號

開啟d分割槽偏移 0x211df 簇

可看到test.txt 的mft記錄號是 0x0377

9.讀取test.txt檔案的mft記錄,找到它的data屬性。

得到test.txt 的mft記錄項在d分割槽的偏移簇號

=$mft表的偏移簇數 + test.txt記錄號*每mft記錄簇數 

=0x020af3 + 0x0377 *2 

= 0x211e1(簇號)

= 0x211e1(扇區號)

開啟0x211e1(扇區號):

從0x30檔名稱屬性能夠看到test.txt的檔名稱。

0x80資料屬性中能夠得到檔案內容

10.依據data屬性中指定的檔案資料存放位置讀取出test.txt檔案的資料。

從0x80資料屬性中能夠知道此屬性是常駐屬性。直接看到test.txt的檔案內容,「this is test for ntfs!」.

另外,假設我繼續向test.txt 寫入資料。data屬性中的資料會新增。下圖中紅線之間的資料是後來新增的。

可是當檔案內容在增多時。0x80資料屬性從常駐屬性改為很駐屬性,檔案內容不會直接儲存在此屬性中。而是其它簇中,依據data run能夠定位到。

ox80資料屬性。0x01說明是很駐屬性。

data run,31 02 4c 0d 01;說明內容從分割槽偏移簇號0x010d4c開始。長度是0x02個簇。

開啟簇號是0x010d4c的扇區,能夠看到test.txt的檔案內容:

(本文如有錯誤。請指正。多謝。)

NTFS檔案系統

卷 volume 和簇 cluster 是ntfs用來描述物理磁碟的單位。卷之間是相對獨立的,卷的概念其實就是分割槽 partition 簇的引入是為了方便處理不同容量的卷,通常在格式化乙個卷時,可以設定該卷的簇的大小的,預設值是根據卷的容量算出來的,容量越大,簇也劃分得越大。簇劃分得很大,優點在於...

Windows檔案系統 NTFS檔案系統

windows作為最流行的個人計算機作業系統,成為了我們學習 工作和生活的一部分。我們幾乎每天都會經歷開啟檔案管理器,進入具體磁碟,開啟具體檔案,而windows採用檔案系統管理著所有的檔案和磁碟空間,這個檔案系統就是ntfs。ntfs檔案系統 文件主要分為兩大部分 1.ntfs檔案系統簡介 2.檔...

FAT32檔案系統轉NTFS檔案系統

ntfs 檔案系統的優點 1 ntfs有更好的安全與訪問速度 注 感覺上如此 2 u盤使用ntfs格式能成功打造多重啟動工具 注 待驗證 3 u盤格式化為ntfs格式,才能夠儲存超過4gb的大檔案 注 地球人都知道 經過一番努力,找到三種行之有效的手術方案 1 傻瓜工具型 借助 惠普u盤格式化ntf...