marxixing 发表于 2008-7-29 10:53:46

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

我最近研究ntfs相关结构,可是从mft的第5个记录,也就是根目录文件结构,想找到根目录的存放位置,怎么也不会弄,看了网上的相关教程也没有找到,怎么不能上传本机图片,我想知道这个90和a0属性是如何解释的,也就是如何定位到了indx的地方,哪位大大愿意帮帮我?

flying88 发表于 2008-9-20 13:32:24

我也很想知道这个问题
如果你明白了
顺便和我说说咯

yzq404501 发表于 2008-9-24 23:46:27

你想问的是不是这样?

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

yzq404501 发表于 2008-9-24 23:47:01

不对,是32偏移

yzq404501 发表于 2008-9-24 23:51:00

再补充一点

是786432*8+10

marxixing 发表于 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;         
} INDEX_ROOT_HEADER, *PINDEX_ROOT_HEADER;       

typedef struct
{
        ULONG FirstIndexOffset;
        ULONG AllIndexSize;
        ULONG IndexAllocSize;
        BOOLEAN BigIndex;
        UCHAR Pad2;
} 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;
} 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;
} INDEX_FILE, *PINDEX_FILE;
结构中的 IndexEntryOffset就指向了INDEX_ATTRIBUTE这个属性。仔细看看就明白了。我看了一星期才明白过来。

xulemeng 发表于 2009-3-30 10:19:04

这个要收藏!

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

slight 发表于 2009-3-30 18:36:48

谢谢分享。。。。

cadwap 发表于 2009-10-31 16:29:18

还是有点看不明白,惨啊,都不知道我的NTFS要学到什么时候.

cadwap 发表于 2009-11-2 23:32:55

我也是一样看不懂呀,现在学到80属性下一个就是90属性,都不知道怎么去学啊.
页: [1] 2
查看完整版本: 如何在ntfs中从根目录的90属性定位到相关的数据偏移?