一、 实验目的:

  在虚拟机下NAT模式下通过Wireshark抓包,分析QQ的传输模式。了解QQ在传输信息过程中用到的协议。分析在Nat模式下,信息传输的穿透性。

二、 实验环境:

  Win7 专业版32位(在虚拟机里面)。

  Win7 旗舰版64位(物理机)

  QQ版本:TM2013

  Wireshark

三、文字聊天协议族(TCPF, Text Chatting Protocol Family)

它主要支持与其它QQ客户端进行文字聊天。TCPF是建立在UDP协议之上。UDP数据包中的第一个字符02为这个协议族的标识。TCPF的服务器使用8000号端口,腾讯的QQ客户端软件一般从4000号端口开始尝试使用,但实际上,对客户端使用的端口号并没有限制。目前的研究集中在TCPF上。

TCPF包结构

对于TCPF包我们又把它分为5类:

1)、登录请求包(LIP,LogIn Packet),它是由客户端向服务器发出登录请求的数据包。

2)、登录应答包(LRP,Login Reply Packet),它是由服务器响应客户端登录请求的数据包。

3)、注销请求包(LOP,LogOut Packet),它是由客户端向服务器发出注销登录请求的数据包,服务器对这个包不作应答。

4)、客户端其它包(CSP,Client Sent Packet),它是由客户端向服务器发送的其它包。

5)、服务器其它包(SSP,Server Sent Packet),它是由服务器向客户端发送的其它包。

TCPF包头:

0)、所有TCPF包的前7个字节是包头,包头可以识别TCPF包的内容。包头的格式为:

1)、第0字节:TCPF包标识:0x02。

2)、第1-2字节:发送者标识。如果是0x01 0x00,表明是由服务器发送。客户端的标识与所使用的使用的QQ版本有关,如:版本QQ2013(8550)的标识为0x34 0x33。具体的协议的格式与这个字段所标识的客户端版本有关。目前我们以这个最新的3433版本来讨论。

3)、第3-4字节:命令编号。具体的命令编号含义在《QQ协议概述》(Protocol Overview.rtf)中有描述。以QQ2013为例,如果这个字段是0x00 0x59,那么这是一个注销请求包。如果这个字段是0x08 0x25,而第12位为 0x00,那么这是一个登录应答包。如果这个字段是0x08 0x25,而第12位为 0x03,那么这是一个登录请求包。其它的命令代码表明是其它包,我们通过发送者标识来区分它是CSP还是SSP。

4)、第5-6字节:命令序列号。客户端和服务器都有各自的当前发送序列号。每初始发出一个指令的时候,使用当前的序列号,然后把当前序列号加一,如果超过0xFFFF,就绕回。如果是响应对方发出的命令,则使用这个命令的序列号。例如,客户端当前的序列号为0x1110,它向服务发送一个0x0016命令,它使用0x1110这个序列号,服务器收到以后,返回一个序列号为0x1110的0x0016命令响应。下一次,客户端又发送一个0x0026命令,这一次它使用加一了的序列号0x1111,服务器也响应0x1111序列号的一个0x0026命令响应。如果这是服务器要向客户端发送0x0017命令,它使用它自己的当前序列号,比如说0x2220,客户端收到以后,也响应一个序列号为0x2220的0x0017命令应答。我们可以通过序列号来判断发出的指令是否已经得到了应答,如果没有,可以重发。服务器对收到的命令的序列号顺序没有要求。服务器也不会一定按照发出的顺序给予应答。

TCPF包尾:所有的TCPF包都以0x03作为包尾。

三、 实验内容:

