NTFS文件系统分析

NTFS File System

  • MBR( Master boot record )

    MBR {

          0x00  3     JMP指令( 0xEB5290 )   
          0x03  4     ID NTFS 文件系统    
          0x0B      每扇区字节数    
          0x0D  1     每簇扇区数   
          0x0E  2     保留扇区   
          0x10  3     总为0   
          0x13  2     NTFS未使用,为0   
          0x15  1     介质描述 (F8本地硬盘)   
          0x16  1     总为0   
          0x18  2     每磁道扇区数   
          0x1A  2     磁头数   
          0x1C  4     隐含扇区   
          0x20  4     NTFS未使用,为0   
          0x24  4     NTFS未使用,为0   
          0x28  8     扇区总数   
          0x30  8     $MFT的逻辑簇号MFT表起始簇   
          0x38  8     $MFTMirr的逻辑簇号MFT镜像起始簇   
          0x40  4     每MFT记录簇数   
          0x44  4     每索引簇数   
          0x48  8     卷标   
          0x50  4     校验和   
          0x54  430  引导代码   
          0x1FE 2    签名(总是0x55AA) 

}

 

 

  • MFT ( Master file table )

MFT {

          0x00  4      固定值“FILE”   
          0x04  2      更新序列号偏移,与操作系统有关   
          0x06  2      固定列表大小   
          0x08  8      日志文件序列号   
          0x10  2      序列号(用于记录文件被反复使用的次数)   
          0x12  2      硬连接数,跟目录中的项目关联,非常重要的参数   
          0x14       第一个属性的偏移    
          0x16  2      标志字节

          0x18  4      文件记录实时大小(字节)
          0x1C  4      文件记录分配大小(字节)   
          0x20       MFT记录号 (0: itself)   
          0x28  2      下一个自由ID号   
          0x2A  2      边界   
          0x2C  4      WINDOWS XP中使用,本MFT记录号   
          0x30  4      MFT使用标记,与其两个扇区中每扇区最末4字节相等,否则,系统视其为非法记录。

      [0x14]       各属性结构(起始由0x14偏移处值指定)

}

  • MFT 内各属性及结构

  

Token

Name

Description

0x10

$STANDARD_INFORMATION

标准属性、包括基本属性,如只读、存档、时间,有多少目录指向本文件

0x20

$ATTRIBUTE_LIST

属性列表、当一个文件需要多个MFT文件记录时,用来表示该文件属性列表   

0x30

$FILE_NAME

文件名属性、以Unicode字符表示的。包含MS-DOS或Win32文件名

0x40

$OBJECT_ID

卷版本

0x50

$SECURITY_DESCRIPTOR

安全描述符、这是为了向后兼容而被保留,用于保护文件以防止未授权访问。 

0x60

$VOLUME_NAME

卷名、卷名称或卷标识

0x70

$VOLUME_INFORMATION

卷信息

0x80

$DATA

数据属性 、即文件的内容 

0x90

$INDEX_ROOT

索引根属性

0xA0

$INDEX_ALLOCATION

索引分配属性、来源于索引根属性的索引树节点

0xB0

$BITMAP

位图属性、$MFT文件及索引的位图

0xC0

$SYMBOLIC_LINK

符号链接、只存在于NTFS V1.2中(Windows NT)

0xC0

$REPARSE_POINT

重解析点、与NTFS V3.0+(Windows 2000+)中的符号链接

0xD0

$EA_INFORMATION

EA信息、 扩充属性信息:主要为与OS/2兼容

0xE0

$EA

扩充属性、主要为与OS/2兼容

0x100

$LOGGED_UTILITY_STREAM

对象ID、一个具有64个字节的标识符,其中最低16个字节对卷来说是唯一的

 

 

0x10属性

0x00  4  Attribute Type (0x10)   
0x04   Total Length   
0x08   Non-Resident Flag(0X00:常驻属性;0X01:非常驻属性)   
0x09  1  Name length 
0x0A  2  Offset to the Name   
0x0C  2  Flags   
0x0E  2  Attribute Id   
0x10  4  Length of the Attribute   
0x14  2  Offset to the Attribute  
0x16  1  Indexed flag   
0x17  1  Padding ( 0x00 ) 

 

