阅读:1240回复:1
tooflat老大在么,想请教个问题,看过tooflat sfilter的兄弟们也进来看一下好么
最近初步地入门sfilter, 开始肯定是越简单越好喽 所以想做一个对指定目录下的文件透明加解密, 也不用什么加密标识了, 只要是IRP_MJ_READ, 就解密, 只要是IRP_MJ_WRITE, 就加密, 这样最简单
下载了tooflat的sfilter后,按老大的方式试着自己从sfilter上响应了IRP_MJ_READ, IRP_MJ_WRITE, 之前挺顺的, 不过现在有个小问题在这里卡住了, 连续搞了几个通宵也没搞定,想请教一下: if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO))) 这句话,按我的理解,如果这三个标志位有效,表示需要对数据做处理,所以我们在后面用我们自己的IRP的数据来完成加密并送给下层驱动,可是现在调试的时候, 用记事本打开一个已存在的文件, IRP_MJ_READ的现象是: 第一次时肯定会正常执行解密代码的, 包括单击TXT, 但没有打开它的时候, 系统就会进行缓存预读操作, 再多次打开这个文件时, 就会进到那个IF里面去了, 这个我理解成从缓存里读, 倒还说得过去 问题就出在IRP_MJ_WRITE,当按住CTRL+S保存记事本文件的时候偶尔会到IRP_MJ_WRITE, 但多数情况都被IF给拦掉了, 应该是正常现象, 但是我以为重启系统时系统会把缓存里的东东通过IRP_MJ_WRITE, Flags中含有IRP_NOCACHE的方式通过IRP_MJ_WRITE写入磁盘, 可是现在的现象就是走不到我的加密部分,还是被IF给拦掉了, 结果就是磁盘上的是明文了 不知道老大的代码里面有没有其他的地方做了处理, 我仔细地在SfRead, SfWrite的代码里面对照了NN次, 可以肯定是按他的方式做的, 但就是搞不定, 所以想问下, 是不是除了SfRead, SfWrite以外, 还有别的地方做了什么手脚 SfRead, SfWrite的代码跟tooflat一模一样了, 也不就往上贴占空间了 各位大虾帮忙分析一下喽, 为啥系统关机的时候, 也不会通过IRP_MJ_WRITE以NOCACHE的方式发送IRP呀 先谢................. |
|
沙发#
发布于:2007-08-27 11:38
自己顶一下
哎 还是怪自己懒 看明白tooflat的加解密方式了 可是如果按我的思路做 要怎样做呢 类似Hook ZwReadFile和ZwWriteFile 然后Read Decrypt, Write Encrypt 估计要对缓存flush和clear了吧 |
|