MFT文件怀疑出问题了,MFT头文件80属性居然找不到了,哪位大侠帮帮忙看下

[复制链接]

该用户从未签到

4

主题

3

回帖

-27

积分

[INTOHARD]地雷

积分
-27
发表于 2012-9-23 10:19:19 | 显示全部楼层 |阅读模式
MFT文件怀疑出问题了,头文件80属性居然找不到了,哪位大侠帮帮忙看下

MFT_8sectors.rar

534 Bytes, 下载次数: 9, 下载积分: 金子 -2

  • TA的每日心情
    郁闷
    2015-6-29 22:21
  • 签到天数: 22 天

    [LV.4]七品知县

    16

    主题

    1297

    回帖

    5673

    积分

    [INTOHARD]团长

    Rank: 8Rank: 8

    积分
    5673
    QQ
    发表于 2012-9-23 11:19:14 | 显示全部楼层
    路过看看,学习一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2015-6-29 22:21
  • 签到天数: 22 天

    [LV.4]七品知县

    16

    主题

    1297

    回帖

    5673

    积分

    [INTOHARD]团长

    Rank: 8Rank: 8

    积分
    5673
    QQ
    发表于 2012-9-23 11:45:02 | 显示全部楼层
    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 压缩引擎
    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的命名空间。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    3

    回帖

    -27

    积分

    [INTOHARD]地雷

    积分
    -27
     楼主| 发表于 2012-9-24 18:41:14 | 显示全部楼层
    楼上普及的基础知识非常感谢,不过,我还是想针对文件部分进行分析,80H没有了,只有B0H是什么原因。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    9

    回帖

    -2

    积分

    [INTOHARD]地雷

    积分
    -2
    发表于 2012-9-24 21:07:31 | 显示全部楼层
    1. <html>
    2. </html>DDOODD
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-12-23 17:04
  • 签到天数: 602 天

    [LV.9]二品侍郎

    18

    主题

    1022

    回帖

    3689

    积分

    [INTOHARD]团长

    Rank: 8Rank: 8

    积分
    3689
    发表于 2012-9-24 21:18:30 | 显示全部楼层
    能找到$MFTMirr吗,比较一下不就得了
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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