0x00  8   Time - File Creation

0x08  8  Time - File Altered

0x10  8  Time - MFT Changed

0x18  8  Time - File Read

0x20  4  Dos File Permissions

0x24  4  Maximun Number of Versions

0x28  4  Version Number

0x2C  4  Class Id

0x30  4  Owner Id ( 2K )

0x34  4  Security Id ( 2K )

0x38  8  Quota Charged ( 2K )

0x40  8  Update Sequence Number( USN )

 

0x20属性

0x00  4  Attribute Type (0x20)   
0x04   Total Length   
0x08   Non-Resident Flag(0X00:常驻属性;0X01:非常驻属性)   
0x09  1  Name length 
0x0A  2  Offset to the Name   
0x0C  2  Flags   
0x0E  2  Attribute Id   
0x10  4  Length of the Attribute   
0x14  2  Offset to the Attribute  
0x16  1  Indexed flag   
0x17  1  Padding ( 0x00 ) 

 

0x00  4  Type

0x04  2  Record length

0x06  1  Name length

0x07  1  Offset to Name

0x08  8  Starting VCN

0x10  8  Base File Reference of the attribute

0x18  2  Attribute Id

0x1A  2N  Name in Unicode ( if N>0 )

 

 

0x30属性

0x00  4  Attribute Type (0x30)   
0x04   Total Length   
0x08   Non-Resident Flag(0X00:常驻属性;0X01:非常驻属性)   
0x09  1  Name length 
0x0A  2  Offset to the Name   
0x0C  2  Flags   
0x0E  2  Attribute Id   
0x10  4  Length of the Attribute   
0x14  2  Offset to the Attribute  
0x16  1  Indexed flag   
0x17  1  Padding ( 0x00 ) 

 

0x00  8  File reference to the parent directory  ( 0x00 4 parent directory number, 0x04 2 update, 0x60 2 reserved )

0x08  8  Time - File Creation

0x10  8  Time - File Altered

0x18  8  Time - MFT Changed

0x20  8  Time - File Read

0x28  8  Allocated size of the file

0x30  8  Real size of the file

0x38  4  Flags, e.g.Directory, compressed, hidden

0x3c  4  Used by EAs and Reparse

0x40  1  Filename length in characters

0x41  1  Filename namespace 0x42 2L File name in Unicode( not null terminated )

0x42  n  Unicode File name

 

Flag

Description

 

Flag

Description

0x00000001

Read-Only

0x00000400

Reparse Point

0x00000002

Hidden

0x00000800

Compressed

0x00000004

System

0x00001000

Offline

0x00000020

Archive

0x00002000

Not Content Indexed

0x00000040

Device

0x00004000

Encrypted

0x00000080

Normal

0x10000000

Directory

0x00000100

Temporary

0x20000000

Index View

0x00000200

Sparse File

0x30 .Attri

0x38 Flag

Flag

Description

0x0001

Compressed

0x4000

Encrypted

0x8000

Spase

Stand Header

0x0C Flag

 

 

 

0x40属性

0x00  4  Attribute Type (0x40)   
0x04   Total Length   
0x08   Non-Resident Flag(0X00:常驻属性;0X01:非常驻属性)   
0x09  1  Name length 
0x0A  2  Offset to the Name   
0x0C  2  Flags   
0x0E  2  Attribute Id   
0x10  4  Length of the Attribute   
0x14  2  Offset to the Attribute  
0x16  1  Indexed flag   
0x17  1  Padding ( 0x00 )

 

0x00  16  GUID Object Id,Unique Id assigned to file

0x10  16  GUID Birth Volume Id,Volume where file was created

0x20  16  GUID Birth Object Id,Original Object Id of file

0x30  16  GUID Domain Id, Domain in which object was created

 

 

0x50属性

