详解NTFS文件系统90H索引根属性和A0H索引分配属性(需要对NTFS文件系统有一定的了解)
在论坛上看到了一帖子:[求助] 请教关于NTFS分区中非常驻属性之中文件如何手工寻找 见http://bbs.intohard.com/thread-61775-1-1.html特对NTFS文件系统$INDEX_ROOT(0 X90)属性和$INDEX_ALLOCATION(0 XA0)属性作以下详解,如有不对请高手加以指正谢谢!与其它文件系统不同, NTFS将文件作为属性/属性值的集合来处理(这里暂不对其它属性及参数分析,如需了解请查阅相关资料,也可以加我的QQ交流)
$INDEX_ROOT(0 X90)索引根属性包括:标准属性头、索引根、索引头、索引项。如下图所示
我们可以看到上图中:
一、索引根头
1 :偏移00H至03H值为30H,这里指的是属性类型,也就是30H类型的属性即文件名索引。
2:偏移08H至0BH处的值为00 10 00 00H这里指的是每个索引记录的大小(字节)上图中为:4096个字节。
3:偏移0CH处的值为01H,表示每簇索引记录的簇数,为一个簇。
二、索引头
1:偏移00H至03H值为10 00 00 00H指的是索引项相对于本索引头起始位置偏移0 X10H字节处。
(余下的就不一一分析了)
三、索引项
位于索引头后面的索引列表由一个个索引项组成,
当一个目录很小时,就可以完全存放在索引根属性中,这时该目录就只需要一个属性来描述。但是有的目录太大不能完全存放在索引根中时,这时就要用到$INDEX_ALLOCATION(0 XA0)索引分配属性来存放它的索引项。
$INDEX_ALLOCATION(0 XA0)属性,即索引分配属性,由标准属性头和数据运行列表组成。
索引分配属性总是为非常驻属性,由一个个的索引记录组成。索引记录存储在MFT以外的簇空间中,每个索引记录开始处都有一个标准属性头(索引记录头、后面为一个索引头),然后才是索引列表。
上图中的索引分配数据运行为31 01 B3 FE 66 00 00 00 H这里说明一下,这个数据运行是有8个字节的,但我们计算时只用到了5个字节,后面的3个字节是没有意义的,因为在MFT中属性的长度总是能被8整除的,有时如果不能被8整除,系统会补上一些没有意义的数据,可能是0,也可能是别的,但当某一个运行位置描述的首字节的值为00H时,就表示这个运行结束了。所以这里只有一个运行。即起始簇号为66 FE B3H=6749875,占用1个簇。我们转到6749875簇:
目录索引项用于索引至文件或目录名,结构与第一个图中的索引根下的索引项大致相同,但有些位置的内容还是有所不同。大家可以自行分析图中已经标出的目录索引项的结构,也可以加我的QQ:757926899互相交流。谢谢! 经典好贴,论坛就应该多些像楼主这样无私的人。强烈支持楼主 再次看到楼主的强贴,顶一个,支持 支持一下楊兄.辛苦了! 希望楊兄多出點教程... 楼主 辛苦了谢谢 分享 顶 好帖!两个论坛都顶一下。 逆水寒 的好贴一定要顶~ 看不太懂,还在学习中(38:(38:(38:支持楼主。 系休息休息休息休息休息休息