阅读:7877回复:20
Minifilter框架下文件加密过滤驱动开发单元总结
最近在做一个文件加密过滤驱动,采用了minifilter架构,目前已经完成了以下功能:
1)跟应用程序通信,接受应用程序设置过滤参数,并把参数加密后保存到配置文件中 2)驱动加载后,读取配置文件获取过滤参数 3)加密算法采用了AES,密钥长度可以是128位,192位或者256位,为16字节分组加密,数据长度不足16字节则补0。 准备以后支持更多加密算法,以及多密钥。 4)文件加密标识放在文件尾,标识中记录文件的有效数据长度(因为3中描述的原因,可能会在有效数据长度后补0)、加密算法索引、 密钥索引和一个特征字符串。加密标识块长度为32字节。 5)在IRP_MJ_CREATE判断文件是否已经加密,是否需要加密,设置Stream Context。StreamContext中记录文件的以下内容: 。文件有效数据长度,用于文件读写时能够返回正确的数据和长度 。文件访问计数,该值用于判断何时文件被彻底关闭,将加密标识写到文件末尾。该值的更新参见OSR文章(http://www.osronline.com/article.cfm?id=102) 。文件是否加密 。加密算法索引 。密钥索引 6)在PRECLOSE中根据StreamContext中的文件访问计数判断是否文件将真正关闭,如果是,把加密标识写到文件尾。 7)IRP_MJ_READ和IRP_MJ_WRITE,只处理非缓冲IO,CallBack的Flags为FLTFL_OPERATION_REGISTRATION_SKIP_CACHED_IO 8)PostRead中,如文件处于加密状态,则对数据解密,并判断当前读的数据是否是文件最后一页(根据StreamContext中的文件有效长度,读操作的ByteOffset和读返回的数据长度判断),如果是,则在需要时修改返回FLTMGR的数据长度。 9)PreWrite中,如文件处于加密状态,则对数据加密; 10)PostWrite中,判断当前写的有效数据是否超出StreamContext中保存的文件有效数据长度,如果是,则更新StreamContext中的文件有效数据长度。 11)PostQueryInformation中,根据StreamContext返回文件的有效数据长度; 我设计的文件过滤规则是:文件名字和进程名匹配,规则中的文件名可以是文件全名,也可以是扩展名。如果文件名和操作文件的进程名都匹配,驱动就在读写操作中对文件加密和解密。否则就不加解密。 下一步准备做的工作: 1)对文件改名的处理。 2)对本地进程访问远程文件的处理(不需要处理远端主机访问本地进程,因为得不到进程名) 目前还没搞清楚的问题有: 1)除了IRP_MJ_READ,IRP_MJ_WRITE,IRP_MJ_SET_INFORMATION,IRP_MJ_QUERY_INFORMATION之外,还有哪些IRP会涉及到文件长度,尤其是改变文件长度。 暂时先写到这里,希望对大家能有所帮助。以后的开发进展我将及时汇报。 |
|
沙发#
发布于:2009-04-18 11:05
好文章,顶一下
|
|
|
板凳#
发布于:2009-05-20 08:08
谢楼猪分享。
|
|
地板#
发布于:2009-06-10 19:36
支持一下。
|
|
地下室#
发布于:2009-09-03 11:47
好文章
|
|
5楼#
发布于:2009-09-22 00:04
8)PostRead中,如文件处于加密状态,则对数据解密,并判断当前读的数据是否是文件最后一页(根据StreamContext中的文件有效长度,读操作的ByteOffset和读返回的数据长度判断),如果是,则在需要时修改返回FLTMGR的数据长度。
“则在需要时修改返回FLTMGR长度,” 这个是什么长度? |
|
6楼#
发布于:2009-10-27 14:40
10)PostWrite中,判断当前写的有效数据是否超出StreamContext中保存的文件有效数据长度,如果是,则更新StreamContext中的文件有效数据长度。
———在PostWrite中,当前写得有效数据是分块加密后的数据吧?如果超出StreamContext中保存的文件有效数据长度的话,更新的文件有效数据长度如何能够保证其为原始数据长度? |
|
7楼#
发布于:2009-11-13 15:06
thanks very much!
|
|
|
8楼#
发布于:2009-12-11 14:47
fast I\O
|
|
9楼#
发布于:2009-12-17 16:33
好东西啊,呵呵
|
|
10楼#
发布于:2009-12-24 21:11
超级好!!感谢分享!!
|
|
11楼#
发布于:2010-01-19 17:08
|
|
|
12楼#
发布于:2010-01-25 14:58
请问楼主:
“文件访问计数”是如何计算的,那篇OSR的文章我看得不太懂,这种算法对TXT,WORD这种采用内存映射方式运行的文件有用么? 所谓的彻底关闭是不是指该文件不会再有读写操作了呢?那么如果用断电的方式关闭电脑的话,文件访问计数的算法还管用么? |
|
13楼#
发布于:2010-03-09 16:14
谢谢分享!
|
|
14楼#
发布于:2010-04-05 21:30
可以给份源代码吗?dongn0905@126.com,谢谢!
|
|
15楼#
发布于:2010-04-07 11:48
楼主,可以给份代码吗?dongn0905@126.com,谢谢!
|
|
16楼#
发布于:2010-04-18 15:35
楼主送一份代码吧!谢谢!dongn0905@126.com
|
|
17楼#
发布于:2010-04-18 23:03
楼主能和我联系一下么?最近也在搞这个,有些东西想请教,还有想和你合作!
|
|
18楼#
发布于:2010-04-18 23:05
忘记了留下联系方式 QQ:75015170 wwfox005@qq.com
|
|
19楼#
发布于:2010-09-26 19:28
最近也在研究文件系统驱动方面的东西,先学习一下。
|
|
上一页
下一页