yangsuqing
驱动牛犊
驱动牛犊
  • 注册日期2009-02-19
  • 最后登录2010-07-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望41点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4277回复:13

透明加密标识总结

楼主#
更多 发布于:2009-11-18 15:07
近日写了个Demo,主要是在文件尾部添加加密标识,采用的sfilter,刷缓存的技术


透明加密最重要需要关注几点
一、缓存管理
由于我采用的是单缓存技术,比较传统,所以必须刷缓存
刷缓存需要注意刷缓存的策略和时机。


二、文件追踪管理

主要是文件在打开、编辑、关闭的时候的跟踪
1、打开的时候创建跟踪,RtlInsertElementGenericTable
2、读写的时候引用跟踪
3、关闭的时候清除跟踪
需要搞清楚IRP_MJ_CLEANUP和irp_mj_close的区别
一般在应用层对文件的句柄为0的时候会进入IRP_MJ_CLEANUP中
而在kernel中对fileobject的引用为0的时候,会进入IRP_MJ_CLOSE中。缓存管理器初始化缓存的时候第一次会引用fileobject对象





三、加密标识管理

加密标识可以添加在文件头,文件尾,或者硬盘其它处,我做的稳定的是文件尾

添加加密标识重点需要搞清楚几个问题
举个简单的例子文档,如notepad操作txt,首先是notepad写内容至缓存,发write irp,然后set_info,设置文件长度,然后是system进程page io至硬盘
如果我们要添加加密标识的话,就是在写缓存的时候添加文件尾,然后在set_info的时候把我们添加的文件尾长度加上,最好pageio的时候加密

读的时候,notepad根本不发irp,直接采用的是mapviewoffile,怎么保证能经过我们的过滤驱动,就是刷缓存了。


1、在什么时候判断加密标识
很显然是在IRP_MJ_CREATE例程里面判断是否存在加密标识,自己发irp给文件系统查询

2、在什么时候写加密标识
在IRP_MJ_WRITE例程里面添加加密标识
大家都知道,在写例程里面重点关注两种,一种是写入缓存,irp Flag一般是0xa00(IRP_DEFER_IO_COMPLETION|IRP_WRITE_OPERATION);一种是page io写入硬盘
写入缓存的长度也就是IrpSp->Parameters.Write.Length就是你实际写入的长度,而写入硬盘page io,则写入的长度都是页的倍数(4k的倍数)
对数据的加密是在写入硬盘的时候加密,而添加文件尾是在写缓存的时候添加呢还是在写硬盘的时候添加呢:在写缓存的时候

非page io,进程上下文基本是应用程序的进程
而page io,进程一般是有system进程

当然也有文档操作是直接发page io的,如ppt,这需要在其它例程里面添加加密标识

添加加密标识需要注意的是,原来文件的长度有可能不是512的倍数,需要先拓展文件的长度,然后再添加文件尾

3、怎样“纠正”添加加密标识后的长度
说实话,这是比较麻烦的一块,需要用监控工具去查看很多文件类型的编辑过程
需要处理的过程比较多,如irp_mj_read,IRP_MJ_SET_INFORMATION、IRP_MJ_QUERY_INFORMATION、IRP_MJ_DIRECTORY_CONTROL,fastio里面的几个例程,都需要处理
处理的逻辑都不是很复杂,获取到真实长度,减去文件尾的长度和补齐的长度即可

总之这有个原则,就是保证应用层序读的长度不包含文件尾的长度,而在应用程序设置文件长度的时候又需要加上文件尾长度



四、其它细节处理

包括文件名的获取、重入管理、目录判断,字节对齐、自己构造发irp,这些网上都有成熟的代码,与业务没有太大的关系。



文件尾和文件头都做过,相对文件尾比较简单而稳定

现在论坛上讨论的比较多的minifilter、双缓存技术比较多,还需要学习哈

最新喜欢:

flyingeagles125flying...
neak47
驱动小牛
驱动小牛
  • 注册日期2009-05-25
  • 最后登录2016-01-09
  • 粉丝4
  • 关注0
  • 积分140分
  • 威望1221点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分1分
沙发#
发布于:2009-11-19 14:46
不得不顶这么好的文章,要是楼主,能上个demo测试下就好了
microbe
驱动小牛
驱动小牛
  • 注册日期2007-12-10
  • 最后登录2011-01-17
  • 粉丝1
  • 关注0
  • 积分914分
  • 威望420点
  • 贡献值1点
  • 好评度88点
  • 原创分0分
  • 专家分1分
板凳#
发布于:2009-11-20 13:23
顶楼主,总结得非常中肯,应该说该提示的点都提示出来了;

按照这个提示,稍有基础的人可以快速的做出一个demo~~~
zengpeng0322
驱动牛犊
驱动牛犊
  • 注册日期2009-04-09
  • 最后登录2010-05-15
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望81点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-11-30 16:19
一件不错,不过我做的是文件头,帮助还是蛮大的
wwg266543
驱动小牛
驱动小牛
  • 注册日期2007-07-03
  • 最后登录2014-08-27
  • 粉丝3
  • 关注1
  • 积分3分
  • 威望882点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分54分
地下室#
发布于:2009-11-30 19:30
感谢共享!
feng_zhibing
驱动牛犊
驱动牛犊
  • 注册日期2009-12-11
  • 最后登录2009-12-23
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望191点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-12-11 14:12
想向楼主请教一下,想把加密标识添到文件头应该注意哪些情况??
amazingzyx
驱动牛犊
驱动牛犊
  • 注册日期2009-03-06
  • 最后登录2010-01-19
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望181点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2009-12-24 17:09
总结的很好,赞一个!!!
nobounded
驱动小牛
驱动小牛
  • 注册日期2003-08-14
  • 最后登录2011-07-07
  • 粉丝0
  • 关注0
  • 积分360分
  • 威望258点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2010-01-02 00:07
缓存如何清的?不是很清楚,能否提示一下,谢谢。
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2010-04-09 14:20
好久没来,碰到好文,赞一个。。。
在交流中学习。。。
yunping_shd
驱动牛犊
驱动牛犊
  • 注册日期2010-05-05
  • 最后登录2010-11-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望101点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2010-05-20 20:13
回 楼主(yangsuqing) 的帖子
顶一下!
wishes2018
驱动牛犊
驱动牛犊
  • 注册日期2010-10-26
  • 最后登录2010-11-16
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望101点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2010-11-02 22:36
确实很好,顶一个。这里问一下,如何清缓存,寒江独钓里面只有清FAT32的,清NTFS的要如何?
Ethi1989
驱动牛犊
驱动牛犊
  • 注册日期2010-08-09
  • 最后登录2011-10-19
  • 粉丝1
  • 关注0
  • 积分27分
  • 威望211点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2010-11-05 19:36
回 楼主(yangsuqing) 的帖子
能给我个MSN吗?我的邮箱是ethi1989@gmail.com。有一些问题想请教您一下
wanghui219
禁止发言
禁止发言
  • 注册日期2007-08-28
  • 最后登录2019-07-29
  • 粉丝4
  • 关注3
  • 积分101166分
  • 威望505351点
  • 贡献值0点
  • 好评度137点
  • 原创分0分
  • 专家分4分
  • 社区居民
12楼#
发布于:2010-11-05 20:59
用户被禁言,该主题自动屏蔽!
andy_Tsing
驱动牛犊
驱动牛犊
  • 注册日期2009-10-25
  • 最后登录2010-12-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望131点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2010-11-23 14:04
学习中,牛人啊
游客

返回顶部