QQ协议分析

一、 概述

QQ是目前流行的及时聊天工具,QQ协议非常庞大,版本升级比较频繁,而且与多数软件不同的是,它的客户端升级往往伴随着协议响应的改变。本文是基于QQ2008版的QQ协议分析。QQ消息是加密的,QQ的加密解密用的是TEA法,几乎无法破解QQ消息内容。但是可以根据QQ包头和协议格式识别QQ数据。

QQ支持TCPUDP传输,经过观察基于UDP可以用端口再根据协议特征方式识别;而基于TCPHTTP方式可以根据协议识别QQ数据。

二、 QQ协议分析及数据特征

QQ协议有多种包头,每种用途分别代表一类用途的包,但不是所有的包都有包尾,以下是一些存在的包头包尾的格式:

包头包尾包头之后的固定格式说明
0x00

· 发送方QQ版本,或者是服务器版本,2字节 

· 随机密钥,1字节,如果这个字节是0x23,那么密钥就是0x23232323,这个密钥用来加密发送者和接受者的QQ号。加密算法: QQ号取反再与密钥异或 

· 发送者QQ号的加密形式,4字节 

· 接受者QQ号的加密形式,4字节

0x00系列的包,用在文件传输过程中,传递控制信息。也会出现在点对点通信中。
0x020x03

· 源标志, 2字节,表示了这个包从何处来,主要用来标识客户端版本,如果其标识的是服务器,这个字段的具体用处还不清楚 

· 包命令, 2字节 

· 包序号, 2字节, 原则是保证短期内这个序号不要重复就可以,一般我们处理的时候都是递增,到最大再归0

0x02系列包主要完成一些基本任务,基本上处理了这个系列的包,QQ的功能就差不多了。
0x03格式同第一行0x03系列的包,用在文件传输过程中,传递数据信息
0x040x03

· 客户端版本号,2字节 

· 整个的包长,2字节 

· 序号,2字节 

· 我的QQ号,4字节 

· 未知的8字节

0x04系列的包,用在文件传输过程中,如果使用服务器中转模式传送文件,则用到这些包
0x06未知未知 


根据抓包分析, QQ UDP 数据的服务器端口号总是在 8000 端口,而且 UDP 数据符合上述表格描述。下面是 2 UDP 数据包,其中服务器端的端口号为 8000

1

00 1b 0c ce 5b c9 00 1d 72 9a 8e 1d 08 00 45 00

00 67 0f 87 00 00 80 11 ed da c0 a8 22 34 3a 3d

20 0b 0f a0 1f 40 00 53 9d b6 02 01 00 00 00 38

05 3d e2 54 00 00 6a 23 01 00 12 37 80 21 ae 29

fe 9f 91 b0 23 48 8d 12 39 8e 5f e9 76 14 80 69 

04 1c f1 69 70 6b cf 04 71 66 92 e6 ea 24 41 63 

02 54 3a aa e8 17 5e 6b 27 a3 99 2a 18 29 e5 fb 

51 64 93 d7 03

                          -------------------------------------------------【02开头,03结尾】

2

00 1b 0c ce 5b c9 00 1d 72 9a 8e 1d 08 00 45 00

00 59 0f c1 00 00 80 11 c1 9a c0 a8 22 34 77 93

0e c9 17 71 1f 40 00 45 5f 7a 03 50 32 b0 00 00

00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 01 00 00 12 37 00 00 00 00 00 00 00 00 00

00 05 00 05 3d e2 54        

                          -------------------------------------------------【03开头,无结尾】         

                             

在用Ethereal抓包过程中发现有些8000端口的UDP数据包,有0x02包头但没有0x03包尾,但它确实属于QQ数据,不知道是什么原因。

根据观察,QQ除了使用UDP通讯,还与TCPF服务器通讯,而且与TCPF服务器的通讯量远远大于UDP通讯量。文本聊天就是这一类型,下面就简要介绍TCPF协议。

TCPFText Chatting Protocol Family)文本聊天协议族,它主要支持与其它QQ端进行文字聊天,TCPF是建立在UDP协议上的协议族。

TCPF格式为:包头+数据+包尾。

包头:所有的TCPF包的前七个字节是包头,包头可是识别包的内容,包头格式为:

0个字节:TCPF包标示:0x02

1-2个字节:发送者标识,如果是0x01 0x00,表明是由服务器发送,客户端的标识与所使用的QQ版本有关

3-4个字节:命令编号。

5-6个字节:命令序列号。

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

在包头和包尾中间的数据分为以下五类:

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

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

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

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

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

具体TCFP包结构请参阅QQ协议分析之TCPF包结构.htm文档。

Ethereal抓包发现存在大量TCPF协议格式的QQ数据走的是80端口的HTTP方式。下面是一个HTTPTCP流的16进制数据:

00 3e 02 12 37 00 91 26  64 05 3d e2 54 32 b8 c2 

bf a4 d2 65 4b e9 8e d5  4f 23 51 74 f6 64 55 d2 

57 d3 d9 64 78 77 77 ef  ed cc 78 67 db 00 de 12

a0 12 b1 82 96 1c 8b c0  c8 53 a9 4d 83 03

下面介绍QQ传送文件数据包。文件传输是建立TCP连接之上的,其格式是包头为0x04包尾为0x03,其包的格式如表1所述。下面是用Ethereal软件抓取的文件发送包的某个部分:

04 12 37 00 68 00 01 61  83 05 3d e2 54 00 00 00 

00 00 00 00 00 00 38 3a  4c a0 8e 74 d7 b4 3a d1 

c7 67 8f c4 16 69 9f 44  f8 ae e8 68 5a c2 ca 0c

bf 48 86 26 2c 85 b8 ab  ae d2 b1 f9 a8 6b b8 92 

a3 a9 bd 51 38 ca d7 ae  ce c3 f0 64 c4 a8 db a5 

9b df c1 9f cd 65 35 41  0d 12 8c 2a dc 25 0f a1 

64 83 4e b9 92 91 5d 03

还有一种文件传输情况不符合上述规律,在传输文件的包中前几个字节是:

04 12 21 …

或者是 27 00 00 00 00 14 00 00 00 00 01 05 (需要记录这组会话的IP地址和端口号,之后这组会话之间的数据就是QQ文件传输数据)

三、 总结

综上说述,QQ数据具有以下特征,UDP数据具有固定端口8000,并且数据格式如上述表1中讲述。TCP数据有两类一种是是基于HTTPTCFP包格式的文本聊天数据,其特征可根据TCPF包的包头和包尾特征识别,另一种是文件传输,可根据数据包的特征识别数据。

以上分析包含QQ文本聊天、登陆、登出、文件传输等大部分QQ数据,QQ还有一些未知的协议无法得知。

此外由于版本问题,不同QQ版本可能QQ数据有所不同。



http://wenku.baidu.com/view/f2f5eba9d1f34693daef3e1b.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值