如何在ntfs中从根目录的90属性定位到相关的数据偏移?

[复制链接]

该用户从未签到

2

主题

5

回帖

28

积分

[INTOHARD]工兵

Rank: 1

积分
28
发表于 2008-7-29 10:53:46 | 显示全部楼层 |阅读模式
我最近研究ntfs相关结构,可是从mft的第5个记录,也就是根目录文件结构,想找到根目录的存放位置,怎么也不会弄,看了网上的相关教程也没有找到,怎么不能上传本机图片,我想知道这个90和a0属性是如何解释的,也就是如何定位到了indx的地方,哪位大大愿意帮帮我?

该用户从未签到

1

主题

17

回帖

41

积分

[INTOHARD]工兵

Rank: 1

积分
41
发表于 2008-9-20 13:32:24 | 显示全部楼层
我也很想知道这个问题
如果你明白了
顺便和我说说咯

该用户从未签到

7

主题

447

回帖

1万

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
11234
发表于 2008-9-24 23:46:27 | 显示全部楼层

你想问的是不是这样?

先找到786432,再+10,然后在A0属性找,不在90属性里,偏移33处查到run运行偏移,其实不用查,A0属性里显示红色的就是跟目录的run,然后你计算数就行了

该用户从未签到

7

主题

447

回帖

1万

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
11234
发表于 2008-9-24 23:47:01 | 显示全部楼层
不对,是32偏移

该用户从未签到

7

主题

447

回帖

1万

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
11234
发表于 2008-9-24 23:51:00 | 显示全部楼层

再补充一点

是786432*8+10

该用户从未签到

2

主题

5

回帖

28

积分

[INTOHARD]工兵

Rank: 1

积分
28
 楼主| 发表于 2008-9-25 11:09:33 | 显示全部楼层
一直没有人回复,我研究了一段时间,终于做出来了,现在和大家分享一下.
90索引根属性的内容和a0索引分配的内容是一致的,如果一个目录下面的文件很少,比如只有3,4个文件,那么他就会只用到90属性,90属性包含下面的结构:
typedef struct
{
        RESIDENT_ATTRIBUTE Resident_Attribute;
        ULONGLONG AttributeName;
        ULONG IndexAttributeType;
        ULONG PaixuGuize;
        ULONG IndexSize;
        UCHAR ClusterNumber;
        UCHAR Pad1[3];         
} INDEX_ROOT_HEADER, *PINDEX_ROOT_HEADER;       

typedef struct
{
        ULONG FirstIndexOffset;
        ULONG AllIndexSize;
        ULONG IndexAllocSize;
        BOOLEAN BigIndex;
        UCHAR Pad2[3];
} INDEX_HEADER, *PINDEX_HEADER;


typedef struct
{
//        ULONGLONG FileMftNumber;       
        ULONG FileMftNumber;
        ULONG Resverd1;
        USHORT IndexSize;
        USHORT NameOffset;
        ULONG IndexFlag;

        ULONGLONG ParentsMftNumber;
        ULONGLONG CreateDate;
        ULONGLONG LastModifyTime;
        ULONGLONG LastModifyTimeOfLog;
        ULONGLONG LastAccessTime;
        ULONGLONG AllocSize;
        ULONGLONG FileSize;
        ULONGLONG FileFlag;

        UCHAR NameLength;
        UCHAR NameSpace;
        WCHAR FileName[MAX_PATH];
} INDEX_ATTRIBUTE, *PINDEX_ATTRIBUTE;

如果目录下的文件很多,就会有a0属性了,a0属性为非常驻属性,要找到indx的位置,先找到a0的运行位置,如果你用winhex来看,数据运行通常都是红色标注的。比如数据运行为32 9c 1d 00 00 0c,它的起始簇号就是0c0000,在winhex中的位置菜单选择转移到簇号就能看到了。
这个位置的开头就是indx字符,结构如下,
typedef struct
{
        ULONG IndxMagic;
        ULONG Reserved1;
        ULONG Reserved2;
        ULONG Reserved3;
        ULONGLONG Reserved4;
       
        ULONG IndexEntryOffset;
        ULONG IndexSize;
        ULONG IndexAllocSize;
        BOOLEAN SubPoint;
        UCHAR Pad1[3];
} INDEX_FILE, *PINDEX_FILE;
结构中的 IndexEntryOffset就指向了INDEX_ATTRIBUTE这个属性。仔细看看就明白了。我看了一星期才明白过来。

该用户从未签到

15

主题

674

回帖

9293

积分

[INTOHARD]团长

浸淫

Rank: 8Rank: 8

积分
9293
发表于 2009-3-30 10:19:04 | 显示全部楼层
这个要收藏!

谢谢楼主的无私讲解!!!!!!!!!!!!!!!

该用户从未签到

0

主题

154

回帖

118

积分

[INTOHARD]班长

Rank: 2

积分
118
QQ
发表于 2009-3-30 18:36:48 | 显示全部楼层
谢谢分享。。。。
  • TA的每日心情
    奋斗
    2019-5-12 23:46
  • 签到天数: 8 天

    [LV.3]八品县丞

    21

    主题

    641

    回帖

    1347

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    1347
    发表于 2009-10-31 16:29:18 | 显示全部楼层
    还是有点看不明白,惨啊,都不知道我的NTFS要学到什么时候.
  • TA的每日心情
    奋斗
    2019-5-12 23:46
  • 签到天数: 8 天

    [LV.3]八品县丞

    21

    主题

    641

    回帖

    1347

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    1347
    发表于 2009-11-2 23:32:55 | 显示全部楼层
    我也是一样看不懂呀,现在学到80属性下一个就是90属性,都不知道怎么去学啊.
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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