PS:以后也不会码字码的多精美了,纯粹写出来记录一下,写给自己看。
众所周知腾讯QQ的电脑客户端可以提供一个叫ClientKey的东西让用户可以不需要输入账号密码直接在浏览器上快速登录自己的QQ账号,从一开始使用的SSO快速登录控件(OCX控件)来支持快速登录功能,到之后改成了QQ客户端本身监听4000左右的端口让网页访问localhost来获取ClientKey,这个快速登录的安全性就一直被人诟病。
直到最近几个月,不知具体从何时开始,第三方编写的程序去模拟浏览器访问127.0.0.1:4001网址来获取key数据登录的方法失效了。
简单来说就是腾讯在QQProtect程序中加入了某种安全检测功能,当某个程序访问本机的4001端口时QQProtect会检测该程序是否是合法的,合法的比如是谷歌浏览器、IE浏览器甚至可以是PC微信客户端,即可通过检查并且正常使用快速登录功能。不合法的,比如自己编译的程序,比如Fiddler抓包工具(在Fiddler开启时浏览器的快速登录就会失效,因为此时快速登录的请求实际上是由Fiddler代为提交的,因此QQProtect会视为不合法)都会被视为不合法访问请求,然后QQ主程序QQ.exe中会直接中断TCP链接。
如何解决呢,实际上是否执行断开连接操作的关键代码处于模块PreLoginLogic.dll中,简单的定位方法是,搜索字符串“OnQDResponse: stop ptlogin detect timer”,找到引用该字符串的代码位置,然后往下看,找到一处连续判断某个变量的值是否为3、2、1的代码块,让变量的值永远等于1即可。
关键点特征码:83 7D 18 03 0F 84 CA 00 00 00 83 7D 18 02 0F 84 9D 00 00 00 83 7D 18 01 74 0D