80H类型属性即$DATA属性,该属性容纳着文件的内容,文件大小一般指的就是未命名数据流的大小。该属性没有最大最小限制,最小情况是该属性为常驻属性,可以不占用除MFT以外的空间。
常驻80H类型属性结构
常驻80H类型属性结构见表4-64,在标准属性头后面是文件的内容。
表4-64 常驻80H属性描述
字节偏移 | 字段长度(字节) | 含义 |
~ | ~ | 标准属性头(已分析过) |
00H | 文件内容 |
当文件属性能够在文件记录中完全存储下来而不需要存储到其他的Data Run(数据流)中时,这种属性就是常驻属性。
一个常驻80H类型的属性实例如图4-423,在标准属性头后面是该文件的内容。该内容以“00H”结束,这是因为文件属性的长度总是8的整数倍,当属性结束时并没有达到一个能被8整除的数字时就用“00H”来填充。
图4-423 常驻80H属性
非常驻80H属性结构
在NTFS文件系统中常用数据流有:
①[未命名]([Unnamed])
②{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}
③^EDocumentSummaryInformation
④^ESebiesnrMkudrfcoIaamtykdDa
⑤^ESummaryInformation
⑥$MountMgrDatabase
⑦$Bad
⑧$SDS
⑨$J
⑩$Max
(1)未命名数据流
80H属性的第一个未命名数据流也就是文件真正的数据,由Data Run来记录其属性体即文件数据的具体地址。下面以$MFT文件自身的文件记录中的80H属性为例,其结构如图4-424所示。
图4-424 80H属性的未命名数据流
Data Run详细含义的描述见表4-65。
表4-65 Data Run含义的描述
字节偏移 | 字段长度(字节) | 描述 | |
第一个Data Run的含义描述 | 0x00 | 1 | 高4位为Data Run(数据流)的起始簇号在这个压缩字节中所占的字节数(N);低4位表示Data Run所占用的簇数在该压缩字节中占用的字节数(L) |
0x01 | L | Data Run(数据流)所占用的簇数 | |
L+1 | N | Data Run(数据流)的起始簇号 | |
第二个Data Run的含义描述 | L+N+1 | 1 | 高4位为Data Run的起始簇的相对簇数在这个压缩字节中所占的字节数(N1);低4位表示Data Run所占的簇数在该压缩数据中占用的字节数(L1) |
L+N+2 | L1 | Data Run所占用的簇数 | |
L+N+L1+2 | N1 | Data Run的起始簇的相对簇数,将此值加上第一个Data Run位置描述中的起始簇号,就是该Data Run的起始簇号(注意该值为带符号数) | |
第三个及以后的Data Run含义同第二个Data Run | …… | …… | …… |
图4-424所示的例子,该数据属性的Run List值为“32 0C 1B 00 00 0C”,其具体含义如图4-425所示。
图4-425 Run List的结构及含义
从图4-425可以看出,该属性体的起始簇号为0C0000H,占1B0CH簇。
(2)文件的摘要信息
在NTFS卷中有些文件是有文件摘要的,如图4-426所示。这些摘要包括描述和来源两个部分,其中描述包括标题、主题、类别、关键字、备注等信息,而来源包括来源、作者、修订版本号码等信息。
图4-426 文件摘要
而这些数据被存储在一组四条命名数据流中,它们分别是:
{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}
^ EDocumentSummaryInformation
^ ESebiesnrMkudrfcoIaamtykdDa
^ ESummaryInformation
值得注意的是,后3个命名数据流的名字中的符号“^”是CTRL-E(05H),这样做的原因可能是不让普通用户访问该流。而{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}流的内容总是为空,如图4-427所示。
图4-427 {4c8cc155-6c1e-11d1-8e41-00c04fb9386d}数据流
从{4c8cc155-6c1e-11d1-8e41-00c04fb9386d}数据流的属性头中可以看出,虽然其为非常驻属性,但是不论是系统分配给该属性的大小还是属性真实大小和最初的属性大小都是0,也就是说该数据流为空。
再来看看其他3个命名数据流,见表4-66。其中有几个数据的具体含义并不清楚,有兴趣的读者可以做进一步的研究。
表4-66 包含文件摘要的数据流
数据流 | 包含的文件摘要 | 数据类型 |
^EDocumentSummaryInformation | 类别 | ASCII码 |
^ESebiesnrMkudrfcoIaamtykdDa | 来源 | Unicode编码 |
^ESummaryInformation | 标题 | ASCII码 |
主题 | ASCII码 | |
作者 | ASCII码 | |
关键字 | ASCII码 | |
备注 | ASCII码 | |
修订版号码 | ASCII码 |
(3)$MountMgrDatabase Data Stream
该数据流只存在有重解析点的卷上。
(4)$Bad
坏簇数据流,该数据流只有在$BadClus元文件中才有,它是一个记录卷中簇的情况的数据流。任何好的簇、未用的簇及坏簇,都将在对应的位置做标记。NTFS不会像FAT系统那样提示“Abort,Retry,Fail?”,如果系统运行时新的坏簇被发现,系统将这个坏扇标记到坏簇文件($BadClus)中。
(5)$SDS
安全描述流($SDS),只有在$Secure元文件中才有,它包含了卷中所有安全描述列表。
(6)$J、$Max
这两个数据流只有$Extend\$UsnJrnl元文件中才有。