|
楼主 |
发表于 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这个属性。仔细看看就明白了。我看了一星期才明白过来。 |
|