前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QQ协议深度解析(一)

QQ协议深度解析(一)

作者头像
月萌
发布2020-06-12 18:28:51
7.8K1
发布2020-06-12 18:28:51
举报
文章被收录于专栏:月萌

介绍

本篇文章主要讲述PC QQ协议的入门和腾讯的迷惑操作 Warning:如果没有一定协议基础看此类文章会觉得很魔幻

注意:PC协议

UDP or TCP

QQ协议是分为UDP和TCP的,一般情况下我们以UDP为标准,因为官方也是大部分使用的UDP。

为什么会大部分使用UDP?UDP传输不是不可靠吗,那么我的消息不是会出现丢包,然后看似发出然后实际丢掉的情况?又或者因为非阻塞导致消息顺序异常?

噗,实际上腾讯也是不会这么傻的,于是在协议中整了点魔法,非常有意思的是原理类似的还有未来技术Http3(Quic) 颇有此番风味

魔法

那么刚刚说到的魔法是什么呢? 传统所谓的可靠性传输是基于网络传输协议层面 当然我们可以在应用协议层整点加个包序加个验证的hash或者返回一个包确认 噗 如果你没彻底了解tcp和udp 你可能会问 这种有什么用呢 感觉更麻烦了 实际上UDP不需要服务端握手 直接一次性完成 而且还是暴力型 不排队那种 完全不清楚谁先发出 然后我们的TCP就比较文明了 需要敲敲门 握几次手 还要排队进去 这样发出顺序很清楚 然后我们按照腾讯的方案是怎么样的 就是给UDP的包加个序号 然后让他们发出 这样包序就不会有问题了 关于不可靠性 仅需一个返回包或者一个hash校验就行。

正片开始

选择UDP 然后我们来理理腾讯的过程 xxxx包是指腾讯给每个命令一个特殊的标记 长度2字节 未指定服务器 解析腾讯域名 获取IP 0825包 发现 Say Hello 0826包 验证账号

0825包 一切的开始 均衡负载

点击登录的一瞬间会给服务器发一个0825包链接服务器 发这个包就问候服务器 Say Hello 问他能不能让我进去 如果不能,就告诉QQ 我不行了 人太多了 你去下家服务器 我告诉你那服务器 IP okok 经过几次服务器的交接 我们找到一位能行的的服务器 接下来就发送账号和密码了(发送0826包)

提示

以下包为转载的 由于太忙 分析QQ请用工具抓包后hex(16进制)下分析 QQ和IP转16进制算法可自行百度 腾讯包以tea魔改算法加解密 版本号早已不同 包内有些固定的东西

0825 发送包

02 //包头 腾讯所有发送的数据包都是以这个开头

2F 35 //版本号 QQ版本不同。这个东西也会变

08 25 // 命令 首次跟服务器接触发送滴。。

4B B1 //序号 这个东东是随机的 。。。 随机生成这个就可以了。

39 80 8C 2C // QQ号的HEX 转换过来就是 964725804

03 00 00 00 01 01 01 00 00 65 A6 00 00 00 00 //这个是固定的。。具体啥么东西,不清楚

3E 59 4A DF 55 04 B1 AD 22 33 9F B3 E1 C3 CC D7 //这个是随机的tea key 软件里随机生成就可以 -------------------------------------------------------------------------------以下就是经过 tea key加密后的数据了

39 16 78 35 92 0F 3D 37 95 4C 7C C8 8E 26 5C E6 D4 D9 47 C0 EE 30 08 94 BE 08 AC 8C 14 C8 CD 1A 90 CF 7F 01 AE 8D 55 75 51 56 D9 A7 92 6B A0 C6 79 00 BF 99 47 06 8F 5C D9 2C 6B 97 C9 D4 AE 79 C1 31 1B AC A6 0E 5F 9C

----------------------------------------------------------------------------- 以下是经过tea key解密后的数据

00 18 00 16 00 01 //token1 固定的6的长度 这些后续的发包里需要用到。所以要记下来,好方便后面组合

00 00 04 11 00 00 00 01 00 00 12 91 //token2 固定的 12的长度

39 80 8C 2C //这个是QQ号

00 00 00 00 01 14 00 19 01 01 //固定的数据

00 15 //这个呢。下面数据大小 16进制的15 换成10进制就是21 下面刚刚好是21的长度

03 2A 37 9C 8E 0B 74 A2 F1 E5 47 56 0B 02 CE 2C D0 0A 83 9E D2 //这21的长度是随机的。随便生成


03 //包尾 腾讯所有发送的数据包都是以这个结尾

0825 返回包分析

02 2F 35 08 25 4B B1 39 80 8C 2C //前面的和上面的意思一样。这个是QQ的返回包

00 00 00 //用固定的 00 00 00隔开了

--------------------------------------------------------------------------------以下是加密数据,用发送的那个tea key解密

30 10 39 3F 8B 13 9F 79 36 24 8A 07 78 25 94 C7 2C 50 D1 2A 3D B1 54 5E 19 8C 93 EA 10 4E 5E 99 80 96 C0 D0 39 39 6C 14 D2 53 D9 35 C4 95 4A 3B 60 94 80 9C F8 B5 D9 8B DC 65 D6 3F C1 6C DA 10 4A A3 9A CC BA FB 98 44 6B B2 91 53 7F A8 94 A0 11 38 BB EA 8B 89 22 1B 51 94 87 1B 77 22 00 EE EB 43 EE E1 7B 9F 4F E0 F8 10 20 66 DC 97 E6 A5 EA D4 F4 DD 02 A5 3C CA -------------------------------------解密出来的数据

FE // 服务器IP需要中转..。。。其实根据接收的数据包大小就可以知道。需要中转的话 接收的数据包是135的长度,不需要的话是111的长度

01 12 // 固定 00 38 //0038的token 38的10进制是56,下面56的长度后就可以是下一个命令了,这些数据在 0826包都需要

D8 62 09 42 21 5C FE 51 C6 E6 07 C6 0A 3A 2A 7F 7B 50 E0 86 A3 0F 7E 10 FB A4 04 E6 DA 6E 9B BF 19 CA 64 52 2E 27 FB B0 9C 68 A0 4F BA 6A EC 9B 24 F4 F3 14 BF A1 D8 5F

00 17 00 0E 00 01 //固定了

50 F2 C9 3F //这个是连接的时间 2013-01-13 22:48:31

7B B6 90 44 //偶的本机IP 123.182.144.68

BD 0B 00 00 00 0C 00 16 00 02 00 00 00 00 00 09 00 00 00 00

70 5A 54 65 //中转的服务器IP 112.90.84.101 这里把解密出来的IP地址直接放到socket的IP设置那里就可以了,

00 00 00 00 00 00 !--------------------------------------------------------- 03 //包尾

0836包

那就下篇文章啦

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • UDP or TCP
  • 魔法
  • 正片开始
  • 0825包 一切的开始 均衡负载
  • 提示
  • 0825 发送包
  • 0825 返回包分析
  • 0836包
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档