http://www.iprotocolsec.com/2012/02/28/qq%E5%8D%8F%E8%AE%AE%E5%88%86%E6%9E%90%E5%8F%8A%E5%85%B6%E8%BF%98%E5%8E%9F%E4%BA%8C/

QQ协议分析及其还原(二)

2012-02-28

上一篇讲到了QQ协议的Header部分,这一篇主要讲密钥生成及其交换的过程。

QQ登陆协议密钥交换过程,首先我们使用Wireshark抓报文分析,观察主要用到的命令字(见上一篇Header部分的介绍)。

QQ2011登陆过程分析
命令字 含义
1、Touch Information(0×0091) 根服务器SAY HELLO,如果对该报文做一些小动作,可以让QQ认为,TX的服务器或网络不能访问…
2、Login Request(0x00ba) 未知,可以不进行处理。
3、Login Verify(0x00dd) 向服务器发送登陆请求,需要使用密码进行运算作为密钥才能机密该报文,解密的报文中包含对第4步的解密密钥。
4、Login get Information(0x00e5) 未知,但是服务器返回的报文你必须得知道,因为这个报文中包含解密会话密钥报文(第6步)的密钥。
5、Login verify E3(0x00e3) 未知,可以不进行处理。
6、Login send Information(0×0030) 客户端向服务器发送sessionKey,使用第4步获取的密钥进行解密。

1、Touch Information(0×0091)

这个报文无需关心,是客户端向服务器在SAY HELLO…

2、Login Request(0x00ba)

未知,在此处并不重要。

3、Login Verify(0x00dd)

非常重要!!获取会话密钥首先得解密该报文。但是要解密该报文,必须得知道该登陆QQ用户的密码,而用户密码只有用户和TX知道,第三方是不知道的(也有可能存在“不可思议”的第三方…)。数据传输过程中使用的加密算法是blowfish,这个算法目前从公开的资料上来说,还没有发现漏洞。因此,要实时获取用户的聊天信息,除非已经知道密码了,或者已经暴力破解了密码(这里简单介绍一下怎么进行暴力破解,这里的暴力破解,当然不是模拟一个QQ客户端不停的向TX服务器发送登陆请求,这样太慢了,而且TX那边也会有记录。首先,得分析出这个报文的密钥生成算法[不是简单的直接使用密码作为密钥],加密算法(这个已知,是blowfish),第二,需要将对方的登陆报文截取保存到文件,然后写一个程序,不停拼接字符串、数字、标点符号进行组合,根据第一步分析它密钥的生成方法生成出密钥,然后作为blowfish算法的密钥,去解密报文,如果解密成功,恭喜你,你暴力破解到了一个QQ密码。但是这种概率比较小,即使有一些,这些号码的价值不大,扯远了…)。

LoginVerify报文的解密密钥生成方法,在QQ2011版本之前,是MD5(MD5(PWD)),对QQ的密码做了两次MD5运算。但是QQ2011版本(包括2011版本)之后,这个算法做了一点修改,就是:MD5(MD5(PWD+QQ_NUM)),这个修改其实是非常有必要的,为什么呢?因为随着硬件技术的发展,以及前些年MD5彩虹表的推出,简单密码的MD5值非常容易就能从彩虹表中找出对应MD5值,从而得到原始字符串密码,即使TX做了两次的MD5运算。在彩虹表的推出或以前(因为我也不知道是在这以前还是以后,呵呵),在执行MD5运算时,就有了加SALT的说法,很形象!加盐,在这里,QQ_NUM就是盐,这样就加大了使用彩虹表破解的难度。

使用密码根据以上的算法得出解密密钥,解密Login Verify报文后,会得到一个新的密钥,这个密钥暂且就叫做verify_key。

Login Verify Reply(0x00dd)

服务器对客户端Login Verify报文的响应,这个报文需要verify_key作为密钥进行解密,得出一个新的密钥-verify_reply_key。

4、Login get information(0x00e5)

客户端接收到服务器的Login Verify Reply报文后,会使用verify_reply_key加密数据发送到服务器,而这里面又包含了一个key – get_info_key。

5、Login verify E3(0x00e3)

未知,此处可以不进行处理。

6、Login send Information(0×0030)

使用get_info_key解密该报文,得到会话KEY – session key。

回想一下:密码是关键,有了密码才能解密Login Verify(0x00dd)报文,解密了Login Verify(0x00dd),才能解密后续的的报文。其步骤是:passwd -> verify_key -> verify_reply_key -> get_info_key -> session_key。

