QQ协议分析
一、 概述
QQ是目前流行的及时聊天工具,QQ协议非常庞大,版本升级比较频繁,而且与多数软件不同的是,它的客户端升级往往伴随着协议响应的改变。本文是基于QQ2008版的QQ协议分析。QQ消息是加密的,QQ的加密解密用的是TEA算法,几乎无法破解QQ消息内容。但是可以根据QQ包头和协议格式识别QQ数据。
QQ支持TCP和UDP传输,经过观察基于UDP可以用端口再根据协议特征方式识别;而基于TCP的HTTP方式可以根据协议识别QQ数据。
二、 QQ协议分析及数据特征
QQ协议有多种包头,每种用途分别代表一类用途的包,但不是所有的包都有包尾,以下是一些存在的包头包尾的格式:
包头 | 包尾 | 包头之后的固定格式 | 说明 |
0x00 | 无 | ∙ 随机密钥,1字节,如果这个字节是0x23,那么密钥就是0x23232323,这个密钥用来加密发送者和接受者的QQ号。加密算法追龙演员表: QQ号取反再与密钥异或 ∙ 发送者QQ号的加密形式,4字节 ∙ 接受者QQ号的加密形式,4字节 | 0x00系列的包,用在文件传输过程中,传递控制信息。也会出现在点对点通信中。 |
0x02 | 0x03 | ∙ 源标志, 2字节,表示了这个包从何处来,主要用来标识客户端版本,如果其标识的是服务器,这个字段的具体用处还不清楚 ∙ 包命令, 2字节 ∙ 包序号, 2字节, 原则是保证短期内这个序号不要重复就可以,一般我们处理的时候都是递增,到最大再归0 | 0x02系列包主要完成一些基本任务,基本上处理了这个系列的包,QQ的功能就差不多了。 |
0x03 | 无 | 格式同第一行 | 0x03系列的包,用在文件传输过程中,传递数据信息 |
0x04 | 早安问候语情话大全0x03 | ∙ 客户端版本号,2字节 ∙ 整个的包长,2字节 ∙ 序号,2字节 ∙ 我的QQ号,4字节 ∙ 未知的8字节 | 舒淇的三级片0x04系列的包,用在文件传输过程中,如果使用服务器中转模式传送文件,则用到这些包 |
0x06 | 未知 | 未知 | |
表1
根据抓包分析,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
例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
在用Ethereal抓包过程中发现有些8000端口的UDP数据包,有0x02包头但没有0x03包尾,但它确实属于QQ数据,不知道是什么原因。
根据观察,QQ除了使用UDP通讯,还与TCPF服务器通讯,而且与TCPF服务器的通讯量远远大于UDP通讯量。文本聊天就是这一类型,下面就简要介绍TCPF协议。
TCPF(Text 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方式。下面是一个HTTP的TCP流的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
欧美r级剧情片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数据有两类一种是是基于HTTP的TCFP包格式的文本聊天数据,其特征可根据TCPF包的包头和包尾特征识别,另一种是文件传输,可根据数据包的特征识别数据。
以上分析包含QQ文本聊天、登陆、登出、文件传输等大部分QQ数据,QQ还有一些未知的协议无法得知。
此外由于版本问题,不同QQ版本可能QQ数据有所不同。
发布评论