888atao
驱动牛犊
驱动牛犊
  • 注册日期2005-12-10
  • 最后登录2021-07-23
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望30点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1240回复:1

tooflat老大在么,想请教个问题,看过tooflat sfilter的兄弟们也进来看一下好么

楼主#
更多 发布于:2007-08-27 10:55
最近初步地入门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呀  先谢.................
888atao
驱动牛犊
驱动牛犊
  • 注册日期2005-12-10
  • 最后登录2021-07-23
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望30点
  • 贡献值0点
  • 好评度28点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-08-27 11:38
自己顶一下
哎 还是怪自己懒 看明白tooflat的加解密方式了

可是如果按我的思路做 要怎样做呢 类似Hook ZwReadFile和ZwWriteFile
然后Read Decrypt, Write Encrypt

估计要对缓存flush和clear了吧
游客

返回顶部