0x00  4  Attribute Type (0x50)   
0x04   Total Length   
0x08   Non-Resident Flag(0X00:常驻属性;0X01:非常驻属性)   
0x09  1  Name length 
0x0A  2  Offset to the Name   
0x0C  2  Flags   
0x0E  2  Attribute Id   
0x10  4  Length of the Attribute   
0x14  2  Offset to the Attribute  
0x16  1  Indexed flag   
0x17  1  Padding ( 0x00 )

 

0x00  1  Revision

0x01  1  Padding

0x02  2  Control Flags

0x04  4  Offset to User SID

0x08  4  Offset to Group SID

0x0c  4  Offset to SACL

0x10  4  Offset to DACL

 

0x60属性

0x00  4  Attribute Type (0x60)   
0x04   Total Length   
0x08   Non-Resident Flag(0X00:常驻属性;0X01:非常驻属性)   
0x09  1  Name length 
0x0A  2  Offset to the Name   
0x0C  2  Flags   
0x0E  2  Attribute Id   
0x10  4  Length of the Attribute   
0x14  2  Offset to the Attribute  
0x16  1  Indexed flag   
0x17  1  Padding ( 0x00 )

 

0x00  n  Unicode Name ( length  = Total Length - Offset to the Attribute )

 

 

0x70属性

0x00  4  Attribute Type (0x70)   
0x04   Total Length   
0x08   Non-Resident Flag(0X00:常驻属性;0X01:非常驻属性)   
0x09  1  Name length 
0x0A  2  Offset to the Name   
0x0C  2  Flags   
0x0E  2  Attribute Id   
0x10  4  Length of the Attribute   
0x14  2  Offset to the Attribute  
0x16  1  Indexed flag   
0x17  1  Padding ( 0x00 )

 

0x00  8  Always zero?

0x08  1  Major version number

0x09  1  Minor version number

0x0A  2  Flags

0x0C  4  Always zero?

 

Value

Description

 

Value

Description

0x0001

Dirty

0x0010

Delete USN underway

0x0002

Resize LogFile

0x0020

Repair Object 1ds

0x0004

Upgrade on Mount

0x8000

Modified by chkdsk

0x0008

Mounted on NT4

0x70 .Attri

0x0A

 

 

 

0x80属性

0x00  4  Attribute Type (0x80)   
0x04   Total Length   
0x08   Non-Resident Flag(0X00:常驻属性;0X01:非常驻属性)   
0x09  1  Name length 
0x0A  2  Offset to the Name   
0x0C  2  Flags   
0x0E  2  Attribute Id   
0x10  4  Length of the Attribute   
0x14  2  Offset to the Attribute  
0x16  1  Indexed flag   
0x17  1  Padding ( 0x00 )

 

0x20  2  Data run offset 
0x22  2  compress   
0x24  4  paddin  
0x28  8  Attribute allocate size   
0x30  8  Attribute real size  
0x38  8  Attribute compress size  
0x40 … 2148062431… Data Run

Data Run

0x00 1 lower 4 bit determine second section length

      hight 4 bit determine three section length

E.G 2148062431

 21: second section length is 1 byte,  it's value 48, cluster length ( Unit:Cluster )

    three section length are 2 bytes,  it's value 0624 ( 2406 ),  start cluster number

 

 

0x90属性

0x00  4  Attribute Type (0x90)   
0x04   Total Length   
0x08   Non-Resident Flag(0X00:常驻属性;0X01:非常驻属性)   
0x09  1  Name length 
0x0A  2  Offset to the Name   
0x0C  2  Flags   
0x0E  2  Attribute Id   
0x10  4  Length of the Attribute   
0x14  2  Offset to the Attribute  
0x16  1  Indexed flag   
0x17  1  Padding ( 0x00 )

 

0x18   8   属性名   
0x20   4   索引属性类型   
0x24   4   排序规则   
0x28   4   索引项分配大小   
0x2C  1   每索引记录的簇数   
0x2D  3   填充   
0x30  4   每索引的偏移   
0x34  4   索引项的总大小   
0x38  4   索引项的分配   
0x3C  1   标志,(0X01大索引)   
0x3C  3   填充 

