ildee
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2419回复:15

文件加解密的问题,VCMFC先生帮忙看看

楼主#
更多 发布于:2004-09-02 13:08
这两天看了论坛里大部分文件加解密的问题,终于理解了VCMFC先生说的只处理nocache irp的观点,我认为是这样不知对不对:

比如一个被加密的文件a.txt(a.txt是密文存放在磁盘上),当nocache irp来的时候解密(此时a.txt变成明文存放在磁盘上)。

此时a.txt是可以被拷贝走的,但是如此一来,如果别人将明文拷贝走,不是很不安全吗??

我认为应该是这样:
无论何时文件被读的时候,将密文在内存里解密,然后完成irp,这样被人看到的是明文,但是硬盘上存放的永远是密文。

不知我的理解对不对,请大师指正。

最新喜欢:

daoodaoodaooda...
zhangc98
驱动牛犊
驱动牛犊
  • 注册日期2002-03-30
  • 最后登录2004-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-09-02 22:09
这两天看了论坛里大部分文件加解密的问题,终于理解了VCMFC先生说的只处理nocache irp的观点,我认为是这样不知对不对:

比如一个被加密的文件a.txt(a.txt是密文存放在磁盘上),当nocache irp来的时候解密(此时a.txt变成明文存放在磁盘上)。
      ~~~~~~~~~~~~~这个时候磁盘上怎么会变成明文呢?

此时a.txt是可以被拷贝走的,但是如此一来,如果别人将明文拷贝走,不是很不安全吗??

我认为应该是这样:
无论何时文件被读的时候,将密文在内存里解密,然后完成irp,这样被人看到的是明文,但是硬盘上存放的永远是密文。

不知我的理解对不对,请大师指正。


硬盘上永远都是密文,缓存中永远是明文,这样才是比较安全的做法,而且实际上也是这么做的。至于nocache irp仅仅是一种文件读写的方式,还应该拦截所有Paging IO的操作,因为并不是每个文件都是采用nocache的方式,就我所知,一般常用的文件还是paging的比较多一点吧?
呵呵,楼主指名提问,我就算插个嘴,交流各人的理解,有不对的地方,烦请大师一同指正!
目前:新手上路; 目标:高级站友; 理想:开国大佬; 方法:自己的努力+大家的关照!
ildee
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-09-03 10:43
楼上的和我的想法是一样的,硬盘上应该是密文。
例如 :假设a.txt内容是:abcdefg(密文),经过解密后明文应该是ABCDEF.

但是我的实验结果是:
只要选中a.txt(单击该文件)此时读取会符合要求即:
(Irp->Flags & ( IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO )) == TRUE
实际上irp->flags = 0x43(正好是上面三个值的或操作),而且仅此一次,此时如果解密并替换buffer,明文就会存在硬盘上(实际上替换的buffer是MmGetSystemAddressForMdl(Irp->MdlAddress)得到的)。
如果第一次不解密,以后每次双击打开都不会符合要求(每次的irp->flags都是0x900),而且每次buffer都是irp->userbuffer
,如果此时解密,并替换buffer,如果用别的程序打开a.txt如:word,explorer,ueditor等看到的都是明文(此时硬盘上存的是密文),但是双击用notepad打开看到的还是密文。

还有就是,双击一个.txt会有好多次irp_mj_read,何时才真正解密呢??我看了各种标志,每次都一样,根本没办法区分,希望大虾帮忙解释一下。
satanli1982
驱动牛犊
驱动牛犊
  • 注册日期2004-03-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-03 21:07
深有同感!!
up一下
ildee
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-09-07 09:49
up by myself
zhangc98
驱动牛犊
驱动牛犊
  • 注册日期2002-03-30
  • 最后登录2004-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-09-07 19:15
你所说的那种情况,明文不是存在硬盘上,
而是放在了缓存中,
即在选中文件的时候,系统就自动将文件从硬盘上读出放入缓存,
在这个时候解密的结构就是缓存中是明文,硬盘上仍然是密文。

以后在双击之类的方法打开文件的时候,系统会先查询缓存中有没有对应的文件,如果有的话,就直接从缓存中读出数据,此时的flag设置就是你所看到的那样,例如0x900。如果缓存中没有所需要的文件,就会产生一个缺页错误,导致系统从硬盘上读入需要的数据放入缓存中。

你的例子中说得仅此一次,仅仅是因为文件比较小,最开始的一次就已经将文件全部放入缓存。你换个大文件试试,就会收到不止一次的“符合”要求的read命令了,呵呵:)
目前:新手上路; 目标:高级站友; 理想:开国大佬; 方法:自己的努力+大家的关照!
ildee
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-08 10:54
谢了,楼上的老大,我试了一下,果然有用,这次我才算明白vcmfc说的话了,感动ing...!!

再问一个,我想在文件关闭后,清空缓存或者把缓存替换成密文,那种方法更好呢??或者创建一个线程,当iocompleterequest之后马上把MDL替换??

我是想实现:当合法用户使用的时候是明文;如果文件不关闭,此时非法用户使用,看到的是密文。

怎么实现好呢??
zhangc98
驱动牛犊
驱动牛犊
  • 注册日期2002-03-30
  • 最后登录2004-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-09 19:10
为了安全起见,缓冲区里面最好不要放密文,
否则有可能会造成一些难以解决的问题,
当然如果能够保证加密的仅仅是数据文件应该也可以吧?
不过我没有试过,不好乱说:)

缓冲区的问题困扰好久了,一直没有找到合适的方法来处理,
关注中,
希望大侠们多多指教!!
目前:新手上路; 目标:高级站友; 理想:开国大佬; 方法:自己的努力+大家的关照!
satanli1982
驱动牛犊
驱动牛犊
  • 注册日期2004-03-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-09-12 09:56
up一下
ildee
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-09-20 11:26
自己顶以下,
ildee
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-10-09 10:24
wo zai ding yi xia
ildee
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2005-01-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-10-09 10:41
我自己顶
satanli1982
驱动牛犊
驱动牛犊
  • 注册日期2004-03-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-10-11 15:03
关注,顶一下^_^
wangfei1173
驱动牛犊
驱动牛犊
  • 注册日期2004-03-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-10-12 09:25
gongbin_net
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2005-06-07
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-03-15 14:36
你的理解有污,VCMFC先生说很对的,你无法保证别人拷贝,他拷贝的文件还是明文的,因为拷贝时候会解密的,不止到你有和高见
yuanyuan
驱动大牛
驱动大牛
  • 注册日期2003-01-15
  • 最后登录2010-08-04
  • 粉丝0
  • 关注0
  • 积分1025分
  • 威望300点
  • 贡献值0点
  • 好评度232点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-06-25 14:30
禁止拷贝不就得了!
游客

返回顶部