《NTFS文件系統(tǒng)解析.ppt》由會員分享,可在線閱讀,更多相關(guān)《NTFS文件系統(tǒng)解析.ppt(53頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、NTFS文件系統(tǒng)解析,1、基本概念 元文件:NTFS包括幾個系統(tǒng)文件,從NTFS卷來看,它們都是隱藏的。文件系統(tǒng)用系統(tǒng)文件來存放元數(shù)據(jù)并實現(xiàn)文件系統(tǒng)。系統(tǒng)文件是用Format程序放在卷上的。 MFT 屬性:NTFS中所有與數(shù)據(jù)相關(guān)信息都稱之為“屬性”,甚至文件內(nèi)容也被稱為“數(shù)據(jù)屬性”。 NTFS與其他文件系統(tǒng)最大不同在于,大多數(shù)文件系統(tǒng)是對文件內(nèi)容進行讀寫,而NTFS則是對包含文件內(nèi)容的屬性進行讀寫,,,$MFT 主文件表(在DBR里3037表示。數(shù)值不是扇區(qū)號,而是簇號。在看簇大小0D偏移,就是說:簇號X8=扇區(qū)數(shù)) $MFTMirr MFT的鏡像 $LOGFILE 日志文件,這個是刪不掉
2、的。(元文件不能被刪除,因為系統(tǒng)下不可訪問) $volume 見文件,記錄號,創(chuàng)建時間 $attrdef 屬性定義列表 $bitmap 位圖文件 $root 根目錄文件 $badclus 壞簇的列表,在格式化的時候,NTFS發(fā)現(xiàn)壞的簇會做標記。防止系統(tǒng)訪問他,或者讀取它。 $boot 引導(dǎo)文件 $quota 磁盤配額信息 $secure 安全文件 $upcase 大小寫字母的轉(zhuǎn)換 $extend metadata directry 擴展元文件目錄 $ extend$reparse 解析文件 $ extend$usnjrnl 加密日志文件 $ extend$quota 配額管理文件 $ ex
3、tend$objid 對象ID文件,,NTFS的DBR NTFS的引導(dǎo)扇區(qū)也位于文件系統(tǒng)的0號扇區(qū),這是它與FAT文件系統(tǒng)在布局 上的唯一相同之處。 數(shù)據(jù)結(jié)構(gòu)如下圖,當格式化一個NTFS卷時,格式化程序分配開始的16個扇區(qū)給引導(dǎo)扇區(qū)和自舉代碼。,,在NTFS卷上,BPB后面的數(shù)據(jù)字段構(gòu)成擴展BPB。啟動過程中,這些字段中的數(shù)據(jù)可以使NTLDR(NT loader程序)找到主文件表(MFT)。在NTFS卷上,MFT不會放在特定的預(yù)定義扇區(qū)上(和FAT16或FAT32不一樣),因此,如果MFT通常的位置有壞扇區(qū),它可以移動。但是,如果數(shù)據(jù)遭到破壞,MFT無法定位,則Windows NT/200
4、0就認為該卷未格式化。,,,,以上引導(dǎo)扇區(qū)最為關(guān)鍵的字節(jié)數(shù)是0B-0C(每扇區(qū)字節(jié)數(shù)) 0B-0C(每扇區(qū)字節(jié)數(shù)) 0D(每簇扇區(qū)數(shù))28-2F(文件系統(tǒng)扇區(qū)總和) 30-37(MFT起始簇號)38-3F(MFT備份的起始簇號) 40(每MFT項大?。?4(每個索引的簇數(shù)),但數(shù)據(jù)發(fā)生不可預(yù)料的損壞時,可以根據(jù)以上信息重建分區(qū)表,定位數(shù)據(jù)區(qū),恢復(fù)MFT,重建DBR,這些關(guān)鍵字節(jié)碼的用處不言而喻。,,$MFT 主文件表(在DBR里3037表示。數(shù)值不是扇區(qū)號,而是簇號。在看簇大小0D偏移,就是說:簇號X8=扇區(qū)數(shù)) 跳轉(zhuǎn)到上邊的扇區(qū)數(shù),就是文件記錄。開頭一定是File開頭(46 49 4C
5、45) 這就是$MFT的開始位置 。,,30屬性是6行半(就是文件名屬性$MFT)因為$MFT也是以文件形式存儲的,那么$MFT的第一個文件記錄就是他的本身。實際上$MFT是個數(shù)據(jù)庫。,,向后邊翻上兩個扇區(qū),就到了$MFTMirr MFT的鏡像 $MFT我們在DBR里也能看到他在什么地方。3037H的數(shù)值上體現(xiàn)) $MFTMirr我們在DBR里的383F 的數(shù)值上能體現(xiàn)出來。 鏡像應(yīng)該跟$MFT是一樣的,但是他跟FAT32不一樣,所以備份也不一定是完全一樣的。鏡像只是前4個元文件的文件記錄的備份。 1、 $MFT 2、 $MFTMirr 3、日志文件 4、卷標 四個元文件之后,就沒有備份了。所
6、以向下搜索是搜索不到的,只有4個,瀏覽文件,點擊WINHEX瀏覽文件 $mft和$mftmirr在系統(tǒng)下是看不到的,只能在這里看到。 $mft本身是一個文件大小會有變化,這里有32K $mftmirr只有4K,占用8個扇區(qū)。,MFT屬性,屬性的結(jié)構(gòu): 每個MFT項大小為1024字節(jié),分為兩部分,MFT頭和屬性列表。 屬性有許多類型,每種屬性都有自己的內(nèi)部結(jié)構(gòu):屬性頭和屬性內(nèi)容。由于屬性有常駐屬性和非常駐屬性之分,所以屬性頭也有差別,但不管是常駐還是非常駐,它們屬性頭的前16個字節(jié)是相同的結(jié)構(gòu)。(如下圖),,,,在這個MFT項中,0 x000 x37是MFT的頭部。后面為屬性列表。共有4個屬性,
7、前三個是常駐屬性,最后一個為非常駐屬性。深色部分則是每個屬性的屬性頭。 圖中可看出,前三個屬性(常駐)屬性頭一樣大小,最后一個要大一些。,NTFS將文件作為屬性/屬性值的集合來處理,這一點與其他文件系統(tǒng)不一樣。文件數(shù)據(jù)就是未命名屬性的值,其他文件屬性包括文件名、文件擁有者、文件時間標記等。下圖顯示了一個用于小文件的MFT記錄,屬性頭,屬性頭主要用于說明該屬性的類型、大小及名字,同時包含壓縮、加密等標志。 常駐屬性的屬性頭,,,,非常駐屬性頭結(jié)構(gòu),,,常駐屬性等很小的屬性與其屬性頭一起存放在MFT中,內(nèi)容跟在屬性頭后面。 非常駐屬性則另外存儲在MFT以外的簇空間中,并在MFT中的屬性描述項中記錄
8、它的簇地址。,,大文件或大目錄的所有屬性,就不可能都常駐在MFT中。如果一個屬性(如文件數(shù)據(jù)屬性)太大而不能存放在只有1KB的MFT文件記錄中,那么NTFS將從MFT之外分配區(qū)域。這些區(qū)域通常稱為一個運行(run)或一個盤區(qū)(extent),它們可用來存儲屬性值,如文件數(shù)據(jù)。如果以后屬性值又增加,那么NTFS將會再分配一個運行,以便用來存儲額外的數(shù)據(jù)。值存儲在運行中而不是在MFT文件記錄中的屬性稱為非常駐屬性(nonresident attribute)。NTFS決定了一個屬性是常駐還是非常駐的;而屬性值的位置對訪問它的進程而言是透明的。,,當一個屬性為非常駐時,如大文件的數(shù)據(jù),它的頭部包含了
9、NTFS需要在磁盤上定位該屬性值的有關(guān)信息。下圖顯示了一個存儲在兩個運行中的非常駐屬性,,非常駐屬性被存儲在簇流中。簇流是一組連續(xù)的扇區(qū)。簇流用它的起始簇號和流長度加以說明。如,一個屬性分為3部分,第一部分存儲在簇號為30,31,32,33,34的簇中,則該簇流起始簇號為30,流長度為5。第二部分存儲在66,67號中,則第二個簇流起始于簇66,長度為2。第三部分存儲在3942號簇中,則第三個簇流起始于39號簇,流長度為4。如圖:,,,,NTFS中對文件或文件的某一部分進行位置描述時用兩種地址:LCN(邏輯簇號)和VCN(虛擬簇號)。通過VCN到LCN的映射來描述非常駐屬性流。 LCN是文件系統(tǒng)
10、的邏輯簇號,VCN則是一個文件內(nèi)容的內(nèi)部編號。因此,屬性流中VCN的04號簇對應(yīng)于LCN的3034號簇,VCN的5,6號簇對應(yīng)于LCN的66,67號簇,VCN的710號簇對應(yīng)于LCN的3942號簇。 因此LCN與VCN的對應(yīng)關(guān)系及簇流列表中真正的記錄如圖:,,,常規(guī)屬性值及其含義,標準信息屬性0 x10,標準屬性($STANDARD_INFOMATION)的類型值為0 x10,它總是常駐屬性。它包含一個文件或目錄的基本元數(shù)據(jù),如時間、所有權(quán)和安全信息等。所有文件和目錄必須有這個屬性。,,,,,標準屬性實例,,,0 x000 x1F字節(jié)處32個字節(jié)分為4個8字節(jié)部分,分別為文件的建立時間、最后修
11、改時間、MFT改變時間和最后訪問時間。 0 x200 x23處4個字節(jié)為標志,這個文件的標志為0 x22,則為“存檔、隱藏”,文件名屬性,文件名屬性($FILE_NAME)的類型值為0 x30。任何文件和目錄在它的MFT項中至少有一個文件名屬性。該屬性用于存儲文件名,還包含文件大小、時間等信息。,,,數(shù)據(jù)屬性,即($DATA,0 x80)。這個屬性存放文件的內(nèi)容。 常駐數(shù)據(jù)屬性,可以看到,常駐數(shù)據(jù)屬性的內(nèi)容直接跟著屬性頭之后,一起存儲在MFT中。,,,,,非常駐數(shù)據(jù)屬性,,一個簇流項合一分為以下三部分: 1、第一個字節(jié)為第一部分,分為高4bit和低4bit,其中低4bit說明第二個部分的字節(jié)數(shù)
12、。高4bit說明第三部分的字節(jié)數(shù) 2、第二部分從第二個字節(jié)開始,長度為第一部分的低4bit描述的字節(jié)數(shù),用以說明簇流的長度,即該簇流包含的簇數(shù)。 3、第三部分跟著第二部分,長度為第一部分高4bit描述的字節(jié)數(shù),用以說明簇流起始簇號。,,可以看到,簇流起始位置為561055(0 x 08 8F 9F)號簇。簇流長度為12(0 x0C)個簇,其他屬性,0 x60 卷名屬性($VOLUME_NAME)用來記錄卷名。最長為127個unicode字符。 0 x90 索引根屬性($INDEX_ROOT)為實現(xiàn)B+樹設(shè)置的根節(jié)點。 0 xA0 索引分配屬性($INDEX_ALLOCATION)用于存放索引項
13、。索引分配屬性總是非常駐屬性,由一個個的索引記錄組成。索引記錄存儲在MFT之外的簇空間中,每個索引記錄有固定的大小,并包含一個分類樹中的節(jié)點,大小通常為4096字節(jié)。,,0 xB0 位圖屬性($BITMAP)用于描述索引或$MFT的分配情況。對于索引,它用1bit描述索引的一個VCN,對于$MFT,用1bit描述一個MFT項的分配情況。 0 xC0 重解析點屬性 0 x100 安全屬性,NTFS文件存儲的定位,1、在G盤根目錄創(chuàng)建文件,,,,,2、打開G盤,,,查看其DBR表,,,,將文件名另存為16進制格式在winhex中打開,,找到G盤的MFT,,查找“測試文件”對應(yīng)的16進制字串,,,,,解析這一部分的結(jié)構(gòu)可知:,1、該文件占用了6個簇 2、該文件起始位置 LCN為0 x 62 4F=25167(?扇區(qū)),,,,,定位并復(fù)制文件數(shù)據(jù),,,,,,,,,,請思考,為什么兩次操作后文件的實際大小不一致?,