0xnn  索引项

 

0xA0属性

0x00  4  Attribute Type (0xA0)   
0x04   Total Length   
0x08   Non-Resident Flag(0X00:常驻属性;0X01:非常驻属性)   
0x09  1  Name length 
0x0A  2  Offset to the Name   
0x0C  2  Flags   
0x0E  2  Attribute Id   
0x10  4  Length of the Attribute   
0x14  2  Offset to the Attribute  
0x16  1  Indexed flag   
0x17  1  Padding ( 0x00 )

0x00  8  数据运行最大索引值(索引从0开始)本域不确定,即 总数据运行条目 = 最大索引值 + 1;

0x08  4  Offset to Data run  ( 即0x18 + 0x08 = 0x20处相对于本属性起始 )

备注:从第二条数据运行开始,第三部分值的表示方法为补码形式,再与上条所得实际簇号进行计算。即

      第一条数据运行所得簇号为实际簇号,第二条数据运行值为补码形式,再加上第一条数据运行所得实际

      簇号,此计算后的值才是第二箱梁数据运行实际指向的簇。且从第二条数据运行开始,实际指向簇号均

      为当前补码值加上上一条数据运行所指的实际簇号。

      例求第四条数据运行实际所指簇号为:

      第一条数据运行簇号+第二条簇补码+第三条簇补码+第四条簇补码 = 第四条数据运行实际所指簇号  

 

0x00  4  INDEX   
0x04  2  更新序列号的偏移   
0x06  2  更新序列号与更新数组(以字节为单位)   
0x08  8  日志文件序列号   
0x10  8  本索引缓存在索引分配中的VCN   
0x18  4  索引项的偏移(以字节为单位,相对0x18偏移到索引项)   
0x1C  4  总的索引项的大小(相对0X18偏移到结尾)   
0x20  4  索引项分配大小   
0x24  1  如果不是叶节点,置1,表示还有子节点   
0x25  3  用0填充   
0x28  2  更新序列(重要:与每扇区最后2个字节的值一致)   
0x2A  2S-1 更新序列数组

0xnn  索引项

 

索引项结构

0x00  8  文件的MFT记录号 0x00 - 0x04 MFT索引号,0x04-0x06、0x06-0x07为MFT相关记录号   
0x08  2  索引项大小   
0x0A  2  名称偏移
0x0C  4  索引标志+填充   
0x10  8  父目录的MFT文件参考号   
0x18  8  文件创建时间   
0x20  8  文件修改时间   
0x28  8  文件最后修改时间   
0x30  8  文件最后访问时间   
0x38  8  文件分配大小   
0x40  8  文件实际大小   
0x48  8  文件标志   
0x50  1  文件名长度(F)   
0x51  1  文件名命名空间   
0x52  2F  文件名(填充到8字节)   
0x52+2F  P    
0x52 +P+2F 8 子节点索引缓存的VCL 

 

NTFS文件系统中一个文件例如:要读取文件C:\WINDOWS\system32\advapi32.dll具体步骤如下:

 1、读取分区表信息,找到磁盘C的起始扇区。如下图

 2、读取F盘的第一个扇区(分区的BOOTSETOR)取得分区的每簇大小,MFT表起始簇号,每簇大小等信息。

NTFS文件系统分析_第1张图片

 

 0-1

 

 0x0B  为第扇区字节数, 0x200 即512字节

 0x0D  为每簇扇区数, 0x08 即 每簇共有8个扇区

 0x28  为本分区总扇区数,0x2E8775D 即 48789341 * 512 = 24980142592 Bytes 25G

 0x30  为$MFT起始簇,0xC0000 即 0xC0000 * 0x8 * 0x200 = 0xC0000000 偏移处

NTFS文件系统分析_第2张图片

图 0-2

 

从图0-2 红线处即可知0x0C0000000偏移处即为$MFT文件起始偏移处。

 

 3、读取MFT表的第五个记录(根目录)找到目录索引所在簇号。

