本帖最后由 lgh520 于 2020-5-1 11:04 编辑
QQ点赞器-原理实现
首先,就是HOOK掉关键传入sessionkey 的地方,也就是Common.dll 中的Common.oi_symmetry_encrypt2 简单的分析一下参数,就可以看到参数中有sessionkey 的指针了。
可以说获得了sessionkey 基本所有Q的操作我们都可以实现了
简单的分析一下发送的QQ包下面是已经通过sessionkey解的udp数据包
(1)
00 00 00 10 00 00 00 12 08 01 12 0C 08
C8 A3 C3 C9 06
10 E3 07 98 01 00 08 E5 0F 10 01 22 0B 58
E2 D0 F3 B4 0D
(2)
00 00 00 10 00 00 00 12 08 01 12 0C 08
C8 A3 C3 C9 06
10 E3 07 98 01 00 08 E5 0F 10 01 22 0B 58
85 F9 9F 91 03
(3)
00 00 00 10 00 00 00 12 08 01 12 0C 08
E2 D0 F3 B4 0D
10 E3 07 98 01 00 08 E5 0F 10 01 22 0B 58
C8 A3 C3 C9 06
- (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如何获取的
- 新版本会遇到什么问题
- 解决思路
|