首页
社区
课程
招聘
[旧帖] [转帖]对于QQ2010密码保护框架的研究 0.00雪花
发表于: 2010-3-19 13:31 4427

[旧帖] [转帖]对于QQ2010密码保护框架的研究 0.00雪花

2010-3-19 13:31
4427
讨论]某论坛对于QQ2010密码保护框架的研究(值得学习)
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
议题作者:huhu0013

这几天好好地研究了一下QQ2010登陆窗口的密码输入框,细节没有完全弄清楚, 不过还是看出了大致的原理了。在这里发表一下我的看法,和有兴趣的朋友一起讨论。菜鸟水平,认识问题的程度很有限,大牛们就飘过吧。

我首先想到的,是要搞清楚,他的保护原始是基于R0还是R3?
这个问题的答案是:R3。理由很简单,因为找不到QQ有驱动啊,所以自然就是在R3进行的保护了。这个没什么好说的,不讲了。

接着是,QQ究竟如何在应用层实现密码输入保护的呢?
这个问题一开始我想来想去都不明白。我的运气很好,后来无意中看到了QQ2010安装了两个很特别的windows消息钩子:WH_DEBUG和WH_KEYBOARD_LL,于是线索出来了。

看到这两个钩子,好特别啊,它们是做什么用的呢?为什么要安装这两个钩子呢?
我马上翻了一下MSDN,找到答案了。

原来,WH_DEBUG可以用来管理很多种类型的钩子,有这么多种:

WH_CALLWNDPROC
WH_CALLWNDPROCRET
WH_CBT
WH_DEBUG
WH_JOURNALPLAYBACK
WH_JOURNALRECORD
WH_KEYBOARD
WH_MOUSE
WH_MSGFILTER  
WH_SHELL
WH_SYSMSGFILTER

WH_DEBUG能管理这些类型的钩子,在这些钩子的钩子过程将要被系统调用的时候,系统总是先执行调试钩子的钩子过程。而MS的这个调试钩子,允许我们决定是否执行这些被管理的钩子。

我扫了一眼以上列表,在其中发现了WH_KEYBOARD钩子。原来普通键盘钩子是被调式钩子所管理的,也就是说,如果一个程序装上了调式钩子,那么在它上面的普通键盘钩子的钩子过程在执行之前,先要执行调式钩子,而在这个调式钩子里就可以拒绝执行即将执行的普通键盘钩子。
想到这里我恍然大悟了,难怪QQ装有一个调式钩子呢,难怪有全局键盘钩子记录不到QQ的密码呢!

还有一个低级键盘钩子,这个比较难一点,QQ保护原理核心都在这里面。
想贴一下这个钩子的钩子过程的反汇编代码,想想还是算了,太太长了。还是说一下我理解出来的意思吧,不全面,没有完全弄懂。

首先要知道的是,低级键盘钩子和普通简单钩子执行的先后顺序。
如果一个程序,同时被装有这两种钩子的话。在按键消息到来的时候,这两个钩子的执行顺序是:
低级键盘钩子 -》普通键盘钩子
为什么是这样的呢?我是看MSDN悟出来的,有疑问的话你也看看吧。
既然低级键盘钩子在普通键盘钩子的前面执行,自然它也有防御普通键盘钩子的能力了。

看到前面两个钩子,都是能够防御普通键盘钩子的。我自然想到,如果盗号者采用的是低级键盘钩子呢?是不是就能取得QQ的密码了呢?
带着好奇,我自己做了一个低级键盘钩子的测试程序。结果发现:

当我用鼠标点击密码输入框,把输入焦点定在这里时(并没有按键盘),测试程序就不停地输出按键信息。奇怪,我还没有开始输入密码啊,一个键都还没按呢!

后来冷静下来想了一想,这一定是TX为了防止盗号木马使用低级键盘钩子取走QQ的密码,而故意设置的虚假的按键信息,这样即使你用低级钩子记录到了某个正确的按键,其中必然混杂了很多虚假的按键信息,形成了干扰。

最后还有一点很重要的东西,可能大家很容易忘记,我在这里提醒一下大家。
细细地回想一下以前学习windows钩子学到的东西,记忆里会想起这么一个规律:
如果一个程序上被装上了多了同一类型的钩子,那么这些钩子的执行顺序是,先安装的后执行,
后安装的先执行。

也就是说,如果给某个程序同时装上两个低级键盘钩子A和B,安装的顺序是:A -》B,那么这个钩子的钩子过程执行的顺序就是:B -》A。

