NTFS File System
MBR {
0x00 3 JMP指令( 0xEB5290 )
0x03 4 ID NTFS 文件系统
0x0B 2 每扇区字节数
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 {
0x00 4 固定值“FILE”
0x04 2 更新序列号偏移,与操作系统有关
0x06 2 固定列表大小
0x08 8 日志文件序列号
0x10 2 序列号(用于记录文件被反复使用的次数)
0x12 2 硬连接数,跟目录中的项目关联,非常重要的参数
0x14 2 第一个属性的偏移
0x16 2 标志字节
0x18 4 文件记录实时大小(字节)
0x1C 4 文件记录分配大小(字节)
0x20 8 MFT记录号 (0: itself)
0x28 2 下一个自由ID号
0x2A 2 边界
0x2C 4 WINDOWS XP中使用,本MFT记录号
0x30 4 MFT使用标记,与其两个扇区中每扇区最末4字节相等,否则,系统视其为非法记录。
[0x14] 各属性结构(起始由0x14偏移处值指定)
}
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 4 Total Length
0x08 1 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 4 Total Length
0x08 1 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 4 Total Length
0x08 1 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 4 Total Length
0x08 1 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 4 Total Length
0x08 1 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 4 Total Length
0x08 1 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 4 Total Length
0x08 1 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 4 Total Length
0x08 1 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 4 Total Length
0x08 1 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 4 Total Length
0x08 1 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表起始簇号,每簇大小等信息。
图 0-1
0x0B 为第扇区字节数, 0x200 即512字节
0x0D 为每簇扇区数, 0x08 即 每簇共有8个扇区
0x28 为本分区总扇区数,0x2E8775D 即 48789341 * 512 = 24980142592 Bytes 25G
0x30 为$MFT起始簇,0xC0000 即 0xC0000 * 0x8 * 0x200 = 0xC0000000 偏移处
图 0-2
从图0-2 红线处即可知0x0C0000000偏移处即为$MFT文件起始偏移处。
3、读取MFT表的第五个记录(根目录)找到目录索引所在簇号。
第五个记录所在偏移为: 第0项MFT($MFT)起始簇 + 5 * MFT大小( 2 * 每扇区字节数 )
0xC0000000 + 0x5 * 0x2 * 0x200 = 0xC0001400, 如下图
图 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如下图:
图 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索引项所在位置
图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 第一条数据运行 起始位置。
图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步,对每一 索引项 逐个匹配查找。
图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步,对每一 索引项 逐一匹配)
图0-8
图0-9
8、读取索引,查找advapi32.dll所在MFT记录号
advapi32.dllMFT所在偏移为:第0项MFT($MFT)起始簇 + 0xD9 * MFT大小( 2 * 每扇区字节数 )
0xC0000000 + 0xD9* 0x2 * 0x200 = 0xC0036400, 如下图
0x0C00364E8 值为0x0000000000000020,即0x20,存档属性标记。即本MFT记录所指向的是文件。
图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。
图0-11
跳转至0x07B1E5000 处时,即可发现值0x4D5A,即PE文件的Magic。从此处开始即为advapi32.dll PE文
件内容。此文,并不对PE文件格式进行分析。
记于: 2012年6月24日 Inpilen sfxlab.org