-原理实现
在上一篇文章中我们,提到了如何获取到sessionkey,如果对此感兴趣的朋友可以自行到[调试逆向]某Qsessionkey查找完整版查看
首先,就是HOOK掉关键传入sessionkey的地方,也就是Common.dll中的Common.oi_symmetry_encrypt2简单的分析一下参数,就可以看到参数中有sessionkey的指针了。
可以说获得了sessionkey基本所有Q的操作我们都可以实现了
简单的分析一下发送的QQ包下面是已经通过sessionkey解的udp数据包
(1)
00000010000000120801120C08
C8A3C3C906
10E30798010008E50F1001220B58
E2D0F3B40D
(2)
00000010000000120801120C08
C8A3C3C906
10E30798010008E50F1001220B58
85F99F9103
(3)
00000010000000120801120C08
E2D0F3B40D
10E30798010008E50F1001220B58
C8A3C3C906
(1)和(2)是相同QQ号发送得点赞请求,那么唯一发生变化得就是对方QQ
(2)和(3)不同QQ号发送,上面得5字节也发送了变化,那么有理由相信这就是我的QQ号
发送包分析完了,那就得求得加密算法了,QQ转16进制,应该是4字节,而到这里就变成了5字节,那这里一定是加密了,到这里我上网查了一些,没自己分析,就不多bb了,等下下载源码自己看看得了(python中有句话叫不要重复造轮子,确实不想造)
至此感觉,QQ协议不过如此嘛,简简单单,东拼西凑QQ点赞器就成了?当然并没有
确实刚做好能点赞,但是当我重新登录得时候,奇怪得事情还是发生了(bug),点赞并没有成功,于是我猜想了一下原因:
原本QQ协议一些参数需要重新获取
源码本身存在问题
已经被tx察觉
发生ip发生了变化
按照这个调bug思路我走了下去,确实问题发生在了ip上
这不就简简单单,内存中搜索一下不就ok了吗?(你看我这臭毛病,总是喜欢自问自答),但是想在QQ中搜到自己想要的数据几乎不可能,于是还是从函数(win32.api)入手吧!
如果想要发送udp的包,那么一定逃不过下面的api
ws2_32.dll.sendto
ws2_32.dll.WSASendTo
事实上我们的想法确实是有效的,F2下断在参数中我们就找到了指向ip的指针,使用抓包工具,看看ip,确实是这个ip,至此我们要的所有条件就完成了。
下节我们讲如何获取最新的clientkey(也就是快速登录)
基本内容
老版本clientkey如何获取的
简单的抓包即可实现
新版本会遇到什么问题
本地发包验证
解决思路
拦截http请求,断点调试
1