首页
社区
课程
招聘
[求助]minifilter 透明加密 修改filesize 和 validdatalength
发表于: 2016-7-20 09:03 7971

[求助]minifilter 透明加密 修改filesize 和 validdatalength

2016-7-20 09:03
7971
基于minifilter的文件透明加解密,加密标识保存在文件头,setinformationfile,postqueryinformation 中修改了offset,endof,allocatesize。在postcreate中如果是新建文件就往文件头写入4KB的文件标识。
在preread中将offset+4KB,在prewrite中将offset+4KB。
现在在windows server 2003中,如果prewrite的时候没有设置endof的大小,那么写入文件会被endof截断,所以在cache的写的时候使用fltsetinformationfile修改了endof的大小。比如:缓存写入6字节的大小,这个时候endof可能还是4096,所以修改后endof就是4096+6,这样当nocache写入的时候就正常了。

但是现在在windows server 2008中,写入数据又被fcb.validdatalength截断了。使用fltsetinformationfile设置validdatalength失败,如果直接修改fcb.validatalength可以成功,但是这样造成了系统不稳定,求高手指点一下。。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 5
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
继续等。。。
2016-7-29 10:10
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
RBB
3
直接修改了还得通知缓存管理器,CcSetFileSizes,找找fastfat的代码参考下吧。
2016-7-29 11:12
0
雪    币: 5
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢你的回答,我之前有使用CcSetFileSize来通知,可是还是不行。

我还尝试在修改validdatalength时获取资源锁,结果导致程序死锁。

看了NT 文件系统内幕,书上说validdatalength的修改需要通过顶层设备,

我又尝试使用SetFileInformation来修改 Validdatalength,这样可以修改成功,但是它好像把currentoffset也修改,虽然我用dt fileobject 的 currentoffset没有变,但是当NOCACHE 写文件的时候,它只保存了最后一页数据,也就是说NOCACHE 我只收到了offset=0x2000,writelength=0x3D7的写请求,前面的0x2000的数据写请求没有接收到。。。
2016-7-29 17:45
0
雪    币: 5
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我的流程是这样的,
PostCreate的时候判断是否是加密文件,是的话写上加密头,然后刷缓存.在PreWrite的地方对数据进行加密,写文件的偏移量加上一个加密头大小,另外在PreSetInformation处过滤,如果是机密进程那么ValidSize EndofFile AllocateSize Position等全部加上一个加密头大小,在PostQueryInformation的地方减掉一个加密头大小
因为OFFICE系列写文件的时候没有设置ENDOF,导致文件被截断,所以我在CACHE写文件的时候fltsetinformation设置了ENDOF,又因为WINDOWS SERVER 2008 下写文件被validdatalength截断,我尝试使用ftlsetinformation设置VALIDDATALENGTH 失败,所以直接修改FCB->Validdatalength。
大概思路是这样的.
2016-7-30 22:22
0
雪    币: 307
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
问一下,如果实在IRP_MJ_CLEANUP中来对修改的机密文件进行加密,那么怎么判断文件是否被修改过,是不是判断最后修改的时间是否相同啊?如果是怎么获取上一次的修改时间
2017-10-17 09:58
0
游客
登录 | 注册 方可回帖
返回
//