阅读:1327回复:10
大家讨论一下,目录隐藏的问题,主要是ntfs上
参阅了先前网友的帖子,隐藏的方法在osr文档上也有,但对于特殊的目录查询请求,很难有效。
在ntfs上,经常会发生查询请求只返回一个entry,即它的nextoffset指向0,这时,这项很难处理,因为你将它清空后,会生产一个空的文件(即不是目录也不是文件,因为你把它的属性清除了) ,而且还有其它附作用,现在的有什么方法可以处理它? 多个entry的搬移大法不能用了。 |
|
最新喜欢:![]()
|
驱动老牛
![]() |
沙发#
发布于:2005-04-05 12:36
参阅了先前网友的帖子,隐藏的方法在osr文档上也有,但对于特殊的目录查询请求,很难有效。 |
|
驱动老牛
![]() |
板凳#
发布于:2005-04-05 12:43
恩?
怎么没东西 试试改文件名如何,改成不识别的。 |
|
地板#
发布于:2005-04-06 10:03
参阅了先前网友的帖子,隐藏的方法在osr文档上也有,但对于特殊的目录查询请求,很难有效。 把该irp再次交给下层文件系统驱动处理。 |
|
地下室#
发布于:2005-04-06 10:11
能说一下吗?
详细一点:) |
|
|
5楼#
发布于:2005-04-06 13:43
能说一下吗? do { IoSetCompletionRoutine(...); IoCallDriver(); KeWaitForSingleObject(); // 在这里隐藏目录, ... // 然后判断 // 如果所有目录被隐藏,包括你说的只返回一个entry,而该entry也被隐藏的情况 // 那么就 continue,继续让文件系统驱动处理,文件系统驱动会帮你把所有事情搞定的 // 否则 break } while (1); IoCompleteRequest(); |
|
6楼#
发布于:2005-04-06 14:56
感觉这个流程有点不对呀
IoCalldriver后才能得到目录内容缓冲区,就是那个QueryBuffer. |
|
|
7楼#
发布于:2005-04-07 08:47
IoCallDriver(); <----------------------|
| KeWaitForSingleObject(); | | // 在这里隐藏目录!!!!!! | | // 这里不是已经调用过IoCallDriver了吗 ---| |
|
8楼#
发布于:2005-04-07 11:59
你说的意思是不是和你以前帖在站上的源码表达的是一致的?
如果是,那就是问题所在,不行:) 关键的地方是: 如果是只有一个或所有的都隐藏,怎么办? 你下发到下层没啥用,只不过是又得到一个querybuffer 如果至少有一项不用隐藏,可以用搬移大法,但如果说只有一项而且是隐藏的,或全部要隐藏,怎么办? 这是问题所有.我试过了所有方法,包括返回状态,清零bufer,都没用.如果返回rootkit上的状态(status_no_more_file 或status_no_such_file) 会影响其它查询,表现为所有的目录都被隐藏了. 你在判断目录是否需要隐藏时,已经调用过了iocalldriver,然后呢? 我分析推测,上层会认为至少有一项需要显示,现在没有好的办法解决这个问题. 如果你的办法确实可行,烦请更细点:) [编辑 - 4/7/05 by znsoft] |
|
|
9楼#
发布于:2005-04-07 12:37
对,下发到下层又会返回一个QueryBuffer,不过这个QueryBuffer和上次返回的结果不一样,所以你可以返回这个QueryBuffer,如果这个QueryBuffer你也要隐藏,那就继续下发。。。最后你总会得到一个不用隐藏的QueryBuffer,或者返回no_more_files(or no_such_file???),此时QueryBuffer内容,文件系统已经帮你处理好了
|
|
10楼#
发布于:2005-04-07 12:47
ok.谢谢,下周去试试!
|
|
|