QQ2010协议分析系列(一) - 登录之开篇

 QQ 协议不再神秘,现在山寨 QQ 层出不穷,处于个人爱好,分析了 qq2010sp3 协议。现在提供了 Java 版本的 QQ2010 接口,正在完善之中,日后定提供源代码,共同学习。

效果图:



介绍一个 QQ 登录交互过程:

QQ 服务器支持 UDP , TCP 以及 HTTP 等方式,当然还有手机网络协议。至于 UDP , TCP 和 HTTP 是什么东东,

你就去百度吧。在这里我介绍的是 UDP 方式。

QQ 协议采用请求 — 响应的模式, 由客户端主动发起请求,经过服务器检测是否合法,返回一个响应包,每次对于成功响应包都带有一个令牌,令牌的作用是进行下面的请求需要的通行证,没有通行证就不能请求。

此图网上找的,我正好借花献佛,但不是很全面。



客户端  -  就是你或者他  - ( 比如单身男 )

服务器  -  就是腾讯服务器  - ( 比如企鹅 MM)

登录过程  -  单身男和企鹅 MM 约会的过程

步骤一:

Touch(0x0091) ( 括号的是这个过程的命令代码,以十六进制表示的,两个字节 )

Touch 就是预约呗,不然 MM 太忙,你就尴尬了吧。 Touch 的目地干嘛呢,我总结了两个原因,可能更多:

1. QQ 服务器很多, IP 也有很多,那么涉及到一个服务器集群的概念,负载均衡,容错管理等等。 Touch 目的是尝试请求登录,如果此服务器忙,他会返回一个推荐服务器 IP 给你。你再去去 Touch 这个服务器,如果这个服务器还是忙,再给你推荐,直到有不忙服务器为止。

2. Touch 的另一个目的是检查你提交的 QQ 版本对不对啊,应该交由谁来负责啊。如同约会前先问你有房有车没有,是否适合 MM 的要求,不适合的话就没约会的必要了吧。

 

步骤二:

 

验证码检测 (0x00BA)

   你老是要求和企鹅 MM 约会,人家也会烦的吧,但是又不好意思直接拒绝,怎么办呢,要求你买点礼物,带着礼物就和你约会,而且礼物还符合自己要求,不合适的话,也不答应的。验证码在当今就是为了防止恶意提交。 QQ 服务器在以下几种情况提供验证码,不是很全:

1.      同一 IP 地址,频繁登录。

2.      IP 地址异常,以前是北京,突然到了上海,怀疑被盗

3.      恶意登录,这里只的是密码暴力破解,限制登录。

 

步骤三:

密码验证 (0x00DD)

  这是最关键的一步,对于像抱得美人归的单身男们,是个考验啊。说白了就是深入的考察你。这个包里进行了二次 Tea 加密,第一次是随机 16 位密钥加密,第二次是使用你的 QQ 密码的二次 Md5( 运行 Md5 算法两次 ).

步骤四:

校验 0x00BA 和 0x00DD 数据 (0x00E5)

  这个请求是必须的,目地也很简单,是为了确认你之前的令牌是否都合法,如果令牌超时的话,那么这个令牌也算无效,你只能重新登录。 MM 不可能一直等待你,约会时间到了,你没到的话,对不起,你只能下次再约了。

步骤五:

校验 0xE5 数据 (0x00E3)

目的和步骤四一样,但是如果成功的话,返回你的 QQ 昵称,采用 UTF-8 编码方式

 

步骤六:

首次登录需要请求的包 (0x0018)

一般您的好友很多,不可能每次登录都重新读一遍,第一次去请求服务器,或许你 qq 好友号码,群号以及组号,然后存储在本地磁盘上。之后每次登录就不会再请求这个包了,直接读取本地磁盘的信息。

步骤七:

登录验证 (0x0030)

这里是登录的最后一步,能不能请到 MM ,就靠这步了。如果登录成功,你将和企鹅 MM 建立一个专线,就是会话密钥 (session key),  以后的大部分包都采用 Session key 加密 .

步骤八:

心跳 (keep alive)(0x0058)

跟 MM 约会总不能完了吧,要保持联系。此包据我分析,没一分钟发一次。 5 次发送没回应就代表 MM 不理你,也就是你下线了。

以上是登录的所有步骤,详细文档接下来一一具体解析。

 

注意:该说明只做爱好学习,不作商业宣传,更不做恶意破坏,一切责任自负

 

 

posted @ 2014-12-16 22:29  武黄帝  阅读(463)  评论(0编辑  收藏  举报