第五个记录所在偏移为: 第0项MFT($MFT)起始簇 + 5 * MFT大小( 2 * 每扇区字节数 )

 0xC0000000 + 0x5 * 0x2 * 0x200 = 0xC0001400, 如下图

NTFS文件系统分析_第3张图片

图 0-3

 

0x0C0001480 为MFT属性类型为0x30属性 0x00000030

0x0C0001484 为0x30属性的总长度 0x00000006

0x0C0001488 为常驻标志, 0x00表示本属性为常驻,即信息均包含在本簇内

0x0C0001490 为父MFT索引,0x00000005,即本MFT索引

0x0C00014D0 为本文件属性,0x10000006, 0x02 | 0x04 | 0x10000000, 系统、隐藏、目录的组合值

0x0C00014D8 为文件名长度 0x01。不包括结束NULL,且实际长度为本字段 * 2。   

0x0C00014D9 为文件名类型 0x03。0x01 | 0x02, MS-DOS 与Win32文件名的组合值

 

0x0C00015A8 为MFT属性类型为0xA0属性 0x000000A0

0x0C00015AC 为本属性总长度0x00000050,即绿线框内

0x0C00015B0 为常驻标志0x01,表示本属性内容不在本簇内,由 数据运行域 指定。

0x0C00015C8 为数据运行域偏移0x00000048,相对于0xA0属性。

0x0C00015F0 为数据运行域起始偏移处。

             第一部分:第1字节为0x31。低4位为 1,表示本条数据运行簇流长度占1字节,即

                       0x0C00015F1处的0x01。

                       高4位为 3,表示本条数据运行起始簇号长度占3个字节,即0x0C00015F2处

                       的0x2E877F。

             第二部分:第二部分长度由前一字节低4位指定,即为1个字节长度,其值为0x01,表示

                       本簇流长度为0x01簇。

             第三部分: 簇流起始簇号,长度由第一部分高4位指定。即为3个字节长度,值为0x2E877F,

                       簇流偏移为:0x2E877F * 0x08 * 0x200 = 0x2E877F000

 备注1:本例仅一条 数据运行,若不止一条,则下一字节即为另一条 数据运行 的第一部分。若 数据运

        行 的第一部分为0x00,即表示 数据运行 记录已结束。

 备注2:从第二条数据运行开始,第三部分值的表示方法为补码形式,再与上条所得实际簇号进行计算。

 

定位至0x2E877F000如下图:

 

NTFS文件系统分析_第4张图片

图 0-4

 

0x2E877F000 为标志值,值总为0x494E4458,即 "INDX"标志。

0x2E877F018 为 索引项 起始偏移,相对于本字段起始偏移。即0x00000040 + 0x2E87F018 = 0x2E87F058

             处为第一项 索引项 起始位置。

0x2E877F01C 为总索引项大小,相对于0x18字段,即0x2E877F000 + 0x18 + 0x00000EC8 = 0x2E877FEE0

             处为最后一项 索引项 结尾位置。

 

0x2E877F058 为第一项 索引项起始位置,该域为该文件 MFT索引号。即0x00000004,即系统保留元文

             件$AttrDef。

0x2E877F060 为本 索引项 总长度。值为 0x0068。

0x2E877F062 为文件名偏移,相对于本 索引项 起始位置,即 0x2E87F058 + 0x0052 = 0x2E87F0AA处。

0x2E877F068 为父目录MFT索引号,值为0x00000005,即文件名为 "." 的Root目录。

0x2E877F0A0 为文件标志。0x0000000000000006, 0x02 | 0x04,即系统、隐藏组合标志。

0x2E877F0A8 文件名长度。0x08,实际长度为 本字段值 * 2,且不包括结束符NULL。即本文件名长度为

             0x10字节(不包括结束符NULL长度)。

0x2E877F0A9 文件名类型。值为0x30。0x01 | 0x02,即MS-DOS、Win32文件名组合标志。

0x2E877F0AA 文件名起始位置,为Unicode编码。即位置为本索引项0x52偏移处。

