为了了解扣扣的ring3的密码保护技术,然后用于自己的产品之中,硬着头皮一边参考windbg使用手册,一边参看论坛上已有的关于扣扣登陆框的密码保护方面的帖子,在一边查找MSDN(希望自己有三只眼睛
),打开扣扣.exe.然后gu到程序入口点,发现了gdi的的异常不断,根据
http://blog.chinaunix.net/u/8681/showart_1999100.html这里的方法排除了,但是然后在NtUserInput函数下断,但是符号表里面找不到,然后去微软下载了完整的符号表
http://msdl.microsoft.com/download/symbols/packages/windowsxp/WindowsXP-KB936929-SP3-x86-symbols-full-ENU.exe,安装设置完成后任然找不到这个函数.
换OD上场,发现焦点在扣扣登陆的密码框的时候有三个地址被不停的读写中,地址分别为0x03e41001,0x03dc100a,0x03e1100a(可能不同的机器的地址不一样),估计这些地方可能是产生干扰按键消息的地方,然后回到windbg在这个三个地址下访问断点 ba w1 0x03e41001...发现任然断不下来,回到OD,让扣扣加载完所有的DLL,然后ctrl+n查看导出函数和导入函数,也找不到可疑的函数.
以上是我的调试过程.产生以下疑问
.
1._NtUserInput是什么函数,符号表中都找不到,看雪上说是这个函数发送的干扰按键消息.?
2.低级键盘钩子是最先拿到用户输入的(比GetRawInputData还早),但是获得的按键数据是只读的,没有修改权限,通过AKLT.exe发现键盘的按键都被重新映射了,然后我就去找ring3下修改键盘布局的函数,也没找到,扣扣是如何做到的?.
3.没有HOOK api 是如何不让GetKetState...等获取键盘状态的函数失效的?
4.安装的低级键盘钩子,当自己的输入框激活的时候进不了回调函数,但是切换到别的窗口的时候却能进入,我没有用dll,直接在自己的应用程序里面安装的.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课