阅读:2006回复:9
关于文件复制的拦截问题
在内核态下,文件的复制是一些类IRP请求的组合,
如果我要拦截文件复制操作,让某一个文件不能被复制到其他目录下, 不知道该怎么拦截才可以呢 谢谢各位大虾指点! |
|
沙发#
发布于:2008-10-27 15:14
只要能完整的读这个文件,就没办法阻止复制吧
|
|
板凳#
发布于:2008-10-29 01:59
老话题了,应用层Hook吧,但是只要能读就能复制,没意义
|
|
|
地板#
发布于:2008-11-03 19:59
终于用过滤的方法完成复制的拦截了,
看来自己的问题还是要自己解决啊! 自力更生啊! 谢谢各位 大哥了! |
|
地下室#
发布于:2008-11-04 10:44
你不会是禁止读吧
|
|
5楼#
发布于:2008-11-05 01:15
你怎么知道文件是在复制而不是在读?
|
|
|
6楼#
发布于:2008-11-05 13:44
某些程序操作文件就肯定是复制,某些操作肯定就是打开读
如果区分好这些程序 用黑白名单 那么就可以实现拦截复制。 甚至简单的复制 粘贴文件,因为要创建的文件的名字是 原先监控的名字或者“复件***.***"所以这样的复制也可以 但是如果我复制一个excel粘贴到word里面呢?驱动里面就不是很好实现了吧 (因为自己没有做这些所以全凭猜测说的,如果有好的办法欢迎告诉我) |
|
7楼#
发布于:2008-11-06 10:32
mz_suya 说的甚是有道理,看来,还要再研究研究了啊!
谢谢了啊! |
|
8楼#
发布于:2008-11-06 10:34
引用第4楼x-star于2008-11-04 10:44发表的 : 我也不是很确定是否完全正确,只是根据测试结果来看,可以达到目的: 主要思路如下: 我复制文件时,观察filemon里面,在IRP_MJ_QUERY_INFORMATION请求中 irpSp->Parameters.QueryFile.FileInformationClass的值是FileEaInformation 注意这个IRP_MJ_QUERY_INFORMATION,是针对要复制的文件发出来,这个时候把被复制的文件名记录下来,而在该请求完后,便立刻对对目标文件进行写操作,也就是会对目标文件发一个IRP_MJ_WRITE,在这个请求中获得复制到的目标文件中的全路径文件名,判断该文件名中是否包含刚才复制的那个文件名,如果含有,我这里就判断是刚才那个复制的文件拷贝过来的,我这时候,让 Irp->IoStatus.Status=STATUS_ACCESS_DENIED; 返回失败,就可以让整个复制过程失败, 如果有问题,欢迎大家指出,谢谢! |
|
9楼#
发布于:2008-11-06 13:42
哈哈,只要能读就能复制,没意义的
你可以这么干,用UltraEdit打开那个要复制的文件,然后另存为另一个文件,实际上和复制没有任何区别 这只是最简单的一个方法 |
|
|