如何在ntfs中从根目录的90属性定位到相关的数据偏移?
我最近研究ntfs相关结构,可是从mft的第5个记录,也就是根目录文件结构,想找到根目录的存放位置,怎么也不会弄,看了网上的相关教程也没有找到,怎么不能上传本机图片,我想知道这个90和a0属性是如何解释的,也就是如何定位到了indx的地方,哪位大大愿意帮帮我? 我也很想知道这个问题如果你明白了
顺便和我说说咯
你想问的是不是这样?
先找到786432,再+10,然后在A0属性找,不在90属性里,偏移33处查到run运行偏移,其实不用查,A0属性里显示红色的就是跟目录的run,然后你计算数就行了 不对,是32偏移再补充一点
是786432*8+10 一直没有人回复,我研究了一段时间,终于做出来了,现在和大家分享一下.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这个属性。仔细看看就明白了。我看了一星期才明白过来。 这个要收藏!
谢谢楼主的无私讲解!!!!!!!!!!!!!!! 谢谢分享。。。。 还是有点看不明白,惨啊,都不知道我的NTFS要学到什么时候. 我也是一样看不懂呀,现在学到80属性下一个就是90属性,都不知道怎么去学啊.
页:
[1]
2