备注:通过本 索引项 的总长度定位到下一条 索引项,直到0x2E87F01C处计算所得的索引项结尾位置。

 

 4、读取索引,查找WINDOWS目录所在的MFT记录号

   通过 索引项 逐一查找,得到描述WINDOWS索引项所在位置

NTFS文件系统分析_第5张图片

图0-5

0x2E877FE10 为本 索引项 起始位置处。值为0x0000001C,为本文件MFT索引号。( 用于定位 )

0x2E877FE18 为本 索引项 总长度。

0x2E877FE20 为父目录MFT索引号。值为0x00000005。

0x2E877FE60 为文件名长度。实际长度为此值*2,不包括NULL结束符。即文件名长度为0x10字节。

0x2E877FE61 为文件名类型。0x01 | 0x02,Win32、MS-DOS文件名组合值。

0x2E877FE62 文件名起始位置,为Unicode编码。即位置为本索引项0x52偏移处。

 

 5、读取WINDOWS目录的MFT记录(0x0000001C),找到目录索引所在簇号。

WINDOWS目录位置为:offset $MFT + 本目录MFT索引号 * 0x2 * 0x200 即

   0xC0000000 + 0x0000001C * 0x2 * 0x200 = 0xC0007000,如下图0-6所示:

0x0C0007000 为本文件夹MFT所在偏移处。即WINDOWS文件夹MFT起始位置。

0x0C0007014 为第一属性所在偏移位置。

0x0C000701C 为本文件夹MFT索引号。

0x0C0007038 第一属性所在起始位置,即0x10属性。

0x0C000703C 本属性总长度。即本0x10属性总长度。

0x0C0007158 为本MFT第4属性。即0xA0属性。

0x0C000715C 为本属性长度,即本0xA0属性长度。

0x0C0007161 常驻标志,值为0x01,即内容在其它簇定义。

0x0C0007170 数据运行最大索引项。总数据运行条目 = 最大索引项+1。0x000000000000001D + 1 = 0x1E。

0x0C0007178 数据运行 偏移。值为0x00000048,即 0x00000048 + 0x0C0007158 = 0x0C00071A0处为 数

            据运行域。

0x0C00071A0 第一条数据运行 起始位置。

NTFS文件系统分析_第6张图片

图0-6

 

 6、读取索引,查找system32目录所在MFT记录号

  通过对 数据运行域进行分析,得到system32文件MFT索引号为0x0000001D。具体方法如下:

  根据图0-6可知

  第一条数据运行:值为0x21014328,即起始簇号为0x2843,查得该数据流 索引项 均不存在system32。

  第二条数据运行: 值为0x3101D24D01,相对上条簇偏移0x14DD2簇,查得0x2843 + 0x14DD2 = 0x17615

                  该簇数据流 索引项 均不存在system32。

  第三条数据运行:值为0x210136D,相对上条簇偏移0x6D13簇,查得0x17615 + 0x6D13 = 0x1E34D该

                  簇 索引项 包含system32。

  备注:从第二条数据运行开始,第三部分值的表示方法为补码形式,再与上条所得实际簇号进行计算。

     定位偏移计算方法为:0x1E34D * 0x8 * 0x200 = 0x1E34D000。如图0-6,在该数据流内查找system32

  文件夹的方法如同第4步,对每一 索引项 逐个匹配查找。

NTFS文件系统分析_第7张图片

图0-7

0x01E34D550 为包含system32 的索引项,本簇由WINDOWS文件夹所在MFT之中第三项 数据运行 所

             指定。即绿线范围内为本条 索引项。值为0x0000001D,即system32 MFT索引号为0x1D。

0x01E34D558 值为0x0068,即本 索引项 总长度为0x68字节。

0x01E34D560 值为0x0000001C,为父目录MFT索引值,即WINDOWS目录MFT索引值为0x1C。

0x01E34D598 值为0x0000000010000000,即0x10000000,即本 索引项 MFT记录号为目录MFT索引值。

