首页
社区
课程
招聘
[求助]关于光驱的只读,一点思路,求指点。
发表于: 2012-3-30 16:47 5336

[求助]关于光驱的只读,一点思路,求指点。

2012-3-30 16:47
5336
一个小功能模块。 需要针对U盘和光驱控制只读,禁止执行,完全阻止,这些功能。

开始用minifilter,也遇到一些问题,基本上都解决了,U盘没什么问题,光驱的话,如果在WIN7下用我的电脑打开,直接往盘里面粘贴东西,minifilter是可以阻止的。

但是如果用刻录机往里面写,好像判断不出他是一个写的create,在prewrite里面也看不到写的操作。

在PreCreate里面判断
if (((Data->Iopb->Parameters.Create.Options >> 24) & 0x000000ff) == FILE_CREATE ||
      ((Data->Iopb->Parameters.Create.Options >> 24) & 0x000000ff) == FILE_OVERWRITE_IF ||
      FlagOn(Data->Iopb->Parameters.Create.SecurityContext->DesiredAccess, GENERIC_WRITE))
    {}


在PreWrite里面判断下盘符是不是光驱的盘符 如果是 也认为是写。

这两个地方都没有拿到。不知道是不是还有什么没判断。

也考虑过pnp的过滤驱动,感觉为了做了做这小功能,又不至于。

观察了老外的一个软件,发现他挂了WH_CBT,和WH_CALLWNDPROCRET这两个消息,WH_CBT好像让刻录机软件在遍历光驱的时候 找不到,只有资源浏览器才能看到,WH_CALLWNDPROCRET可能就是负责对一些操作的过滤。
具体不清楚他怎么做到的,求指点。

any advice is appreciated,thanks in advance~

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 18
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
WH_CBT 特别是这个消息钩子 如果在这里可以只让资源浏览器获取盘符的时候正常返回,而让其他软件获取的时候 都无法返回,也是在应用层 变相的 阻止了刻录机的使用,关于这个消息的hook,不知道哪里有资料
2012-3-31 11:59
0
雪    币: 327
活跃值: (1065)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
设备过滤驱动
1.先判断光驱是否可写
2.把带有WRITE的DesiredAccess过滤了。
2012-3-31 17:55
0
雪    币: 18
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
开始为了配合U盘和其他盘符的限制,所以用了minifilter这个文件过滤驱动来做,可能CDFS很多东西限制不到吧。

加了几个判断还是不行,现在如果不添加设备过滤驱动的话,只能考虑从消息过滤了。

if (((Data->Iopb->Parameters.Create.Options >> 24) & 0x000000ff) == FILE_CREATE ||
			((Data->Iopb->Parameters.Create.Options >> 24) & 0x000000ff) == FILE_OVERWRITE_IF ||
			((Data->Iopb->Parameters.Create.Options >> 24) & 0x000000ff) == FILE_OVERWRITE ||
			((Data->Iopb->Parameters.Create.Options >> 24) & 0x000000ff) == FILE_OPEN_IF ||
			FlagOn(Data->Iopb->Parameters.Create.SecurityContext->DesiredAccess, GENERIC_WRITE) ||
			FlagOn(Data->Iopb->Parameters.Create.SecurityContext->DesiredAccess, WRITE_DAC) ||
			FlagOn(Data->Iopb->Parameters.Create.SecurityContext->DesiredAccess, WRITE_OWNER) ||
			FlagOn(Data->Iopb->Parameters.Create.SecurityContext->DesiredAccess, STANDARD_RIGHTS_WRITE))
		{
			if (IsInDisk(enumDiskType, lpszFilePath))
			{
				DbgPrint("desire write!!!!!!!!!!,path is %s", lpszFilePath);
				bDeny = TRUE;
				g_bRedirect = FALSE;
			}
		}
2012-4-1 09:06
0
游客
登录 | 注册 方可回帖
返回
//