QQ协议分析及其还原(二)相关推荐

  1. QQ协议分析及其还原(一)

    原文网址 QQ协议分析及其还原(一) 2012-02-26 QQ,一个通信工具,号称6亿的用户量,现在每天的活跃账户在1亿以上.在中国,只要是一个经常上网的网民,手中必须得有一个,当然也可以没有,但是 ...

  2. QQ协议分析之TCPF包数据分析

    2019独角兽企业重金招聘Python工程师标准>>> QQ协议分析之TCPF包数据分析 博客分类: 抓包 说明: 本文档说明的是解密以后的TCPF数据包的字段内容.有关如何解密,请 ...

  3. 基于HTTP的QQ协议分析

    1.研究说明 Tencent在tqq.tencent.com的8000有一个使用HTTP的QQ接口,通过这个接口,可以进行一些基本的操作,如:登陆.登出.改变登陆状态(上线.忙碌.离线.隐身).添加删 ...

  4. android qq协议分析工具,QQ协议分析

    QQ协议说明: 协议由报文头(T)+发送者(T)+接收者(T)+报文类型(T)+报文长度(L)+报文内容组成 发送者和接收者是系统内的程序种类,OICQ服务器0x01,传真服务器0x02,WEB服务器 ...

  5. web qq协议分析

    WebQQ网页登陆HTTP接口探究 1.研究说明 Tencent在tqq.tencent.com的8000有一个使用HTTP的QQ接口,通过这个接口,可以进行一些基本的操作,如:登陆.登出.改变登陆状 ...

  6. QQ协议分析的一些思路

    首先,根据网友们的软文,可以知道qq的协议主要是基于tea加密算法的变种,tea算法网上代码很多,随便找一份贴在这里,以方便od调试的时候,知道重点关注那些东西.这是c代码,tea算法是每8个字节为一 ...

  7. 【SDIO】SD2.0协议分析总结(二)-- SD卡识别数据传输过程

    相关文章 <[SDIO]SDIO.SD卡.FatFs文件系统相关文章索引> 1. SD卡操作模式 SD 卡系统(包括主机和 SD卡)定义了两种操作模式:卡识别模式和数据传输模式.在系统复位 ...

  8. android协议分析,【安卓QQ协议分析 】分析带说明

    发送好友消息 数据包 ------------抓包原数据---->> 00 00 01 0C 00 00 00 03 01 00 00 00 2C DD 19 4C 37 98 F8 AD ...

  9. android qq协议分析工具,分析Androidqq协议之收到qq群消息

    16进制 83 02 0A 70 08 FE C0 AC CB 02 10 9E E6 82 11 18 52 20 00 28 B2 F5 0C 30 F6 E3 C6 DD 05 38 D2 80 ...

最新文章

  1. substr()函数——mysql:截取字符串子串
  2. oracle vm virtualbox安装centos并配置Java环境
  3. python语言命令大全-Linux命令大全
  4. 一张图看懂新一代人工智能知识体系
  5. shutil常用语法
  6. django2.2 配置urls(亲测)
  7. mysql双机互备linux成功的_配置MySQL双机热备 - Linux服务器MySQL双机热备份试验_数据库技术_Linux公社-Linux系统门户网站...
  8. Get Requests with Json Data Get Requests with Url Parameters
  9. pyqt5 qwidget 边框_实战PyQt5: 116-画刷类QBrush
  10. 螺旋千斤顶设计大作业_如何正确使用汽车千斤顶,新手司机看过来,老司机教你正确用法...
  11. SolidWorks Simulation热仿真优化设计 提高企业生产效率
  12. H5 LayaAir实现复制微信号到剪切板功能
  13. 支持随时随地一键开会,华为云会议场景适用性更强!
  14. 密码学大作业(共三次)
  15. Office:你的 OneDrive 帐户存在问题?
  16. C语言文件操作+通讯录实现文件操作
  17. Javascript 设计模式之代理模式【讲师辅导】-曾亮-专题视频课程
  18. k-means聚类算法及matlab实现(简单实现)
  19. 拉仇恨!李想靠微博股票赚了两三倍,只有千把万
  20. Launcher3 实现桌面客制化---1

热门文章

  1. Intent对象详解(二)
  2. jsp中c:forEach的应用
  3. 网络爬虫初步:从一个入口链接开始不断抓取页面中的网址并入库
  4. ECMAScript6入门教程(一)
  5. [转]opensuse 更新源
  6. vs中列表分页符代码_电脑办公技巧Excel中Ctrl+K的使用技巧(十二)/Word2016中快速删除分页符与空白页的方法...
  7. excel报表服务器作用,Excel各种图表的应用范围及用途介绍
  8. linux查看docker使用率,Linux系统非Docker环境如何限制CPU使用率
  9. conv2d 公式_TF-卷积函数 tf.nn.conv2d 介绍
  10. ui设计和python哪个容易学_软件开发和ui设计那个容易学?