shar123
驱动牛犊
驱动牛犊
  • 注册日期2009-05-12
  • 最后登录2009-10-09
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望461点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2433回复:2

文件读写数据流的获取

楼主#
更多 发布于:2009-07-09 18:20
请教大侠

    我绑定卷了之后,来截获文件的数据读取(在IRP_MJ_WRITE和IRP_MJ_READ函数里面),并对截获的文件流进行处理,我发现每次文件读写之前都会触发IRP_MJ_CREATE这个函数 所以我在这里面判别文件的类型,并对指定文件对象加以标示,然后在读写中进行处理

    我在IRP_MJ_READ中拦截被标示的文件对象的所有数据,并按照AES算法对其解密;为了测试我的解密功能,我在另一个系统中写了一个控制台程序,并按同样的加密和解密算法实现对其加密和解密,并验证成功。我把加密成功的文件放到过滤驱动的系统中,打开文件验证解密效果!现在出现了一个问题,大概小于500K的文件可以被成功解密,但是大于500K的Excel PPT等文件却打不开,或者是数据坏了,这个问题怎么解决,继续往下看

    即然是过滤驱动,绑定卷之后,应该是可以拦截到文件的所有数据啊,如果可以拦截到所有数据,那按照解密算法,解密出来的文件数据应该就可以被PPT等应用程序使用,显示到浏览器中、

    如果是方法的问题,那应该一个文件都无法处理,可是却有些文件可以处理

    我写的控制台程序是按二进制文件打开的PPT,解密后立马就能用,绑定卷的过滤驱动这一层拦截到是文件的二进制流吗,再有,绑定卷的过滤驱动是不是一定能拦截到一个文件的所有信息,如果不是,还有什么地方可以拦截补充的数据,或是一次性可以拦截所有的数据

    文件读的时候,分多个块读取,有 4096字节 9182字节 16384字节 24576字节 32768字节 这几个类型块,我猜想是不是由于我在每个块读出之后立即进行解密处理,而系统读取文件的时间可能都有限制,从而导致数据不能及时到位,可是不知道怎么验证,也不知道怎么解决

    系统对过滤驱动读写数据处理强人能指教一二 不胜感激 如果问题解决了 分要多少给多少
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2009-07-09 21:35

我在IRP_MJ_READ中拦截被标示的文件对象的所有数据,并按照AES算法对其解密;为了测试我的解密功能,我在另一个系统中写了一个控制台程序,并按同样的加密和解密算法实现对其加密和解密,并验证成功。我把加密成功的文件放到过滤驱动的系统中,打开文件验证解密效果!现在出现了一个问题,大概小于500K的文件可以被成功解密,但是大于500K的Excel PPT等文件却打不开,或者是数据坏了,这个问题怎么解决

While, you have to tell us how do you encrypt the file by AES. My guess is you simply apply AES to encrypt a file from the first byte to the last. This approach won't work because file system READ/WRITE is based on sectors. You have to design your own way to encrypt a file.


 即然是过滤驱动,绑定卷之后,应该是可以拦截到文件的所有数据啊,.......  绑定卷的过滤驱动是不是一定能拦截到一个文件的所有信息

Yes, a filter driver is able to filter all READs and WRITEs..


文件读的时候,分多个块读取,有 4096字节 9182字节 16384字节 24576字节 32768字节 这几个类型块,

Data in READ/WRITE IRPs are sector aligned. You can get more details from WDK document about READ/WRITE IRP. And this is why you have to have your own mechanism to encrypt a file.


现在出现了一个问题,大概小于500K的文件可以被成功解密,但是大于500K的Excel PPT等文件却打不开,或者是数据坏了,这个问题怎么解决 ...... 如果可以拦截到所有数据,那按照解密算法,解密出来的文件数据应该就可以被PPT等应用程序使用,显示到浏览器中、 如果是方法的问题,那应该一个文件都无法处理,可是却有些文件可以处理 ........

I think your problem has nothing to do with data retrieving. Some of your decryption operations failed and bad data got returned to applications.


I would suggest you read books first. "NT File System Internals" is the one I always recommend. A book about cryptography, such as "Applied Cryptography", may also help you understand how to design an encryption driver.
shar123
驱动牛犊
驱动牛犊
  • 注册日期2009-05-12
  • 最后登录2009-10-09
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望461点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-07-10 09:34
你好

AES加密处理 我是通过
if(Irp->MdlAddress)
{
   pBuffer = MmGetSystemAddressForMdl(Irp->MdlAddress);
}
取出的数据,我发现OFFICE文件中它都是16的整数倍,所以我申请了一个同样大小的空间,然后通过AES算法把加密的数据存进去,然后MmBuildMdlForNonPagedPool,应该不会有差位的 或是 缺位的

还有下面你说的这个

I think your problem has nothing to do with data retrieving. Some of your decryption operations failed and bad data got returned to applications.


I would suggest you read books first. "NT File System Internals" is the one I always recommend. A book about cryptography, such as "Applied Cryptography", may also help you understand how to design an encryption driver.

你的意思我的数据获取没有问题,只是在解密的时候数据位没有对其或是解密的数据不正确,是这意思吗

可是我发现对小一点的文件解密都还正常,可是大一点的文件好像都有这样那样的问题,甚至解密不了,我担心我的思路有问题,按道理加密时是按128位16个字节顺序加密,明文16个字节,对应密文也是16个字节,读取的时候按顺序读取就玩了,可为什么会出问题,也不知道如何进行验证

非常感谢 我还是先读一下文档吧

其实我手头是有一些文档的 但是就是无法把文档中的内容和我的开发需求联系起来,往往很多结果都是通过猜想,然后试验得出结论,这样更直观
游客

返回顶部