首页
社区
课程
招聘
[分享]Win7 x64禁止终止进程保护驱动代码
发表于: 2013-12-12 11:09 47429

[分享]Win7 x64禁止终止进程保护驱动代码

2013-12-12 11:09
47429

最近在做Win7 32和64下进程保护的东西,不想用Hook了,更何况64位驱动也不能hook了,就在找怎样在64位下实现,看了tianhz大牛的帖子收获很大,他基本上也给出了实现的关键代码。就是用ObRegisterCallbacks实现,简单、易用。

只是网上关于这个实现的代码太少了,最多的就是介绍原理和object hook。

现在将可编译的驱动源码贴出来,方便大家使用。

我这个代码里使用比较进程名的方式来比较是否是需要保护的进程。

用的还是常用的搜索system进程中EPROCESS结构中System字段来找本系统的EPROCESS中进程名的偏移的方法。

这种方法有个缺点就是进程名只支持16个字符,长了就显示不出来了。

有哪位大大还有其他获取完整进程名的方法可以给小弟提提意见。

用WDK7600.16385.1中win7 x86和win 7 x64编译就可以了,用xp编译不通过的,因为这个回调函数在xp下没有,vista以后才支持的。

win7 32 和64测试可以达到保护的效果。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (27)
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
沙发,等会测试一下
2013-12-12 11:12
0
雪    币: 97
活跃值: (141)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
获取完整进程名的方法是:在_EPROCESS中查找。你在widbg中输入 dt  -r2 _EPROCESS  内存地址 ,应该就可以看到进程完整名称了。
2013-12-12 11:47
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
我比楼上直接点,楼主直接看EPROCESS.SeAuditProcessCreationInfo.ImageFileName.Name就可以了
2013-12-12 12:13
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
5
为啥不能直接用psgetprocessimagefilename()
2013-12-12 12:30
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
6
因为PsGetProcessImageFileName这个函数取的就是EPROCESS中的那16个字节。。。
2013-12-12 12:38
0
雪    币: 110
活跃值: (34)
能力值: (RANK:50 )
在线值:
发帖
回帖
粉丝
7
额,俺的意思是LZ为啥不用PsGetProcessImageFileName而是手动找ImageFileName的偏移。。
好多童鞋似乎都不喜欢用现成的函数而是要……
2013-12-12 13:48
0
雪    币: 101
活跃值: (82)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
额。。。因为原来俺不知道有这个函数。。。
2013-12-12 14:26
0
雪    币: 101
活跃值: (82)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
谢啦,又掌握个技巧
2013-12-12 17:02
0
雪    币: 101
活跃值: (82)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
thanks
2013-12-12 17:07
0
雪    币: 35
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不错,进军X64
2013-12-12 20:06
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
该域永远靠谱么?如果靠谱的话,imagefilename 弱爆了
2013-12-12 22:54
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
64位系统下是可以用Callbacks来保护进程
2013-12-14 16:25
0
雪    币: 636
活跃值: (174)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
14
非常靠谱,不过硬编码始终不太好,最好是 ObOpenObjectByPointer 得到 handle 然后 ZwQueryInformationProcess(xxx, ProcessImageFileName, xxx) 查询。(ZwQueryInformationProcess原理上实际就是取的EPROCESS.SeAuditProcessCreationInfo.ImageFileName.Name)
2013-12-16 12:32
0
雪    币: 74
活跃值: (748)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
mark,感谢分享
2013-12-16 13:28
0
雪    币: 142
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
方法不错和回调一样很简单。
2013-12-16 16:25
0
雪    币: 438
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
前来受教了,谢谢提供。
2013-12-18 13:44
0
雪    币: 108
活跃值: (44)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
18
多谢楼上的方法,收下了
2013-12-21 22:12
0
雪    币: 134
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
留名,马克!
2013-12-21 22:59
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
mark一下
2014-3-5 15:28
0
雪    币: 77
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
mark
2014-3-6 18:17
0
雪    币: 16
活跃值: (415)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
好文,学习了
2014-3-6 20:35
0
雪    币: 2664
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
23
mark,以后用的上
2014-3-6 20:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
mark, 还没懂怎么用。。
2014-4-26 20:14
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
mark
2014-8-14 13:19
0
游客
登录 | 注册 方可回帖
返回
//