NTFS文件格式--3

以下是几个重要的MFT属性介绍

(1)MFT文件记录属性头结构
                           表6 文件属性头说明
偏移   长度             描述   
0X00  4                    固定值“FILE”   
0X04  2                   更新序列号偏移,与操作系统有关   
0X06  2                   固定列表大小   
0X08  8                   日志文件序列号   
0X10  2                   序列号(用于记录文件被反复使用的次数)   
0X12  2                   硬连接数,跟目录中的项目关联,非常重要的参数   
0X14  2                   第一个属性的偏移   
0X16  2                   标志字节①   
0X18  4                   文件记录实时大小(字节)②   
0X1C  4                  文件记录分配大小(字节)   
0C20   8                   基础记录 (0: itself)   
0X28   2                 下一个自由ID号   
0X2A  2                  边界   
0X2C  4                    WINDOWS XP中使用,本MFT记录号   
0X30   4                    MFT的使用标记③ 

(2)文件名属性

                                  表7 文件名属性说明 
 
偏移         大小 值       属性类型                 描述                   
0X00        4                  0X 30    
0X04        4                 0X68                         总长度   
0X08        1                 0X00                         非常驻标志(0X00:常驻属性;0X01:非常驻属性)   
0X09        1                  0X00                         属性名的名称长度   
0X0A       2               0X18                             属性名的名称偏移   
0X0C       2               0X00                             标志   
0X0E       2                 0X03                           标识   
0X10       4                 0X4A                         属性长度(L)   
0X14        2                0X18                          属性内容起始偏移   
0X16        1                0X01                           索引标志   
0X17         1               0X00                            填充   
0X18         8                0500000000000500       父目录记录号(前6个字节)+序列号(与目录相关)   
0X20         8                 e0e3e1a066e9c301       文件创建时间   
0X28         8                 同上                            文件修改时间   
0X30        8                   同上 最后一次          MFT更新的时间   
0X38        8                同上                              最后一次访问时间   
0X40        8                 0040000000000000      文件分配大小   
0X48       8                  0040000000000000        文件实际大小   
0X50       4                  06000000                       标志,如目录、压缩、隐藏等   
0X54       4                   00000000                      用于EAS和重解析点   
0X58       1                     04                                  以字符计的文件名长度⑤,每字节占用字节数由下一字节命名空间确定,一个字节

                                                                          长度,所以文件名最大为255字节长(L)   
0X59         1                    03                             文件名命名空间,见表8   

0X60         2L                 24004d004600           以Unicode方式标识的文件名

 

 

                                                      表8 常见命名空间


标志                                     意义                                                                                     描述   
0                                         POSIX                          这是最大的命名空间。它大小写敏感,并允许使用除NULL(0)和左斜框(/)以外

                                                                               的所有Unicode字符作为文件名,文件名最大长度为255个字符。有一些字符,

                                                                               如冒号(:),在NTFS下有效,但WINDOWS不让使用。   
1                                         WIN32                       WIN32和POSIX命名空间的一个子集,不区分大小写,可以使用除“*/:<>?/|”

                                                                              以外的所有Unicode字符。另外,文件不能以句点和空格结束。   
2                                          DOS                           DOS是WIN32命名空间的一个子集,要求比空格的ASC||码要大,且不能使用* + / ,

                                                                               : ; < > ? / | 等字符,另外其格式是1-8个字符的文件名,然后是句点分隔,然后是1-3

                                                                             个字符的扩展名。   
3                                          Win32 & DOS           该命名空间要求文件名对Win32和DOS命名空间都有效,这样,文件名就可以在文

                                                                               件记录中只保存一个文件名  
 

 

(3)数据流属性 

                                             表9 数据流属性说明
偏移         大小   值                   意义   
0X00          4        0X80            属性类型(0X80,数据流属性)   
0X04          4        0X48            属性长度(包括本头部的总大小)   
0X08          1          0X01          非常驻标志(0X00:常驻属性;0X01:非常驻属性)   
0X09          1         0X00             名称长度,$AttrDef中定义,所以名称长度为0   
0X0A         2          0X0040           名称偏移   
0X0C          2          0X00标志,    0X0001为压缩标志,0X4000为加密标志,0X8000为系数文件标志   
0X0E          2           0X0001                标识   
0X10          8          0X00                  其实VCN   
0X18           8            0X1FF1            结束VCN   
0X20           2           0X40                 数据运行的偏移   
0X22           2            0X00                压缩引擎   
0X24           4             0X00              填充   
0X28           8             0X1FF2000   为属性值分配大小(按分配的簇的字节数计算)   
0X30           8              0X1FF1C00 属性值实际大小   
0X38          8               0X1FF1C00 属性压缩大小   
0X40      …               2148062431…                 数据运行④ 