0x01E34D5A0 值为0x08,文件名为Unicode,实际占用字节为0x08*2 = 0x10字节,不包括NULL结束符。

0x01E34D5A1 值为0x03,0x01 | 0x02,即Win32、MS-DOS文件名标志的组合值。

0x01E34D5A2 此偏移为:0x01E34D550 + 0x52(此值固定,有时会与0x1A偏移处值相同,但若访问某索

             引项内的 文件名,不就使用0x1A处偏移,而应加上固定偏移值0x52进行访问。)

  

 7、读取system32目录的MFT记录,找到目录索引所在簇号。

由图0-7分析得system32目录MFT索引号为:0x1D。

system32 MFT所在偏移为:第0项MFT($MFT)起始簇 + 0x1D * MFT大小( 2 * 每扇区字节数 )

 0xC0000000 + 0x1D * 0x2 * 0x200 = 0xC0001400, 如下图

 0x0C0007400 值为0x46494C45,MFT标记。

 0x0C0007414 值为0x3800,即本MFT中,第项 MFT属性 在偏移0x38处。

 0x0C0007438 值为0x00000010,即 MFT0x10号属性起始位置。

 0x0C000743C 值为0x00000060,即MFT0x10号属性长度为0x60字节。

 0x0C00074E8 值为0x0000000010000000,即0x10000000,目录属性标志。

 0x0C00074F2 文件名称。

 0x0C0007560 值为0x000000A0,即MFT0x0A号属性起始位置

 0x0C0007564 值为0x000001F8,即MFT0x0A号属性总长度为0x1F8字节。

 0x0C0007568 值为0x01,即本属性为非常驻。

 0x0C0007580 值为0x48,即 数据运行 起始偏移。相对于0xA0号属性。

 0x0C00075A8 第一条 数据运行。

 通过对 数据运行域进行分析,得到system32文件MFT索引号为0x0000001D。具体方法如下:

 查得第十二条数据运行时,值为0x21016E27,所指向的实际簇号为0xA6A7中索引项包含advapi32.dl如图0-9。(分析方法同第6步,对每一 索引项 逐一匹配)

NTFS文件系统分析_第8张图片

图0-8

NTFS文件系统分析_第9张图片

图0-9

 

 8、读取索引,查找advapi32.dll所在MFT记录号

    advapi32.dllMFT所在偏移为:第0项MFT($MFT)起始簇 + 0xD9 * MFT大小( 2 * 每扇区字节数 )

 0xC0000000 + 0xD9* 0x2 * 0x200 = 0xC0036400, 如下图

 0x0C00364E8 值为0x0000000000000020,即0x20,存档属性标记。即本MFT记录所指向的是文件。

NTFS文件系统分析_第10张图片

图0-10

 9、读取advapi32.dll文件的MFT记录,找到它的DATA属性。

根据图0-10可知:

0x0C0036510 值为0x00000080,即MFT0x80号属性。

0x0C0036514 本0x80号属性总长度为0x48字节。

0x0C0036518 值为0x01,即为非常驻标志。表示该文件内容在其它簇。

0x0C0036530 值为0x0040,即 数据运行 条目起始偏移 0x40 + 0x0C0036510 = 0x0C0036550。

0x0C0036550 第一条数据运行。值为0x329700E5B107。

             簇流长度为0x97簇。即文件所点磁盘空间为 0x97 * 0x8 * 0x200 = 0x97000即618496字节。

             簇流起始簇号为 0x7B1E5。

             数据偏移为:0x7B1E5 * 0x08 * 0x200 = 0x07B1E5000。

 

  1. 根据DATA属性中指定的文件数据存放位置读取出advapi32.dll文件的数据。

    NTFS文件系统分析_第11张图片

图0-11

  跳转至0x07B1E5000 处时,即可发现值0x4D5A,即PE文件的Magic。从此处开始即为advapi32.dll PE文

  件内容。此文,并不对PE文件格式进行分析。

 

记于: 2012年6月24日   Inpilen   sfxlab.org

你可能感兴趣的:(非主线笔记)