gzy_nj
驱动牛犊
驱动牛犊
  • 注册日期2006-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分416分
  • 威望60点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
阅读:2887回复:12

移植tooflat的加解密,关于cache的问题

楼主#
更多 发布于:2007-10-08 12:32
我的要求比较简单,对特定的文件目录中的所有文件进行透明加解密,主要移植了tooflat的read,write,create几个函数,现在碰到些问题请教一下了解的大牛们。
1、关于if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO)))这个语句,我理解是不是排除掉对cache的一些操作?只有不是cache操作才进行加解密,不知道对不对?
2、在write中,如果我加上if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO))),那么我对打开的文件进行修改后,再点保存,好像就被这一句给过滤掉了,不能进行加密存储了,为什么呢?去掉这一句,每次write的时候都进行加密,好像看着效果也正常?
3、在read中,如果原来文件就在目录中,那么打开可以执行解密操作,但是如果我从其它目录拷贝或者新建一个文件后,write的时候都加密了,但是再打开的时候都不进行解密,好像就是被if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO)))给过滤掉了,怎么解决呢?

不知道tooflat的代码是怎么解决这个问题的?请大牛指点一下,我因为要求不多,所以tooflat的一些其它函数并没有移植过来

最新喜欢:

mr6698mr6698
gzy_nj
驱动牛犊
驱动牛犊
  • 注册日期2006-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分416分
  • 威望60点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-10-10 09:45
 
stevphen1
驱动牛犊
驱动牛犊
  • 注册日期2007-09-29
  • 最后登录2007-11-02
  • 粉丝0
  • 关注0
  • 积分230分
  • 威望24点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-10-10 10:25
if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO)))
表示只对实际数据读写操作感兴趣
clarence
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2009-09-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望97点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-10-10 10:25
1、关于if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO)))这个语句,我理解是不是排除掉对cache的一些操作?只有不是cache操作才进行加解密,不知道对不对?
对!

2、在write中,如果我加上if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO))),那么我对打开的文件进行修改后,再点保存,好像就被这一句给过滤掉了,不能进行加密存储了,为什么呢?去掉这一句,每次write的时候都进行加密,好像看着效果也正常?
不会的,修改文件保存是会有这三个标志位(或其中之一二)的文件写下去的。

3、在read中,如果原来文件就在目录中,那么打开可以执行解密操作,但是如果我从其它目录拷贝或者新建一个文件后,write的时候都加密了,但是再打开的时候都不进行解密,好像就是被if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO)))给过滤掉了,怎么解决呢?

copy过来的很大机会上会在cache中,所以打开文件就看见明文了,不会走0x43这几个标志位了。可以你这样试一下,copy完文件然后重启,或是代码里清cache,然后再去打开文件,这样IRP_READ中就会看见0x43的读了。新创建文件基本类似。
gzy_nj
驱动牛犊
驱动牛犊
  • 注册日期2006-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分416分
  • 威望60点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-10-10 11:10
非常感谢clarence 大牛的指点,先去试验下!
gzy_nj
驱动牛犊
驱动牛犊
  • 注册日期2006-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分416分
  • 威望60点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-10-10 11:27
关于write还是不行,请教为什么?

IRP_MJ_WRITE:
    nFlag = GetPathFlag(fullPathName, DirStatus);    
    if(nFlag != 0xFFFF)
    {
    。。。。
if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO)))
{
DbgPrint((" write file skip pathname: %s \n", fullPathName));
IoSkipCurrentIrpStackLocation(Irp);
return IoCallDriver(hookExt->FileSystem, Irp);
}        

主要意思就是判断如果是我要求的目录文件路径,就进行加密,第一步就是判断    if (!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO))),在debug中,我打开一个txt文件,更改后,点击保存,在dbgview中可以看到write file skip pathname。。。这一句调试信息,表示被这个if语句过滤掉了,没有进入加密代码,为什么呢?和记事本没关系吧?      
gzy_nj
驱动牛犊
驱动牛犊
  • 注册日期2006-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分416分
  • 威望60点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-10-10 11:46
跟踪到此时的irp->flags是0xa00,怎么办?
clarence
驱动牛犊
驱动牛犊
  • 注册日期2006-05-08
  • 最后登录2009-09-30
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望97点
  • 贡献值0点
  • 好评度76点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-10-10 12:59
1、Read Write里面的文件路径是不一定有效的。
2、用Filespy工具你会看到有0x43的IRP下来的,当然前面也会有你看到到其他FLAG的IRP。
现在我们做的driver对于不是0x43的都一律不处理
gzy_nj
驱动牛犊
驱动牛犊
  • 注册日期2006-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分416分
  • 威望60点
  • 贡献值0点
  • 好评度39点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-10-10 16:33
再次感谢clarence 的指点,write的问题找到了,是我程序前面的问题。
希望这里象clarence 热心的朋友能多一些,有问题大家多讨论才能有进步!
quicmous
驱动牛犊
驱动牛犊
  • 注册日期2007-02-09
  • 最后登录2009-08-14
  • 粉丝0
  • 关注0
  • 积分115分
  • 威望44点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-01-18 13:53
引用第8楼gzy_nj于2007-10-10 16:33发表的  :
再次感谢clarence 的指点,write的问题找到了,是我程序前面的问题。
希望这里象clarence 热心的朋友能多一些,有问题大家多讨论才能有进步!


具体什么原因呀?俺也遇到类似的问题,您不妨多给俺罗索几句呀?
wshchb
驱动小牛
驱动小牛
  • 注册日期2006-05-14
  • 最后登录2015-03-05
  • 粉丝1
  • 关注0
  • 积分1005分
  • 威望385点
  • 贡献值1点
  • 好评度97点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2008-06-16 22:38
引用第8楼gzy_nj于2007-10-10 16:33发表的  :
再次感谢clarence 的指点,write的问题找到了,是我程序前面的问题。
希望这里象clarence 热心的朋友能多一些,有问题大家多讨论才能有进步!


同仁,你是怎么处理的阿?请点解点解? 
firfor
驱动牛犊
驱动牛犊
  • 注册日期2009-11-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分121分
  • 威望451点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
11楼#
发布于:2010-05-08 22:20
这种人啊。遇到了问题没有人回答就说人家不热心。一有人回答把问题给解决了,自己就消失了。哎。
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2010-05-09 17:16
引用第11楼firfor于2010-05-08 22:20发表的 :
这种人啊。遇到了问题没有人回答就说人家不热心。一有人回答把问题给解决了,自己就消失了。哎。


太正常了,有些人在得到答案后立即删除帖子中所有能删除的内容呢!
提问归提问,还是只能靠自己
游客

返回顶部