(4) 位图属性
位图属性在NTFS的属性中是一个很灵活的属性。当它位于不同的文件下有不同的含义。比如:例子中的MFT是文件$MFT自身的记录。这里的位图属性有特殊的含义。它在此处为非常驻属性,标志MFT文件的使用情况(类似$BITMAP的作用)。例子中31 01 40 4b 0f为数据运行,起始簇为0x0f4b40,占用一个簇。该簇中以每一位代表一个MFT记录的使用情况(占用为1,未使用为0)。实际操作中,可以根据文件的ID号查找与该文件的MFT对应的位。具体方法为,首先在$MFT的记录中读取0xB0属性运行,根据运行找到$MFT:bitmap位置。对于文件file,根据MFT记录的顺序记录文件file位于第几个,假设记录号为ID,ID/8=A, ID%8=B。表明该文件的MFT记录的位图位从$MFT:bitmap的首字节偏移A个字节,之后的第B个位。
2.3关于文件属性的说明
现在说明几点在数据恢复中很重要的几个属性标志(已用颜色标出)
① 第一处标志代表的是文件的状态:
1表示普通文件;
0表示文件被删除;
3表示普通目录;
2表示目录被删除。
当然,对于系统的文件可能有除此以外的标志符。

② 第二处为文件记录的实际大小。虽然每一个MFT记录都分配1K的空间,但实际使用的字节数并相同。因此,这里记录的是实际使用的字节数。

③ 第三处为MFT的使用标记,它在MFT记录的两个扇区中与每扇区的最末4个字节相对应,如若不然,系统将示此记录为非法记录。

④ 第四处为数据运行,是在数据流属性为非常驻的状况下索引到数据流的关键。其具体计算方式如下:
这是例子中的80H属性,其中蓝色部分为该80H属性(数据属性)的运行:
80  00  00  00  68  00  00  00   01  04  40  00  00  00  08  00
00  00  00  00  00  00  00  00   4b  00  00  00  00  00  00  00
48  00  00  00  00  00  00  00   00  c0  04  00  00  00  00  00
88  bc  04  00  00  00  00  00   88  bc  04  00  00  00  00  00
24  00  53  00  44  00  53  00   21  48  06  24  31  01  f3  aa
02  31  01  0d  7a  fd  31  01    f3  38  02  31  01  c3  4b  05
00  a2  6b  81  d0  50  3d  e1

该运行分为
子运行1:21  48  06  24
子运行2:31  01  f3  aa  02
子运行3:31  01  0d  7a  fd
子运行4:31  01  f3  38  02
子运行5:31  01  c3  4b  05

以子运行1:“21  48  06  24”为例,“2”表示后面4个字节中后面2个字节是子运行的起始簇号,即子运行的起始簇号为“24 06”,“1”表示前面的1个字节表示子运行的大小,即该子运行的大小为“48”。所以该文件数据实际是从起始扇区号为0x2406的地方,占用0x48个簇。接下来是子运行2,运行2的簇号的起始位置为0x2406 + 0x02aaf3 = 0x2cef9。占用0x01个簇。接下来是子运行3,按照前面的理论,子运行3的起始簇号应该是0x2cef9+0xfd0a0d。但是0xfd0a0d的第一个字节为1(fd的首字节),证明此数为负数,所以不能简单的做加法,而应该取该数的补数来计算。既,0xfd7a0d取反加1,得到0x2F5F2,所以运行3的起始扇区号为0x2cef9 - 0x285f3 = 0x4096。占用0x01个簇。依此类推直到子运行之后为“00”时结束。
在程序中,一个Run代表整个运行,每一个子运行以链表的方式链接在一起。

⑤ 此处由一个字节标识文件名的长度,故NTFS磁盘格式下的文件名长度不能超过256个字节,但是文件名的存储格式是以Unicode的形式存储的,所以,文件名在磁盘中占用的真实字节数是该值的两倍。

除此以外,关于数据属性的还有几个方面需要说明
(1) 关于文件名属性。在MFT中,可能有多个文件名属性。这可能是因为文件的命名空间不同。例如:一个DOS命名空间下是8+3的短文件名格式。而WINDOWS下是Unicode的命名空间。

转载于:https://my.oschina.net/Draymond/blog/1017864

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值