所以说,如果我们给QQ安装上一个低级键盘钩子,因为我门是在后面安装的,所以我们的钩子应该先执行,然后才执行QQ自己安装的低级键盘钩子。这不是成了QQ键盘保护的弱点了吗?我一边想着,一边在怀疑。

这个问题QQ是处理的呢?我在实践中探索到了答案,原来QQ会通过一个定时器,不停地对它的调式钩子和低级键盘钩子进行Unhook,然后马上再Hook。这样,不是就保证了QQ的钩子安装在盗号木马的钩子之后,从而先于木马的钩子执行了吗?哈哈

最后用一句话概括QQ自己的低级键盘钩子吧,尽管细节我也没有完全看明白,但还是能猜出来了。
QQ通过给自己在应用层设置这个低级键盘钩子,并不断脱钩、挂钩,来保证自己在应用层上是最先得到键盘消息的。既然是最先得到了,那么接下来要进行保护就容易了,自然就是先取得正确的按键信息,然后阻止这个消息继续传递下来给别人,就算传下去交给别人,也要修改按键信息,传一个错误的下去。:)

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

收藏
免费 0
支持
分享
最新回复 (26)
雪    币: 688
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
匆匆看了一下。。还是不错的
2010-3-19 13:49
0
雪    币: 115
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
QQ密码保护果然有一手!
2010-3-19 13:52
0
雪    币: 521
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
沙发
学习啦
2010-3-19 13:56
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习啦
2010-3-19 17:22
0
雪    币: 48
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
如果木马也不停地hook,unhook呢,大家都是一样的,谁怕谁啊
2010-3-19 18:21
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习了
好复杂啊
2010-3-19 18:41
0
雪    币: 1849
活跃值: (57)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看了下,有意思
2010-3-19 19:04
0
雪    币: 57
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
真是不错的孩子啊
2010-3-19 22:07
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
能有这样的分析不错了  成为正式会员迟早的事   我还得努力啊  一起加油!
2010-3-19 22:12
0
雪    币: 239
活跃值: (812)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
菜鸟一个,看了也是一头雾水,正在学习中!!
2010-3-19 23:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
N年没来过来,顶一个再说。
2011-4-28 02:51
0
雪    币: 248
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
有点意思,学习
2011-4-28 07:56
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
看了有点点理解了, 支持一下
2011-5-4 06:53
0
雪    币: 158
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
原本是想发几个帖凑个数过几天虚拟币达到了就能买邀请码了。。。大致看了一遍,没想到居然看的懂~~~我承认我兴奋了。。。我也有进化成高手的潜力啊
2011-5-8 12:13
0
雪    币: 362
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
WH_DEBUG 不错
2011-5-18 13:31
0
雪    币: 143
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
牛B啊......
2011-5-18 13:40
0
雪    币: 24
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
对于楼主的分析,我提出几点疑问,我是一名十足的菜鸟,请勿拍砖
1、我们已经知道了QQ使用的两个钩子WH_DBG和WH_KEYBOARD_LL,这两个钩子都可以优先于普通的钩子,我想QQ肯定不会将HOOK到的信息再交给下一级别的钩子了。
2、新安装的钩子的优先级大于之前安装的钩子,无论QQ采用什么样脱钩、挂钩,只要新安装的钩子优先级高,拿到主动权,就直接屏蔽掉QQ的钩子,那QQ得钩子岂不是失效了,不就是没有实施脱钩、挂钩的操作了么
3、楼主的新钩子安装后,按理说优先级最高,可是却是收到了QQ制造的虚假键盘信息,我认为这些虚假信息不应该是 QQ钩子传下来的,我认为是QQ的其他保护措施,不应该是QQ钩子将消息传给新安装的钩子。
我也不知道自己在说什么
可能是我对钩子的认识还不够深入吧
2011-5-18 14:57
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
刚刚做绿盟的题,发现用钩子,又看到这里讲的钩子,还没有编过钩子程序,学习中....
2011-5-18 15:21
0
雪    币: 1644
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
学习思路。。。
2011-8-22 20:37
0
雪    币: 77
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
这个要慢慢学习了
2011-8-23 08:54
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
哈哈,我以前写过键盘钩子钩QQ密码的,的确hook不到。原来是这么个原理,学习了!
2011-8-23 09:24
0
雪    币: 6
活跃值: (1125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
消息钩子很容易绕过
2011-8-23 10:01
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
佩服楼主这种精神,值得一顶
2011-10-14 15:03
0
雪    币: 10072
活跃值: (3008)
能力值: ( LV15,RANK:515 )
在线值:
发帖
回帖
粉丝
25
新手,不知道咋收藏啊
2011-10-17 15:11
0
游客
登录 | 注册 方可回帖
返回
//