首页
社区
课程
招聘
[解决]ntfs底层枚举目录和文件,求助啊,真心求助啊。。
发表于: 2012-3-8 17:46 8667

[解决]ntfs底层枚举目录和文件,求助啊,真心求助啊。。

2012-3-8 17:46
8667
使用 CreateFile 打开硬盘,然后读取bpb 获取mft的地址
然后获取 根目录的地址,,,然后就开始分析,但是有bug啊。

我实在不知道哪里错了,求大牛救救我吧!!

求助啊,真的不知道哪里错了。。。。

Project.rar

汗啊,经过无数想了以后,问题基本解决,但是在x64平台下,有写问题啊,还有MFT碎片这个还没有搞清楚,但是谢谢 下面帮我回答问题的几个大牛啊。谢谢大吉了

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 120
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
因为有的文件记录的某个属性记录长度只占2字节(虽说定义的是四字节,但几乎就没有使用后2字节),   我遇到过很多这样的问题。。。不知道还有没有其他问题哈哈。。我是来取结构的。。。

pAttribHead = (PATTRIBUTE_RECORD_HEADER)((DWORD)pAttribHead + (WORD)pAttribHead->RecordLength);
加上这个就不便秘了。。
2012-3-8 19:10
0
雪    币: 160
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
还是不行啊。悲剧中,求助中。求好心人。谢谢 雪yaojun  继续求助中
2012-3-8 19:20
0
雪    币: 120
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
啥错误??我用vs2005只改了那里就完全正常了。
2012-3-8 20:46
0
雪    币: 160
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
还是一样,读取文件不全啊!!在win7中各种报错!
2012-3-8 20:56
0
雪    币: 120
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
MFT能正常遍历完就没有不全这说了。
win7不知道啥情况。
2012-3-8 22:17
0
雪    币: 160
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
饿,但是。目录和文件都没有遍历完全的说,不知道是啥情况哇,不知道代码哪里还有问题,俺急需遍历完全所有的文件和目录
2012-3-8 22:54
0
雪    币: 120
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
检查所有属性记录的大小,一般来说超过 00 02 00 00 就是错误了。。
pAttribHead = (PATTRIBUTE_RECORD_HEADER)((DWORD)pAttribHead + pAttribHead->RecordLength);  就这个。。。
2012-3-9 09:55
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
没有修复USA
2012-3-9 10:24
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
读取MFT记录之后,Update Sequence Array需要修复
$INDEX_ROOT中获取到了MFT记录号之后的读取是错的.
$INDEX_ALLOCATION中对记录的INDX的读取需要用到$BITMAP中的位图来判断该记录是否有效
2012-3-9 10:31
0
雪    币: 120
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
正解。。。
2012-3-9 12:41
0
雪    币: 160
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
$INDEX_ROOT中获取到了MFT记录号之后的读取是错的.
这个。。。我读取的是第五号文件啊。。用winhex获取到的root地址也是正确的啊。不解中啊
2012-3-11 19:15
0
雪    币: 160
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
求修改代码啊。。。不懂中
2012-3-11 19:16
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
里头 要
有各种判断的,是不能通结构体直接读取到文件目录!
2012-3-13 16:03
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
15
> 点这里 <
有图有真相
2012-3-14 20:13
0
雪    币: 13
活跃值: (49)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
帮顶~帮顶~帮顶~
2012-3-15 17:54
0
雪    币: 160
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
//
        //判断格式是否正确
        //
        PFILE_RECORD_HEADER pHead = (PFILE_RECORD_HEADER)lpBuffer;
        if ( pHead->Ntfs.Type != 0x454C4946 )
        {
        //        printf( "invalid file record!\n" );
                return BADE_FILE;
    }

        PUSHORT Sqn = new USHORT[pHead->Ntfs.UsaCount];

        PUSHORT pSqnAddr = (PUSHORT)((DWORD)lpBuffer + pHead->Ntfs.UsaOffset);
        *(USHORT*)((DWORD)lpBuffer + 510) = pSqnAddr[0];
        *(USHORT*)((DWORD)lpBuffer + 1022) = pSqnAddr[1];

我加了更新 USA了 ,但是还是不对啊
2012-3-16 13:50
0
雪    币: 2015
活跃值: (902)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
18
B树结构搞懂没有?mft碎片的情况?usn回填是防止datarun 数据太长被截断,你就会丢失一部分数据或直接程序崩溃。mft碎片会直接影响你定位文件记录,尤其是后面的碎片。B树结构还是很好玩的,可惜我那本书懒得出版了。efs解密算法可以当论文发表了,出书太浪费。
2012-3-17 15:57
0
雪    币: 160
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
b+ tree 这个貌似搞懂了。 mft碎片这个严重不懂和各种不懂啊!继续求天意love和各位师傅的指点啊。。。
2012-3-17 20:12
0
游客
登录 | 注册 方可回帖
返回
//