2017-03-26 20:49:48 分類專欄: 軟件安全課程實驗 文章標(biāo)簽: 文件系統(tǒng) NTFS 磁盤 定位 簇號 版權(quán) 軟件安全課程實驗 專欄收錄該內(nèi)容 軟件安全的實驗,記錄一下,首先需要對NTFS文件系統(tǒng)有了解,有時間的推薦先看這篇博客 一、NTFS需要的基礎(chǔ) 1、MFT:磁盤上的所有數(shù)據(jù)都是以文件的形式存儲,其中包括元文件。 每個文件都有一個或多個文件記錄,每個文件記錄占用兩個扇區(qū) $MFT元文件就是專門記錄每個文件的文件記錄。 其中第五個目錄是根目錄的文件記錄。 第一個目錄是MFT本身的文件記錄。 2、簇號: NTFS文件系統(tǒng)使用邏輯簇號(LCN)和虛擬簇號(VCN)對分區(qū)進行管理。 邏輯簇號:既對分區(qū)內(nèi)的第一個簇到最后一個簇進行編號,NTFS使用邏輯簇號對簇進行定位。 虛擬簇號:既將文件所占用的簇從開頭到尾進行編號的,虛擬簇號不要求在物理上是連續(xù)的。 3、索引項:每個文件在目錄中有其索引項。結(jié)構(gòu)如圖:其中文件的MFT索引號(3個字節(jié))是我們需要的,是虛擬索引號,是相對的。 4、屬性(具體可以看博客): 文件記錄由兩部分構(gòu)成,一部分是文件記錄頭,另一部分是屬性列表 10H類型屬性它包含文件的一些基本信息 20H類型屬性既屬性列表,當(dāng)一個文件需要好幾個文件記錄時,才會用到20H屬性。 30H類型屬,該屬性用于存儲文件名 ,它總是常駐屬性。 80H屬性 80H屬性是文件數(shù)據(jù)屬性,該屬性容納著文件的內(nèi)容 5、runlist(在80或者A0屬性里面可以找到): 當(dāng)屬性不能存放完數(shù)據(jù),系統(tǒng)就會在NTFS數(shù)據(jù)區(qū)域開辟一個空間存放,這個區(qū)域是以簇為單位的。 Run List就是記錄這個數(shù)據(jù)區(qū)域的起始簇號和大小 舉個栗子 31 0C 2C 22 45 其中3表示有3個字節(jié)表示這個數(shù)據(jù)流的開始簇號即 2C 22 45 1表示有1個字節(jié)描述這個數(shù)據(jù)流的大小即0C 當(dāng)有多個Run List 的時候,都需要計算,并且相加,得到多個數(shù)據(jù)流。 二、具體實現(xiàn)(為了計算方便(懶),舉例本機E盤上的一個140M左右的文件) (1)選取的是文件12345aa.pdf,大小約140M: (2)首先借助winhex工具打開可以直接得到其簇號,并且知道它直接位于E盤根目錄之下(作為我們定位的驗證)如下圖: (3)大概的流程: (MFT的結(jié)構(gòu)一般第五個目錄就是根目錄,并且其一個目錄一般都是2個扇區(qū)即一個字節(jié),MFT邏輯簇號不是連續(xù)的,根目錄也是,需要runlist來計算出,它到底有幾個數(shù)據(jù)流,數(shù)據(jù)流的起始位置和大小分別是多少?。?/p> 算出MFT中第五個目錄即根目錄的扇區(qū)位置,轉(zhuǎn)到該扇區(qū)得到根目錄的runlist 計算出根目錄所在的扇區(qū),打開根目錄,即可以找到我們的文件pdf 根據(jù)它在根目錄中的數(shù)據(jù)找到它在MTF中的索引號,得到MTF中的記錄 在MTF中找到它真正的數(shù)據(jù)流,即可以看到真正的文件內(nèi)容。(因為大于100M,肯定是非常駐) (4)用winhex打開我們的磁盤E盤(每個偏移的具體含義參見更加詳細的博客) 分析boot文件可以在0DH中得到一個簇有8個扇區(qū)的大小。 030-037H是MFT的開始簇號0x00 00 00 00 00 0C 00 00 040-043H是每個MFT記錄的大小為0x00 00 00 F6個簇 1C-1FH是隱藏扇區(qū)(MBR到DBR) 0x 00 00 10 00簇 (5)計算MFT本身的數(shù)據(jù)流情況 跳轉(zhuǎn)到MFT的第一個扇區(qū)即6291456扇區(qū),在80h屬性處得到rundate 33 80 D1 00 00 00 0C 起始簇號786432 大小為53632簇 包括214528個目錄項 33 0B C8 00 F5 7E 6F 起始簇號786432+(6F 7E F5)即7306997=8093429 大小為51211簇 包括204844個目錄項 33 35 92 00 15 62 38 起始簇號 8093429+(38 62 15)即3695125=11788554 大小為 37429簇 包括149716個目錄項 (一個簇8個扇區(qū),2個扇區(qū)一個目錄項,即一個簇4個目錄項) (6)可以計算得到MFT第五個記錄(根目錄)所在扇區(qū)為6291456+1*5*2=6291466 跳到這個扇區(qū) 找到其中的索引屬性A0x,得到兩個run data 41 05 62 C1 81 01 和 41 01 計算的第一個起始簇號為25280866,第二個起始簇號為1 (7)轉(zhuǎn)到扇區(qū)25280866*8扇區(qū)得到根目錄的扇區(qū):利用winhex驗證正確 (8)在根目錄下找到我們的文件12345aa.pdf 如下(查找文件名) (9)根據(jù)下圖,計算出文件的MFT索引號為085EC4,為548548項。 (10)下面有兩種方式找到MFT中的目錄項: (1)使用虛擬簇號,打開MFT,計算偏移為217B1000,跳轉(zhuǎn)得到12345aa.pdf的目錄 (2)使用邏輯簇號,根據(jù)上面分析的,可知MFT分為了3塊, 因為548548>214528+204844 個目錄項 ,所以我們的文件在第三塊MFT表中 其簇號=(548548-214528-204844)/4+11788554(第三塊MFT起始簇號)=11820848號 跳轉(zhuǎn)到其簇號得到文件的目錄項 (11)讀其80H屬性得到其run date為43 20 87 00 3C 7A C0 00 數(shù)據(jù)流起始位置為12614204簇,與我們直接用工具在右側(cè)看到的簇號相同,轉(zhuǎn)到該簇得到文件內(nèi)容 (12)定位成功,有子文件夾的參考上門步驟重復(fù)計算到最后一個子文件夾就可以。 ———————————————— 版權(quán)聲明:本文為CSDN博主「??.0427」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/lily960427/article/details/66479071 |
|