1、 QQ登录

  1)、UDP登录

  在虚拟机的win7打开QQ面板,设置登录服务器的类型为UDP

  启动wireshark,然后开始登录QQ,登录成功等待一会儿停止wireshark的抓包。

  抓包如图:

  我们可以看到本地向远程登录服务器183.60.48.174发送了一个UDP的数据包,这个就是IP就是在刚才设置UDP登录时的系统默认IP,还可以看到这个IP返回了一个UDP的数据包。看来这两个包就应该是登录验证的包,接下来的几个包的服务器IP变成了183.60.48.165,由于这个IP和登录服务器的IP位于统一网段,因此我们可以猜测这个IP是腾讯用来存储我们发送的信息的服务器。需要注意的是,在多次实验下,可以发现服务器不止183.60.48.165这一个,这是因为想QQ这样的大吞吐量的信息交互,必须用多台服务器分流,所以这个IP并不一定是某一个。下面的一些包应该就是心跳包。那个OIQC协议就是QQ用的协议,其实实际上也是一个UDP包。下面的DNS协议就是因为我的QQ是在虚拟机里面登录的,在向外网交互信息的时候会通过网关192.168.214.2解析。

  我们来分析一下登录时候的UDP包

  从这个图我们可以得知源和目的的IP,mac地址,还有双方的端口号等等一些信息。

  数据链路层:

  目的MAC地址:00 50 56 e3 56 95

  本机MAC地址: 00 0c 29 ba 59 3c

  网络层:

  通过查询资料和分析我们知道:

  45:版本IPv4,首部长度20字节

  00:区分服务

  00-73:总长度175字节

  36-1e:标识

  00-00:标志和偏移

  80:生存时间128

  11:传输协议UDP(17)

  传输层:

  0f-a0:源端口4000

  1f-40:目的端口8000

  009b:长度155字节

  7f-c4:检验和

  QQ的数据

  通过查询资料和分析我们知道:

  02:QQ报文的开头

  34-20:QQ客户端的版本号,实验所用版本为QQTM2013

  08-25:用户请求登陆的命令的序号

  67-dc:发送数据的序号

  56-a6-d2-5c:用户QQ号码,实验中为1453773404

  之后的内容为加密的数据内容

  最后一个字节03:QQ报文的结尾

  2)、TCP登录

  设置如图:

  启动wireshark,然后开始登录QQ,登录成功等待一会儿停止wireshark的抓包。

  抓包如图:

  可以看到几个TCP的包还有一个SSL的包

  对TCP包分析如图:

  通过对UDP协议的分析,我们可以看到数据层和网络层的十六进制代码和之前的一模一样,这里我们就值分析传输层的TCP协议了,如图:

  通过查询资料和分析我们知道:

  C4-5e:源端口号50270

  01- bb:目的端口443

  45-34-fc-63:序号

  00-00-00-00:确认号

  80-02:数据偏移,标志

  20-00:窗口大小8192字节

  7f-3b:检验和

  00-00:紧急指针

  其余部分为可选字段和填充字节

  在TCP协议里面我们没有看到QQ的登录验证消息。为什么呢?一看这里还有一个SSL协议,QQ会不会是通过SSL验证的呢?

  SSL((Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。)

  那么我们来看看这个包:

  02:QQ报文的开头

  34-20:QQ客户端的版本号,实验所用版本为QQTM2013

  08-25:用户请求登陆的命令的序号

  67-dc:发送数据的序号

  56-a6-d2-5c:用户QQ号码,实验中为1453773404

  之后的内容为加密的数据内容

  最后一个字节03:QQ报文的结尾

  可见,这个包的信息和UDP登录时候的一样,那么TCP登录是确实使用了SSL。

2、 心跳消息数据包

  如图,通过IP地址查询,可以知道119.147.45.40是广东深圳的IP,而深圳是腾讯的老巢。在多次的抓包中也可以看到这个IP段,所以我们有理由相信,这个IP段是腾讯的。

  那么我们打开来看看。

  看到这里,确实有很熟悉哦。通过查阅资料和分析我们知道:

  通过查询资料和分析我们知道:

  02:QQ报文的开头

  34-20:QQ客户端的版本号,实验所用版本为QQTM2013

  00-58:用户在线的命令序号

  3b-09:发送数据的序号

  56-a6-d2-5c:用户QQ号码,实验中为1453773404

  之后的内容为加密的数据内容

  最后一个字节03:QQ报文的结尾

3、 收发信息数据包

  对方在线的时候

我们看看第一个包:

  可以看到蓝色字体那里的02是QQ报文的开头,这里需要注意的就是00-cd是客户端向服务器发送消息的命令序号,1b-db是发送数据序号,其他的都一样。通过几次实验发现,00-cd客户端向服务器发送消息的命令序号是固定的,而1b-db发送数据序号是会改变的。而且没每送一个包,服务器是会回复一个包给客户端的。

资料QQ助手方式,关注公总号RaoRao1994,查看往期精彩-所有文章,即可获取资源下载链接

更多资源获取,请关注公总号RaoRao1994

PC端QQ协议说明,完美搞定QQ智能助手相关推荐

  1. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin --------- ...

  2. 成功解决wps文档的论文中插入图片时只显示一半图片(两步教程完美搞定!)

    成功解决wps文档的论文中插入图片时只显示一半图片(两步教程完美搞定!) 目录 解决问题 解决思路 解决方法 解决问题 解决wps文档的论文中插入图片时只显示一半图片,如图所示, 解决

  3. 三星未来系统显示服务器进水了,三星GALAXY S8+进水二修不开机,CPU烧坏要保资料?这都能完美搞定...

    原标题:三星GALAXY S8+进水二修不开机,CPU烧坏要保资料?这都能完美搞定 收到头条粉丝发来的一台三星GALAXY S8+,故障描述为进水不开机,在别的地方修过没修好,说是CPU烧坏了,手机里 ...

  4. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】下 ~ Net程序员的福利...

    上一节我们通过通用封装说了下QQ登录的申请和通用讲解,[开源]简单4步搞定QQ登录,无需什么代码功底[无语言界限]:http://www.cnblogs.com/dunitian/p/5055789. ...

  5. 1分钟搞定QQ号申请

    如果觉得这篇文章对你或者你的朋友有用,请发给你的朋友或者你认为需要这篇文章的人. 本文来自 中国ASP.NET开发网,转载请注明出处. 以前申请QQ号相当的烦琐,步骤多,时间长.今天无意在网上看到一个 ...

  6. 搞定QQ游戏系列(寻仙,DNF等等)驱动保护TesSafe.sys

    1.用RKU看一下SSDT和SSDTShadow,发现SSDT并没有被HOOK,SSDTShadow HOOK了5个调用: NtUserBuildHwndList NtUserFindWindowEx ...

  7. 过NP 系列之一---搞定QQ游戏系列(寻仙,DNF等等)驱动保护TesSafe.sys

    1.用RKU看一下SSDT和SSDTShadow,发现SSDT并没有被HOOK,SSDTShadow HOOK了5个调用: NtUserBuildHwndList NtUserFindWindowEx ...

  8. ChatGPT与VBA:Excel操作一键搞定的全能助手

    摘要 Excel是一款广泛应用于数据处理和分析的工具,而VBA(Visual Basic for Applications)是一种用于编程自动化Excel操作的语言.然而,对于非专业的Excel用户来 ...

  9. profibus dp协议_轻松搞定PROFIBUS故障诊断与排除

    虽然PROFINET已经成为工业自动化中的公认通信标准,但是PROFINET网络的诊断对于许多用户来说仍然是一个新的领域.从传统的现场总线系统向PROFINET的转变带来的重大变化,也是导致新的网络问 ...

  10. 无需代码,1秒搞定QQ和微信多开!

    有很多小伙伴不知道如何在电脑上实现微信多开(一台电脑登录2个及以上的微信号). 市面上流传着很多三方工具来辅助实现在电脑上登录多个微信号.甚至还有略显高端地写几行代码来实现这个功能.虽说条条大路可以通 ...

最新文章

  1. Cygwin运行nutch报错:Failed to set permissions of path
  2. 发现你的身形——OpenCV图像轮廓
  3. oracle服务器错误,oracle 11g数据库维护中错误总结
  4. 『操作系统』 进程的描述与控制 Part4 线程
  5. android取消自动获取焦点,Android 如何让EditText不自动获取焦点 (转)(示例代码)...
  6. 解决Linux系统centos7的开机报错:Welcome to emergency mode
  7. 英语口语120句(zt)
  8. 无人机蜂群拦截系统作战构想与关键技术论文解读
  9. win7已经阻止此发行者在您的计算机上运行软件,win7提示由于无法验证发行者所以Windows已经阻止此软件怎么办...
  10. 『Linux』Ubuntu Beaver(18.04) 配置 美化流程
  11. 如何解决Tomcat下中文乱码问题?
  12. 《es6标准入门》 阮一峰
  13. iOS——调用相册换头像
  14. 【刷题笔记】--lintcode木头加工(java)
  15. 苹果换芯简史:芯片如何改变苹果的电脑产品线?
  16. 二十种题型带你复习《概率论与数理统计》得高分(高数叔)
  17. 他在美国发动一场“战争”,影响全球半导体产业20年
  18. HDU6152-Friend-Graph(拉姆齐(Ramsey)定理)
  19. 关于方差、协方差、协方差矩阵的概念及意义
  20. Linux查看运行的进程IP

热门文章

  1. 数据库关系代数表达式学习
  2. 3dmax测试软件自动关闭,3dmax软件会自动关闭解决方案
  3. Java实习日记(day1)
  4. java 解析证书_Java x509证书解析类
  5. 计算机网络阶段,计算机网络发展的四个阶段
  6. MATLAB激活时填错Windows用户名怎么办?
  7. 单片机学习笔记(五)
  8. R语言ggplot2绘图
  9. 基于TMC4361-超静音闭环步进电机驱动方案
  10. 低压电力线宽带载波通信互联互通技术规范第4-2部分:数据链路层通信协议