首页
社区
课程
招聘
[原创]一种绕过全局钩子安装拦截的思路
发表于: 2009-7-2 18:54 9135

[原创]一种绕过全局钩子安装拦截的思路

2009-7-2 18:54
9135

本文介绍了一种思路,利用安全软件驱动和WINDOWS本身处理全局钩子安装过程的不同,以绕过安全软件对全局钩子安装的拦截。这种方法并不保证能通用于任何安全软件。

安全软件,例如HIPS,AV等,通常会安装 NtUserSetWindowsHookEx / NtUserSetWinEventHook的钩子

拦截全局钩子注入,防止键盘、消息拦截或者DLL注入。

在这两个函数的参数中,都存在一个pstrlib参数,指向了要注册全局钩子的DLL路径名,这个路径是DOS路径名,通常安全软件会分配BUFFER,将pstrlib这个UNICODE_STRING中的字符串读取出来,再加上NT路径头 (\??\),然后进行相关处理后传递给RING3的处理程序,比较常见的例如使用RtlCopyUnicodeString , 或者直接RtlCopyMemory(LocalName , pstrlib->Buffer , pstrlib->Length)

而WINDOWS函数自身,例如NtUserSetWindowsHookEx, NtUserSetWinEvnetHook,他们是怎么处理这个参数的呢?

实际上,这些函数最终会调用内部函数GetHmodTableIndex将DLL名加入一个ATOM Table中,并返回一个INDEX,记为为ihmod,等到CallNextHook2,或者分发winevent hook 时,通过 ihmod再取回这个index,得到DLL名,并通过User mode callback调用LoadLibrary加载这个DLL

GetHmodTableIndex则会调用一个UserAddAtom函数来将DLL名加入UserAtomTableHandle这个atom中。UserAddAtom这个函数接收的DLL名参数,是一个LPCWSTR类型的字符串,来自pstrlib->Buffer.UserAddAtom并不关心pstrlib->Length的长度。等到向RING3程序注入这个DLL时,调用xxxLoadHmodIndex中才在UserGetAtomName获取这个字符串后,通过调用RtlInitUnicodeString重新计算这个字符串的长度。

那么,很简单的方法就可以绕过安全软件的全局钩子拦截了:

(1).length 传入0,直接绕过检测

(2).buffer为c:\windows\system32\msctf.dllx

length传递为该字符串字节长度-sizeof(wchar)

也就是让安全软件得到错误的系统DLL名,实际注册的是其他的文件


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 6
活跃值: (1151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
终于坐到沙发了,哈哈
2009-7-2 19:04
0
雪    币: 30
活跃值: (765)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
大侠一出手,就知有没有。 不知道这个能不能绕过 KiUserCallbackDispatcher Hook ....

360 不会这样傻傻分不清楚吧
2009-7-2 19:13
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
4
若是hook KeUserModeCallback或callbackDispatcher等,则不能用这种方式绕过
因为此时的length已经是重新计算的了
2009-7-2 19:24
0
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
留名,
回去慢慢看
2009-7-3 12:29
0
雪    币: 290
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
强帖留名,插入前10. 慢慢学习
2009-7-3 12:38
0
雪    币: 178
活跃值: (159)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
强帖留名,慢慢学习~
2009-7-3 15:23
0
雪    币: 214
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
拜一下
2009-7-3 15:41
0
雪    币: 231
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
这个不是写在mj0011博客里面的文章吗
2009-7-3 16:28
0
雪    币: 30
活跃值: (765)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
LS 真是没话说了。脑子不灵光
2009-7-3 19:07
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
11
对抗来对抗去 会很累的
2009-7-3 20:37
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
重新计算长度是生成新的dll么..大侠.
2009-7-3 22:05
0
游客
登录 | 注册 方可回帖
返回
//