MFT中90属性和A0属性之研究

[复制链接]
  • TA的每日心情
    开心
    2013-1-6 14:17
  • 签到天数: 2 天

    [LV.1]布衣百姓

    3

    主题

    10

    回帖

    80

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    80
    发表于 2012-12-31 15:57:35 | 显示全部楼层 |阅读模式
    看到坛子上有不少朋友在手工定位文件时,遇到90属性和A0属性的问题,特分享一下个人经验,相信看完以下内容,会有收获!
    详细了解0X90属性中的索引头和索引部分。

    偏移 大小 意义   
    0X00 4 属性号   
    0X04 4 属性长度   
    0X08 1 常驻标志   
    0X09 1 名称长度   
    0X0A 2 名称偏移   
    0X0C 2 标志(常驻属性不能压缩)   
    0X0E 2 属性ID   
    0X10 4 属性长度(不含头)   
    0X14 2 属性偏移   
    0X16 1 索引标志   
    0X17 1 填充   
    0X18 8 属性名   
    0X20 4 索引属性类型   
    0X24 4 排序规则   
    0X28 4 索引项分配大小   
    0X2C 1 每索引记录的簇数   
    0X2D 3 填充   
    0X30 4 每索引的偏移   
    0X34 4 索引项的总大小   
    0X38 4 索引项的分配   
    0X3C 1 标志,(0X01大索引)   
    0X3C 3 填充  
    表11 索引根属性中索引头部分结构


    偏移 大小 意义   
    0X00 8 文件的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  
    表12 索引项结构

    索引根属性就是由索引头和这一个个的索引项组成。每个索引项对应一个文件。当文件被删除,索引项也会随之消失。
    那么您还记不记得,索引根属性是在MFT记录里的。当索引项越来越多,1K的空间当然无法存储该属性的。那么这个时候,NTFS系统是如何处理的呢?
    也许,您会想到,它可能和数据流的方法一样。通过数据运行索引到外部的数据区。如果您想到这一层,那么恭喜您,您已经开始熟悉NTFS系统。NTFS的确是这么做的。但是,与数据属性(0X80)有一点小小的区别。它并非简单的在0X90属性中添加一个运行。这是因为目录可能很大,而通过目录查找文件需要一个有效的算法。NTFS中,系统利用B+树的方法查找文件(这是一个较为复杂的问题,后面有详细介绍)。于是,当索引项太大,不能全部存储在MFT记录中时,就会有两个附加的属性出现:索引分配属性(0XA0),用于描述B+树目录的子节点;索引位图属性(0XB0),用于描述索引分配属性使用的虚拟簇号。我需要保存在MFT外部的索引称作“外部索引”。0XA0属性的结构与0X80属性完全一致。因此您可以参见表9。我们把这种有0XA0属性的目录称作大目录。大目录的MFT记录可能如下(在此只提出重要的属性,真实的MFT记录可能还包含别的属性)


    属性头   
    0X10属性头   
    0X10属性   
    0X30属性头   
    0X30属性   
    0X90属性头(索引头)     
    0X90属性 (可能为空,也可能含有子项目。为1级节点)
    注意:90H属性的最后8位是它的子节点VCN,可以根据该簇号和运行定位它的子节点。   
    0XA0属性头   






    0XA0属性   
    0XB0属性头   
    0XB0属性   
    FF FF FF FF 82 79 47 11  
    表12 大目录典型MFT记录


    0XA0属性的运行记录了外部索引分配的空间。目录的外部索引是以一个索引块为单位分配的(与簇的概念类似)。一般来说,一个索引块占4K的空间。索引块以“INDEX”开头,其头部的固定结构如下:


    偏移 大小 意义   
    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 更新序列数组  
    表13 索引区头部结构

    索引块头部之后,连接的是索引目录项,其结构与前面介绍的索引项目是一致的。这里不重复介绍。
    3.2 文件的查找方式
    文件的索引延展到外部是分层次的。其层级结构图如下。
    理论上说,3级目录可以容纳几千个文件。已经足够满足现在的需求。
    简单的介绍一下目录的生成方式。目录一定是从小目录到大目录(因为文件需要一个个的拷贝)。小目录的结构很简单,前面也已经做了详细的分析。此时再不断增加文件,目录会有以下几个步骤的变化。
    1、 一级大目录(仅有一个索引块)
    索引块既是叶节点。它的VCL为0。一个索引块只能存放20-30个文件。索引块中的索引项,以文件名按照字母大小排列。
    2、 二级大目录(有多个索引块)
    当文件继续增加,一个索引块不能满足要求,此时再增加一个索引块,VCL为1,并在0X90属性中增加一个索引项目,为了描述,我把这个项目叫做基点。仍然对所有的项目按字母大小排序,其字母比基点小的排在VCL为0的索引块中,否则排在VCL为1的索引块中。当文件继续增加,会再次开辟一个VCL为2的索引块,工作方式同上。
    3、三级大目录
    二级目录有一个限制,那就是,每增加一个索引块,0X90属性就要增加一个项目。而0X90属性是在MFT中,其大小有限制,因此,不能无限的扩大二级目录。此时,系统很聪明地把一个外部的索引块当做基点。索引块的头部0X24的值置1,表示不是叶节点。
       
    NTFS的目录结构是一个很复杂的部分,总的来说是利用平衡B+树的方式来安排每一个目录项的,但是,也不是标准的。您可以借助winhex进一步分析NTFS的目录结构。

    四 总结
    现在,相信您已经对NTFS磁盘格式有一个大致的了解了,您会发现,FAT格式的是如此之简陋和无效率。想象一下,对文件的查询,NTFS的目录结构(包含排序)将会节约多少时间!
    这里只是简单介绍了NTFS的底层磁盘结构,WINDOWS还为它量身定做了磁盘的自修复等功能,有兴趣的朋友还可以研究。

  • TA的每日心情
    奋斗
    2013-10-23 16:36
  • 签到天数: 130 天

    [LV.7]四品道员

    2

    主题

    514

    回帖

    1004

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    1004
    发表于 2013-1-16 13:47:22 | 显示全部楼层
    什么东西啊?没人鉴定吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2013-3-28 10:15
  • 签到天数: 1 天

    [LV.1]布衣百姓

    0

    主题

    100

    回帖

    81

    积分

    [INTOHARD]班长

    Rank: 2

    积分
    81
    发表于 2013-5-26 13:10:59 | 显示全部楼层
    挣找这方面的是资料! 学习下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    419

    回帖

    221

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    221
    发表于 2013-8-24 22:25:35 | 显示全部楼层
    不错,顶一下。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-2-11 20:18
  • 签到天数: 136 天

    [LV.7]四品道员

    14

    主题

    707

    回帖

    1335

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    1335
    发表于 2013-8-24 23:02:32 | 显示全部楼层
    谢谢分享!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-10-6 19:51
  • 签到天数: 45 天

    [LV.5]六品通判

    0

    主题

    182

    回帖

    296

    积分

    [INTOHARD]排长

    Rank: 3Rank: 3

    积分
    296
    发表于 2017-9-13 19:41:09 | 显示全部楼层
    表示看不懂啊   楼主
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表