阅读:3684回复:8
对qq键盘保护技术感兴趣的一起讨论讨论把
qq从2005beta3版本中加入npkcrypt.sys这个驱动后,就不能用键盘钩子的方式来截获它的密码了,我网上看到有位仁兄说这个驱动中实际采用的是挂接了键盘中断,我用softice,windbg看了好久,也没有发现中断被更改的迹象,哪位对这个方面比较有研究的,一起讨论讨论。
我关心的是qq键盘保护实现的技术,有人直接破坏这个驱动,然后掩盖掉qq窗口中的那个红xx的,来得到密码,虽然方法可以,但是我不敢兴趣,我的目的不是为了得到别人的密码。 有兴趣的朋友加我,qq:71167609,msn,xmzhang@wtwh.com.cn |
|
沙发#
发布于:2007-04-12 12:20
NP的东西而已~挂接方法比较和蔼~
|
|
|
板凳#
发布于:2007-04-17 21:08
版主大人能够稍微说的详细点么?
|
|
地板#
发布于:2007-04-18 00:21
只有QQ得到键盘输入焦点时才修改IDT。
很久以前我写过一点东西,你看过没? http://hi.baidu.com/zzzevazzz/blog/item/e42e2ef4ec6e82ee7709d735.html NP实在是很简单的东西啦。 |
|
|
地下室#
发布于:2007-04-18 09:21
转过来:)
破解QQ2005Beta3的“键盘加密保护技术”2007-04-12 14:06 今天升级QQ,发现登陆界面的软键盘没有了,取而代之的是一个带金锁图标的密码框。试了两个键盘记录工具,原理分别是GetAsyncKeyState和键盘类过滤驱动,发现无效,恩,有点意思,正好用来打发时间。 先看腾讯是怎么吹的:“QQ2005 Beta3采用了国际先进的nProtect键盘加密保护技术,能最大限度地防止用户的密码输入不被病毒、键盘记录程序所窃取,大大提高了QQ用户的帐号安全性。” nProtect是什么?从来没听过。还是老老实实看代码吧。既然能对付驱动级的嗅探,显然也用了驱动。对比QQ启动前后的驱动列表,很容易就定位到npkcrypt.sys。光凭这一点就让我不看好这个功能,这么容易就找到研究目标,设计者的反破解意识实在不怎么样。把驱动改名,重启系统,然后保护功能就失效了!当然,事情可没这么简单,因为这时那把金锁上多了个“禁用”图标,提醒用户保护功能已失效。 明的不行就来暗的——代码级破解。首先看导入函数,用到了IoAttachDeviceToDeviceStack,似乎走的还是设备栈的老路。于是祭出WinDbg查看KeyboardClass0/1的设备栈,居然没有异常,那八成就是挂键盘中断了,导入的函数HalGetInterruptVector就是用来干这个的。列出所有中断向量(WinDbg没有类似SoftICE的idt命令,不爽的很),一眼就发现n个80开头的地址中有个f7开头的,哈,就是它。 再次重启系统,先列出原先的IDT,启动QQ后还原被修改的条目,然后尝试键盘记录,无效。再看IDT,靠,又被改回去了!在这个中断向量的地址上设内存读写断点,只断到了读操作,却没有写操作。但明明就被改回去了啊。郁闷了一分钟之后,我开始看驱动的反汇编代码。从被断到的读操作开始跟踪,我发现读到的值被保存在全局变量里,而所有对这个变量的操作中,几乎都是赋值,只有一个cmp指令,比较保存的值和读取的值,如果不同就关中断,然后修改成QQ自己的中断服务地址(难怪断不到,关中断了嘛)。 到这里问题就算解决了,把紧随cmp之后的jz改为jnz,中断向量再也不会被改回去啦,键盘记录(不管是哪种)当然也有效了,金锁还是老样子。所谓的“国际先进技术”原来只是从DOS时代就被大玩特玩的中断挂钩,钩住键盘中断后直接把ScanCode传给应用程序。如果QQ能绕过Windows的中断映射机制,控制PIC或APIC重新映射键盘中断,那还有点看头。(一个聊天工具而已,至于吗?)当然至于,因为她也许是世界上使用人数最多的聊天工具啊。 详细的破解过程就不说了(我只是打发时间,不是存心和腾讯过不去哦),只说说一字节补丁的位置:npkcrypt.sys驱动模块(文件版本2005.6.22.1,大小20,386字节)加载基址偏移0x14b3,从0x74(jz)改为0x75(jnz),当然键盘中断向量也要还原。还有一种改法更简单,直接在QQ的键盘中断服务入口添加跳转指令,跳回到原服务地址。注意,这些都只是内存补丁,文件补丁比较麻烦,QQ似乎会在加载驱动前先对文件做校验。这就不是我所感兴趣的了,闪人。 2005-11-29 补充: QQ密码输入框失去键盘焦点后,会还原中断向量。再次得到焦点时,又会修改IDT。这个修改不判断原中断向量,与前文说的jz指令无关。具体代码位置是基址偏移0x1e06(cli)至0x1e26(sti)这一段。用jmp指令跳过这段代码,IDT终于不会再被改了。实际破解时,还是在QQ的中断服务入口加jmp的办法简便易行。 2006-01-23 补充:原来WinDbg是有!idt命令的,但自带的帮助文档里没有提到,我只能说——郁闷! |
|
|
5楼#
发布于:2007-04-24 09:50
不过QQ与驱动之间有个简单的加密约定!恢复了0x93中断后虽然能够捕获键盘输入,但QQ收到的密码就是错误的了。想想如果用户经常输入密码都发现密码不正确,恐怕会有所怀疑罢。
|
|
6楼#
发布于:2007-04-27 00:54
挂钩np的中断处理程序后,得到scan code,再还给np就行了。
|
|
|
7楼#
发布于:2007-05-07 05:07
有没有不用破解,直接在更底层获取QQ密码呢,比如说挂钩I8042驱动什么的,
刚学这个,可能说的不对,见谅 |
|
8楼#
发布于:2007-05-29 13:34
把驱动删掉.
删掉驱动后本来提示文字和金锁图标就换成别的了. 在应用层HOOK获取资源的API.把资源编号改过去就行了. 然后直接HOOK键盘消息就行了 |
|