zzbwang
驱动牛犊
驱动牛犊
  • 注册日期2009-03-18
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分62分
  • 威望611点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分1分
阅读:7422回复:20

Minifilter框架下文件加密过滤驱动开发单元总结

楼主#
更多 发布于:2009-04-11 09:53
最近在做一个文件加密过滤驱动,采用了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会涉及到文件长度,尤其是改变文件长度。

暂时先写到这里,希望对大家能有所帮助。以后的开发进展我将及时汇报。

最新喜欢:

123218lzq123218... arbelarbel xiaobaochxiaoba...
alwaysrun
驱动小牛
驱动小牛
  • 注册日期2006-06-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1059分
  • 威望752点
  • 贡献值1点
  • 好评度98点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-04-18 11:05
好文章,顶一下
一颗平常的心!
allup
驱动牛犊
驱动牛犊
  • 注册日期2006-03-04
  • 最后登录2010-08-17
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望121点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-05-20 08:08
谢楼猪分享。
netspirit2006
驱动牛犊
驱动牛犊
  • 注册日期2009-05-30
  • 最后登录2009-07-19
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望91点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-06-10 19:36
支持一下。
neak47
驱动小牛
驱动小牛
  • 注册日期2009-05-25
  • 最后登录2016-01-09
  • 粉丝4
  • 关注0
  • 积分140分
  • 威望1221点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分1分
地下室#
发布于:2009-09-03 11:47
好文章
neak47
驱动小牛
驱动小牛
  • 注册日期2009-05-25
  • 最后登录2016-01-09
  • 粉丝4
  • 关注0
  • 积分140分
  • 威望1221点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分1分
5楼#
发布于:2009-09-22 00:04
8)PostRead中,如文件处于加密状态,则对数据解密,并判断当前读的数据是否是文件最后一页(根据StreamContext中的文件有效长度,读操作的ByteOffset和读返回的数据长度判断),如果是,则在需要时修改返回FLTMGR的数据长度。

“则在需要时修改返回FLTMGR长度,”
这个是什么长度?
jyss1644
驱动牛犊
驱动牛犊
  • 注册日期2007-08-15
  • 最后登录2011-04-11
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望180点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2009-10-27 14:40
10)PostWrite中,判断当前写的有效数据是否超出StreamContext中保存的文件有效数据长度,如果是,则更新StreamContext中的文件有效数据长度。

———在PostWrite中,当前写得有效数据是分块加密后的数据吧?如果超出StreamContext中保存的文件有效数据长度的话,更新的文件有效数据长度如何能够保证其为原始数据长度?
yangliangyin
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2010-07-14
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望102点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2009-11-13 15:06
thanks very much!
为中华系统软件的崛起而奋斗
feng_zhibing
驱动牛犊
驱动牛犊
  • 注册日期2009-12-11
  • 最后登录2009-12-23
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望191点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2009-12-11 14:47
fast I\O
wakinanna
驱动牛犊
驱动牛犊
  • 注册日期2009-12-17
  • 最后登录2009-12-20
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望91点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2009-12-17 16:33
好东西啊,呵呵
amazingzyx
驱动牛犊
驱动牛犊
  • 注册日期2009-03-06
  • 最后登录2010-01-19
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望181点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2009-12-24 21:11
超级好!!感谢分享!!
wxd_brighteast
驱动牛犊
驱动牛犊
  • 注册日期2006-10-27
  • 最后登录2014-02-11
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望144点
  • 贡献值1点
  • 好评度3点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2010-01-19 17:08
回 楼主(zzbwang) 的帖子
能把你的代码给我一份吗?我想仔细研究一下,感觉你的思路很好,值得学习一下,多谢!
wxd_wuxiaodong@sina.com
驱网无线,快乐无限
wlcscu
驱动牛犊
驱动牛犊
  • 注册日期2009-12-10
  • 最后登录2010-05-18
  • 粉丝2
  • 关注0
  • 积分13分
  • 威望111点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2010-01-25 14:58
请问楼主:
 
“文件访问计数”是如何计算的,那篇OSR的文章我看得不太懂,这种算法对TXT,WORD这种采用内存映射方式运行的文件有用么?
所谓的彻底关闭是不是指该文件不会再有读写操作了呢?那么如果用断电的方式关闭电脑的话,文件访问计数的算法还管用么?
daniel_bao
驱动牛犊
驱动牛犊
  • 注册日期2007-04-14
  • 最后登录2010-03-11
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2010-03-09 16:14
谢谢分享!
liuhui19842003
驱动牛犊
驱动牛犊
  • 注册日期2009-12-30
  • 最后登录2010-11-23
  • 粉丝1
  • 关注1
  • 积分52分
  • 威望481点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2010-04-05 21:30
可以给份源代码吗?dongn0905@126.com,谢谢!
liuhui19842003
驱动牛犊
驱动牛犊
  • 注册日期2009-12-30
  • 最后登录2010-11-23
  • 粉丝1
  • 关注1
  • 积分52分
  • 威望481点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2010-04-07 11:48
楼主,可以给份代码吗?dongn0905@126.com,谢谢!
liuhui19842003
驱动牛犊
驱动牛犊
  • 注册日期2009-12-30
  • 最后登录2010-11-23
  • 粉丝1
  • 关注1
  • 积分52分
  • 威望481点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2010-04-18 15:35
楼主送一份代码吧!谢谢!dongn0905@126.com
Prince|
驱动牛犊
驱动牛犊
  • 注册日期2009-12-08
  • 最后登录2010-04-19
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2010-04-18 23:03
楼主能和我联系一下么?最近也在搞这个,有些东西想请教,还有想和你合作!
Prince|
驱动牛犊
驱动牛犊
  • 注册日期2009-12-08
  • 最后登录2010-04-19
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2010-04-18 23:05
忘记了留下联系方式 QQ:75015170   wwfox005@qq.com
dlutfrank
驱动牛犊
驱动牛犊
  • 注册日期2010-09-26
  • 最后登录2011-04-11
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望311点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2010-09-26 19:28
最近也在研究文件系统驱动方面的东西,先学习一下。
上一页
游客

返回顶部