百度空间 | 百度首页 
 
查看文章
 
一种绕过全局钩子安装拦截的思路
2009-07-02 18:55

本文介绍了一种思路,利用安全软件驱动和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名,实际注册的是其他的文件


类别:默认分类 | 添加到搜藏 | 浏览() | 评论 (14)
 
最近读者:
 
网友评论:
1
2009-07-02 18:58 | 回复
沙个,发学习了

 
2
2009-07-02 19:07 | 回复
学习......
 
3
2009-07-02 19:21 | 回复
WS啊。。。
 
4
2009-07-02 19:28 | 回复
这个要顶~
 
5
2009-07-02 20:05 | 回复
学习了..
 
6
2009-07-02 21:16 | 回复
win32k好乱。路过。
 
9
2009-07-03 09:57 | 回复
人气真旺  
 
10
2009-07-03 13:18 | 回复
萎缩的方法
 
11
2009-07-03 19:01 | 回复
然后呢?
 
12
2009-07-11 09:16 | 回复
mJ能不能解释下 系统调试环境下出现这个

kd> u win32k!xxxLoadHmodIndex
win32k!xxxLoadHmodIndex:
bf84ceee ??              ???
                            ^ Memory access error in 'u win32k!xxxLoadHmodIndex'

断点也停不下来,咋整
 
13
2009-07-11 15:03 | 回复
切入csrss的进程空间再断
 
14
2009-07-11 16:45 | 回复
OK, 果然高手
 
16
2009-08-28 15:44 | 回复
RtlCopyUnicodeString你怎么绕过的?
 
17
2009-08-28 16:10 | 回复
正是使用RtlCopyUnicodeString的挫B安全软件才会受这招的制。

因为NtUserSetWindowHookEx根本不关心unicode_string的len /maxlen
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu