zoukankan      html  css  js  c++  java
  • 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 不理你,也就是你下线了。

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

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

     

  • 相关阅读:
    RESTful
    Node.js Express 框架
    Node.js Web 模块
    Node.js Path 模块
    JavaFX输入并显示字符串
    JavaFX手眼协调小游戏(赋源代码)
    JavaFX作业七参考
    管理运筹学(Additional Simplex Algorithm)
    JavaFX15.4 ( 创建一个簡单的计算器 ) 编写一个程序完成加法、减法、乘法和除法操作
    JavaFX移动小球
  • 原文地址:https://www.cnblogs.com/wuhuangdi/p/4168250.html
Copyright © 2011-2022 走看看