简单过QQ的nProtect键盘加密保护

谁都知道nProtect是驱动层的键盘加密保护,
但是这个nProtect也不是时刻接管着我们的键盘,仅仅在用户输入密码的时候才真正启动,
而程序是如何获知用户开始输入密码了呢?
用简单的windows编程方法就能想到,就是处理WM_SETFOCUS消息,
一旦某控件获得焦点windows就会发送WM_SETFOCUS到那个hwnd,
而一旦那个控件失去焦点的时候,nProtect需要关闭,否则就影响到用户的其他输入动作了,很明显这就是处理WM_KILLFOCUS消息。

所以,当你发现某控件获得焦点的时候,你可以无耻的冒充windows发送WM_KILLFOCUS消息,这样nProtect就自动退出保护啦~~~
当然会有其他问题,就是那个Edit控件接收到WM_KILLFOCUS后一闪一闪的光标也停掉了,这个问题有兴趣的自行解决~~~~~

或者用其他的思路,比如你的程序直接冒充qq向它的驱动发送退出保护的消息?这需要调试他的程序来了解是发送什么消息,
我曾把他的内存中的那个消息的值给patch了然后发送个WM_KILLFOCUS叫它退出保护,然后再发送个WM_SETFOCUS,让那个控件又呈现正常的输入状态。
可是它获得WM_SETFOCUS消息后想向驱动发送开启保护的消息已经让我patch了,于是保护一直没启动。

以上是很早前我测试过的,

写这个代码的时候还记得个有趣的猫腻~~~~
郁闷我获得的密码框控件句柄总是不正确,可明明就一个可视的具有密码风格的edit控件啊~~~~~
原来,还有个透明的。何苦呢~~~

在获得正确的密码控件句柄后下面这点代码读取密码效果还不错
asterisk = (char)SendMessage(hPassWindow, EM_GETPASSWORDCHAR, 0, 0);

PostMessage(hPassWindow, EM_SETPASSWORDCHAR, 0, 0);
SendMessage(hPassWindow, WM_GETTEXT, sizeof(szPass), (LPARAM)szPass);
PostMessage(hPassWindow, EM_SETPASSWORDCHAR, asterisk, 0);

由于计算机速度太快了,人眼发现不到异常

......

在qq2007刚出来时我又好奇的测试了下,发现patch掉开启保护的消息后仍然还捕捉不到正常的按键信息,我高兴的以为是加强了nProtect了呢,

其实不是,可能他是觉得应该再保险点,再加个WH_KEYBOARD_LL钩子,这个是windows的低级键盘钩子,
当QQ的密码框获得焦点的时候nProtect如果没启动的话,那么按键的消息就会给钩子拦截,
貌似qq获得正确按键信息后就用sendinput模拟下按键事件,而这个按键的代码是假的,专门糊弄别的应用程序。

知道这个之后还不简单?
我们给SetWindowsHookEx也Hook一个就行啦。

而且这个Hook还真好hook,这API M$就是准备给人hook的,
大概就是 hotpatch吧,只是win2000下SetWindowsHookEx的首条指令却没有像mov edi,edi的,
但是SetWindowsHookExA和SetWindowsHookExW最终调用的那个内部函数却有,虽不是mov edi,edi,但mov eax,eax也一样~~~
而且定位这个函数还很容易呢~~~

就这样,驱动层的保护在应用层就完全搞定了,

如果用户电脑没安装那些较合格的主动防御软件的话,那么qq这个国际领先的密码保护就似乎形同虚设了~~~

ps: 据说beta3不是那么回事了~~~

 
阅读更多
想对作者说点什么? 我来说一句

卸载nProtect GameGuard 服务

2014年06月26日 95B 下载

上兴远控简单过内存和主动

2009年05月27日 3.62MB 下载

单过路由轻松搭建web服务器.

2013年09月12日 379KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