QQ协议的研究

一、文字聊天协议族(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作为包尾。

                       

二、解密过程

QQ2013登录过程得到会话密钥需要分析命令字为0x0826和0x0828的报文,解密过程使用16轮TEA算法,过程如下:

1、得到客户端->服务器0x0826报文中的密钥A;
2、用密钥A解密1中报文的密文部分(紧跟着密钥A,一直到结束标志0x03前);
3、用QQ号码与QQ密码一起产生密钥B(MD5(MD5(QQ密码)+QQ号码));
4、用密钥B解密2中得到的明文中的120字节,所得到的明文后16字节为密钥C;
5、用密钥C解密服务器->客户端0x0826报文中的密文数据;
6、在步骤5所得明文中取得密钥D;
7、用密钥D解密服务器->客户端0x0828报文中的密文,所得明文第26字节到第41字节
即为会话密钥。

图片取自王超的博客http://blog.csdn.net/nengx/article/category/1320447

 

三、具体过程

[内为解密后的内容]

1.提取会话密钥

包1:发送登录请求

[2013/10/24 14:51:59:824]

02 34 33 08 25 68 23 0E  82 35 B6 03 00 00 00 01 

01 01 00 00 66 84 00 00  00 00 DB D4 FC 00 6E E4 

B1 6E BE 6A FD 2B E1 34  49 8E 3C D2 FD 78 32 3C 

0B FF C0 67 27 49 17 84  FC BE F4 24 8B 03 B0 F4 

CA 55 E1 70 67 E4 37 2B  A0 60 81 12 20 88 56 08 

D7 91 95 E6 74 8C 1F A2  AF 02 98 C0 B4 C1 CF 35 

C9 C3 56 97 A3 EF 09 15  B3 E4 81 8D 16 44 26 57 

8A 84 17 B9 85 62 F1 8C  72 EF BE 85 BB CA 72 3A 

0C DF D9 94 9B 84 8D 30  CF B7 FC 6E 6C 19 21 E9 

F8 31 03

 

02 // 包头

34 33//版本号

08 25//登录请求命令

68 23//序列号

0E 82 35 B6//QQ号

03 00 00 00 01 01 01 00 00 66 84//固定

00 00 00 00//固定

DB D4 FC 00 6E E4 B1 6E BE 6A FD 2B E1 34 49 8E //临时密钥A

3C D2 FD 78 32 3C 0B FF C0 67 27 49 17 84 FC BE F4 24 8B 03 B0 F4 CA 55 E1 70 67 E4 37 2B A0 60 81 12 20 88 56 08 D7 91 95 E6 74 8C 1F A2 AF 02 98 C0 B4 C1 CF 35 C9 C3 56 97 A3 EF 09 15 B3 E4 81 8D 16 44 26 57 8A 84 17 B9 85 62 F1 8C 72 EF BE 85 BB CA 72 3A 0C DF D9 94 9B 84 8D 30 CF B7 FC 6E 6C 19 21 E9 F8 31//登录请求包的数据

[

00 18 00 16 00 01 00 00 04 33 00 00 00 01 00 00 14 83 0E 82 35 B6 00 00 00 00 03 09 00 08 00 01 78 C4 D4 65 00 02 00 36 00 12 00 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 14 00 1D 01 02 00 19 02 AD 2A 08 94 94 7D 74 68 D4 F1 14 CA 94 40 56 03 03 3A 11 96 B6 47 2E C5

 

00 18 00 16 00 01 //token1  固定的6的长度 这些后续的发包里需要用到。
00 00 04 33 00 00 00 01 00 00 14 83 //token2  固定的 12的长度
0E 82 35 B6 //QQ号
00 00 00 00 03 09 00 08 00 01//固定的数据 

78 C4 D4 65 00 02 00 36 00 12 00 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 14//未知
00 1D //后面29个随机字段,随机填充一些字段增加复杂性。
01 02 00 19 02 AD 2A 08 94 94 7D 74 68 D4 F1 14 CA 94 40 56 03 03 3A 11 96 B6 47 2E C5

]

03//结尾

 

包2:登录应答

[2013/10/24 14:51:59:866]接受回应

02 34 33 08 25 68 23 0E  82 35 B6 00 00 00 C3 B1 

99 E9 0D 9E D3 1E EC E2  C8 0A 5B 1B E7 83 8F 16 

9A 18 60 9F E7 19 42 AB  35 B6 CF 34 95 F6 A4 24 

13 DB 6B 78 D0 39 4C 86  09 50 59 0D 9E 4C 4D 4D 

51 29 4B 1A 1E 83 26 91  84 3B B3 DB 56 BB 57 58 

4C F7 F5 A2 2A 6C C4 19  3E A7 B6 0C F4 80 DC 74 

BA A4 F9 2C CC 1B EE F4  18 6E DD CA 9B 5E 03

 

 

02 // 包头

34 33//版本号

08 25//登录请求命令

68 23//序列号

0E 82 35 B6//QQ号

00 00 00//固定

C3 B1 

99 E9 0D 9E D3 1E EC E2  C8 0A 5B 1B E7 83 8F 16 

9A 18 60 9F E7 19 42 AB  35 B6 CF 34 95 F6 A4 24 

13 DB 6B 78 D0 39 4C 86  09 50 59 0D 9E 4C 4D 4D 

51 29 4B 1A 1E 83 26 91  84 3B B3 DB 56 BB 57 58 

4C F7 F5 A2 2A 6C C4 19  3E A7 B6 0C F4 80 DC 74 

BA A4 F9 2C CC 1B EE F4  18 6E DD CA 9B 5E//加密字段

[//用第一个数据包中的KEY解密之后

00 01 12 00 38 76 B3 3D 6D 39 3E A8 04 AA BD 57 F1 C1 3B 89 D5 CB 8D 75 76 D0 08 62 C1 23 3C 14 01 E5 C7 C3 E0 05 83 88 4D FF 39 93 55 15 5E 9F 2B FD 6C 57 39 EE B7 9A 6B 0A 36 0E 43 00 17 00 0E 00 01 52 68 C3 94 D3 67 23 07 94 42 00 00

]

00//登录成功

01 12

00 38

76 B3 3D 6D 39 3E A8 04 AA BD 57 F1 C1 3B 89 D5 CB 8D 75 76 D0 08 62 C1 23 3C 14 01 E5 C7 C3 E0 05 83 88 4D FF 39 93 55 15 5E 9F 2B FD 6C 57 39 EE B7 9A 6B 0A 36 0E 43

00 17 00 0E 00 01//固定

52 68 C3 94//登录时间(2013-10-24 14:52:04)

D3 67 23 07//登录IP(211.103.35.7)

94 42 00 00

 

包3:

[2013/10/24 14:51:59:894]

02 34 33 08 26 0C B2 0E  82 35 B6 03 00 00 00 01 

01 01 00 00 66 84 00 00  00 00

EC 6C 02 EF 46 5C 7E DD A1 1E F6 73 1E 27 A0 66//密钥A

//密文开始

D5 A0 07 00 E4 86 

63 64 2D 3A 5A 02 EF 59  82 3F C7 E5 6D AD 94 B4 

CE 54 AF 0D A1 56 06 CD  8E 2F B5 F5 64 2C 2A 98 

A9 5D FB B8 30 B7 7C AF  FE F7 68 11 55 E0 44 F1 

1F 09 22 76 17 28 8C 3C  CC 54 50 B3 72 22 13 75 

47 7E 88 95 BD 34 DE C0  3C 15 EA 1C E6 65 64 F1 

EF CE 55 55 CB BE E9 02  30 BC 07 D0 77 03 13 10 

36 53 6A 43 1F A2 D1 D9  32 41 68 22 59 F2 9A 52 

71 E1 12 46 70 62 2B 6E  7D AD 53 A0 87 F6 44 66 

60 86 F0 F5 06 E2 CC 13  00 96 97 92 FD 6A C7 07 

BE 45 03 11 EE 8B 9E E0  58 F4 31 6E 4E 64 60 F9 

08 2C 70 8F E8 87 FC 32  03 0B F9 8B DF AC 82 D2 

91 C4 34 3C E3 68 D5 A4  1D 9A 14 5C 46 79 8B E6 

35 3B 43 D1 19 CD 4F B4  1C 0D C6 05 DC 38 A0 CC 

EB 7A BA D5 58 AC A8 2B  75 1E DF F4 87 D4 14 75 

13 30 3A 5F 12 D9 25 AB  B4 FA DB 6C 67 EE 33 93 

CB FC 25 26 47 56 5F 63  C7 3D 7B 68 E6 6F 88 9F 

7F 87 AE 70 00 F1 3B 5E  C8 42 05 E1 90 E6 DC 15 

35 F4 CC 07 D5 25 36 F6  02 4B 14 ED A3 C6 62 AC 

0A E4 4D 69 13 0E 01 5A  C7 94 6A 70 A8 3B 3D 79 

4E DC 68 5B 54 55 80 26  E2 FE 65 19 CA 01 04 F8 

6C 7C 41 C5 F1 71 2F 19  F7 65 D0 57 18 0B 6D 18 

7F 83 E5 87 89 BB F6 6C  35 81 36 CD A3 D2 58 6B 

94 8C 0F 09 53 47 5E 25  0B E4 DC 58 1A 23 A0 A0 

AE C0 62 D9 13 79 60 FD  A8 6F 33 8E 76 27 2C A3 

33 1F 54 0E 38 A9 E4 8E  EC 94 4D D2 8E 85 BE BE 

87 D0 B1 12 1D E0 E1 68  82 C3 C7 8E CA 42 70 C0 

BD B5 FA 10 04 47 1E 20  ED 3F AA 6D 47 22 F5 AD 

E8 86 D1 74 FC 4D 6C CC  C7 68 4D 24 8E F5 DB B9 

A3 7C C6 E7 6C B6 F8 12  2C F5 31 65 43 AA 85 13 

4A 87 84 99 62 42 E6 B2  EC 47 12 3C 8E FB FD 11 

D1 DB 8C 96 C0 B2 93 95  36 D5 AA 7B 73 DD 7E D9 

B8 79 02 04 0D 36 D3 7E  8A B3 65 3F D1 1D 5E 4B 

91 28 74 24 1D F9 C8 FA  57 24 FC CE BF 55 1F 49 

03 20 84 5F 75 C9 A0 A2  95 88 AB 6C 34 90 1E 58 

17 0D C7 CF EC 84 29 9B  DD 98

//密文结束

03

 

 解密后

[01 12 00 38 76 B3 3D 6D 39 3E A8 04 AA BD 57 F1 C1 3B 89 D5 CB 8D 75 76 D0 08 62 C1 23 3C 14 01 E5 C7 C3 E0 05 83 88 4D FF 39 93 55 15 5E 9F 2B FD 6C 57 39 EE B7 9A 6B 0A 36 0E 43 00 05 00 06 00 02 0E 82 35 B6 00 06 00 78 51 63 DD 6C 16 E5 F6 2F 5F 9B 5B 60 7A B8 BA 54 BA 75 0B 48 C4 D7 F8 F3 2B D9 E2 9A 17 DF 9E C5 A5 48 56 A8 05 46 F1 C9 4A B6 4F 9F 0E BE 86 EF C5 28 D3 C1 EA CA 17 5D 14 DC 85 B2 71 FB 0B 32 4A E4 BE 82 02 85 69 DE DD 8D EA 29 37 4F BC 09 B0 DA 5E 7B FA 17 B5 F3 5A 71 5A 52 50 43 81 4F 8C 8E A0 EC 83 A6 65 83 5F EC 0C C7 B1 86 99 EB 48 5F C2 4C 51 D7 A8 84 00 1A 00 40 C5 48 E7 1F A0 CF C5 6C 88 93 DA EB 3E 8E 35 37 E0 00 34 0D 53 5C 70 BD E4 BD 55 9C 9F A6 D4 89 6F 68 89 E8 AE 89 58 16 FD 0E 34 17 C9 5F 51 FC 07 E0 72 0F D3 61 91 04 08 A7 F8 91 BF 39 23 B0 00 18 00 16 00 01 00 00 04 33 00 00 00 01 00 00 14 83 0E 82 35 B6 00 00 00 00 01 03 00 14 00 01 00 10 31 47 8B 75 03 BA 49 ED 84 DA A3 FF B7 DF CA 16 00 32 00 63 3E 00 63 02 03 05 01 00 00 04 00 5C 13 00 00 00 00 AD 37 5C 14 E1 69 BE EE 44 13 2F 3B 00 F2 F5 8E 03 01 00 00 66 84 14 83 00 00 00 00 00 00 00 00 07 DD 00 0A 00 10 00 01 00 02 00 03 00 00 00 00 00 EB 3D F4 52 A3 9C D0 01 F7 E9 38 EE 88 8F 9C 8A 17 C6 B9 B9 ED 11 F3 48 79 09 50 12 33 C9 5D 83 68 01 14 00 1D 01 02 00 19 02 AD 2A 08 94 94 7D 74 68 D4 F1 14 CA 94 40 56 03 03 3A 11 96 B6 47 2E C5 01 02 00 62 00 01 6E DD 50 A8 BA A2 40 53 83 2C 39 E7 8D F7 51 6C 00 38 D1 F1 54 D5 89 39 71 DF 87 27 32 3C CA 8C B2 F1 53 3B 0A FD 35 C8 0C 3B EC 8F 34 89 EF F8 DB 2A 89 FA AE 69 E4 DE 5F 7F 67 46 9A B7 41 6D 3B D0 46 B0 BE A3 FB 4E F6 06 00 14 39 C6 F3 6C 7D AE EE 0B 4D 0A 5A 84 AF 4E 68 2D 3C 56 96 2D

]

对明文分析

01 12

00 38//0x38=56,接下来的56字节

76 B3 3D 6D 39 3E A8 04 AA BD 57 F1 C1 3B 89 D5 CB 8D 75 76 D0 08 62 C1 23 3C 14 01 E5 C7 C3 E0 05 83 88 4D FF 39 93 55 15 5E 9F 2B FD 6C 57 39 EE B7 9A 6B 0A 36 0E 43

00 05 00 06 00 02//

0E 82 35 B6//QQ

00 06

00 78//7*16+8=120字节数据,需要用QQ密码两次md5所得密钥解密(MD5(QQ密码)+0x00000000+QQ号码)(0E 70 B3 D2 A0 5F BA D8 BD 82 FF F7 B8 4B A1 8D)

51 63 DD 6C 16 E5 F6 2F 5F 9B 5B 60 7A B8 BA 54 BA 75 0B 48 C4 D7 F8 F3 2B D9 E2 9A 17 DF 9E C5 A5 48 56 A8 05 46 F1 C9 4A B6 4F 9F 0E BE 86 EF C5 28 D3 C1 EA CA 17 5D 14 DC 85 B2 71 FB 0B 32 4A E4 BE 82 02 85 69 DE DD 8D EA 29 37 4F BC 09 B0 DA 5E 7B FA 17 B5 F3 5A 71 5A 52 50 43 81 4F 8C 8E A0 EC 83 A6 65 83 5F EC 0C C7 B1 86 99 EB 48 5F C2 4C 51 D7 A8 84

对上述120字节的明文解密后

[

78 F7 E5 E6 00 01 0E 82 35 B6 00 00 04 33 00 00 00 01 00 00 14 77 00 00 01 4F 43 4E 94 E3 45 0C 60 41 E8 BB EB AC 93 EF 8B 52 61 DD 09 01 52 4E B7 78 00 00 00 02 00 00 00 00 72 DB 0B AE 00 00 00 00 00 00 00 00 00 10 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0

29 71 76 3A 72 61 79 68 25 5F 46 75 58 23 28 63//明文最后16字节,作为0x0826返回包中密文的密钥C

]

00 1A 00 40 C5 48 E7 1F A0 CF C5 6C 88 93 DA EB 3E 8E 35 37 E0 00 34 0D 53 5C 70 BD E4 BD 55 9C 9F A6 D4 89 6F 68 89 E8 AE 89 58 16 FD 0E 34 17 C9 5F 51 FC 07 E0 72 0F D3 61 91 04 08 A7 F8 91 BF 39 23 B0 00 18 00 16 00 01 00 00 04 33 00 00 00 01 00 00 14 83 0E 82 35 B6 00 00 00 00 01 03 00 14 00 01 00 10 31 47 8B 75 03 BA 49 ED 84 DA A3 FF B7 DF CA 16 00 32 00 63 3E 00 63 02 03 05 01 00 00 04 00 5C 13 00 00 00 00 AD 37 5C 14 E1 69 BE EE 44 13 2F 3B 00 F2 F5 8E 03 01 00 00 66 84 14 83 00 00 00 00 00 00 00 00 07 DD 00 0A 00 10 00 01 00 02 00 03 00 00 00 00 00 EB 3D F4 52 A3 9C D0 01 F7 E9 38 EE 88 8F 9C 8A 17 C6 B9 B9 ED 11 F3 48 79 09 50 12 33 C9 5D 83 68 01 14 00 1D 01 02 00 19 02 AD 2A 08 94 94 7D 74 68 D4 F1 14 CA 94 40 56 03 03 3A 11 96 B6 47 2E C5 01 02 00 62 00 01 6E DD 50 A8 BA A2 40 53 83 2C 39 E7 8D F7 51 6C 00 38 D1 F1 54 D5 89 39 71 DF 87 27 32 3C CA 8C B2 F1 53 3B 0A FD 35 C8 0C 3B EC 8F 34 89 EF F8 DB 2A 89 FA AE 69 E4 DE 5F 7F 67 46 9A B7 41 6D 3B D0 46 B0 BE A3 FB 4E F6 06 00 14 39 C6 F3 6C 7D AE EE 0B 4D 0A 5A 84 AF 4E 68 2D 3C 56 96 2D

 

包4:

[2013/10/24 14:51:59:941]

02 34 33 08 26 0C B2 0E  82 35 B6 00 00 00 23 CE 

59 67 6F 64 07 05 B1 8B  3D 78 86 A9 24 91 B4 FE 

79 3B 02 5D 28 75 83 AD  28 87 62 58 E7 21 EB 71 

36 ED 65 32 3A D5 AE 8A  9F A3 A6 12 6F C1 06 6E 

7A 5A 49 F5 3D 38 49 2B  18 00 AB 0A 2E 31 A0 8A 

9F C3 BB 21 6B 53 8B 64  AE 40 1E 19 88 9F BE 74 

AF 9F 18 F7 68 1D 2E 81  A4 29 45 F9 C4 71 4A 20 

2B 45 58 72 57 CF E0 58  55 15 92 42 AC B4 33 C0 

20 65 4F 7A F7 85 F4 BE  4D A3 A5 04 F7 21 CA 7C 

A7 A2 92 CD 9D 00 6C 72  DA 03 A4 B0 59 9B 7C 5E 

02 9B 1F FD CC 1E 18 6A  7C EE 87 EC D8 7C B2 E9 

B3 45 99 A0 4C B7 53 1D  5E AD A7 D4 8D E9 E8 5A 

F3 D0 91 D5 42 15 A3 E2  22 6B A2 7C 52 85 EA 20 

27 22 97 A3 AA 78 A5 90  6A 3A 3F 77 FB 8E CF 59 

BE 93 6D 91 A4 5A 0E F5  23 54 C1 99 16 D0 81 69 

99 A4 E5 58 6A CC 8D 7D  F2 72 BD FB D9 CA 50 BC 

A9 A6 FB 97 6E C3 39 20  16 52 87 0F 21 49 01 A8 

C5 AB D8 E7 D3 31 AE 3D  BB EE 3D 5C DB 21 4F C5 

A5 5B 68 DB 74 B9 5A 4B  98 12 6F E5 A7 5A A4 B4 

F5 99 FA A1 41 F9 C2 4F  D1 3C B0 8B 31 15 EE 36 

12 7C 90 5F 8A E7 EC DA  8D 22 DF CE 3E A8 3E 25 

D4 5C 35 C7 D2 EA 03

 

02 34 33 08 26 0C B2 0E  82 35 B6 00 00 00

//用上面得到的密钥解密该密文,解密后以[3F 01 09 00 93 00 01]开头,暂时不清楚作用,但明确解密后无法得到密钥D,跳过。

若无法解密,则此处为异常状况,所以QQ重新发送了0x0826包,我们将中间的包跳过,直接到第二次发送0x0826包处

 

包5

//对包进行解析,发现所得到的密钥与上面一样,直接跳过

[2013/10/24 14:51:59:996]

02 34 33 08 26 0C B3 0E  82 35 B6 03 00 00 00 01 

01 01 00 00 66 84 00 00  00 00 C6 51 9A 71 81 86 

0C 29 77 88 94 23 0C 81  C5 7F D2 02 14 85 94 AA 

3E 4A 95 A2 0B 4F FE 89  F6 2E F8 35 26 AF 12 3D 

8C AD 3F 9A DD C4 8B 72  1E F1 18 7D 8F 21 AA 78 

9C 6D B4 8E 86 7C FD 17  D2 18 84 7A AE 19 A9 18 

31 98 94 10 6F 12 A6 A5  F3 B0 3D 82 8D 93 E1 75 

97 CE 07 19 5B 81 4C A4  EA 74 0D 76 29 B9 3D 98 

10 6B 1D C6 AB EE 07 7D  D9 98 57 69 8E 79 FF 64 

B5 72 88 F6 42 46 89 EF  33 F4 CD 09 10 DB 52 E0 

9B EC 0E 34 25 0A 95 69  9F 83 20 24 15 A0 3D 49 

07 CE 4B C6 D0 9F D8 FA  D3 96 B0 F0 6D E6 EB 1B 

A0 C2 2A FB F0 61 F6 ED  83 73 23 64 4B FE 66 3D 

30 37 00 72 04 50 75 35  02 B2 73 38 F3 22 43 5D 

AB 5A 5A C0 2E 0E 95 29  65 3C 09 DC 53 39 11 37 

28 F7 3F F9 24 30 03 1F  CB 1C 53 36 ED 79 82 20 

78 E1 5C 41 F8 58 77 E1  21 6D 78 6D B5 C0 84 3C 

76 F1 A3 83 D8 DA 86 3E  9D C1 CC 95 E4 E5 81 36 

6A 3E 33 25 51 43 11 08  04 7F C0 2D 40 50 CC 5E 

8D 42 E0 F6 13 0F 21 95  07 CD 45 26 6D 9A D1 B9 

4F A3 2D EA 44 33 96 9E  AA B8 47 53 76 A2 3B 99 

37 8D 57 B2 7C 8D C3 EE  86 B4 1D 24 69 D7 07 22 

27 D7 94 16 ED 5C 5D 5C  DD F0 A2 A7 7B A7 E5 71 

2D 41 AC C1 61 75 01 F1  F1 E2 D8 FA ED 7F FE C4 

86 4A CA C2 2E B1 91 39  83 3D 89 2A FF 0A 80 CF 

2E BB 08 16 9C 4A 10 72  34 59 4F FB 0D 26 57 C9 

F9 52 7B 3E A3 53 B4 BC  A2 3B 83 97 2C 28 99 FC 

6D 46 D7 64 4B D3 BA 4B  B8 26 52 BC CB 9D BF 57 

71 D4 49 97 77 0B 1B B9  14 DF B5 31 E4 AB CA 45 

B4 3B 40 1A CE 36 8F 13  0D A2 90 04 75 9F 56 B8 

28 94 4D A7 D9 CD BB 98  80 AC 3E FD 5E 33 24 B7 

D1 45 A9 12 90 6F AA 82  BC 90 D1 D1 6C 69 B7 DE 

59 AB 56 E8 D9 BD 73 24  A7 3C 74 1F C1 D7 B5 2F 

7F 6C 2F F3 99 1D 03 55  08 3E 59 E7 61 D5 B6 BA 

3A B5 22 E6 47 94 E0 07  5F 6D CC 92 8C 31 5C CA 

7E 53 71 67 39 94 FA 27  DF 9C BF 09 FC E1 BC 73 

5D 71 5C A7 3A AB 5F 71  B2 73 2A F3 A2 0A B1 CB 

8A 5B 20 7B DC 86 52 49  BC 5E 4F 3F AE DE CD 03 

6B 0D F4 B4 3D 8B 22 CF  39 4A E5 FA 58 EF 4A C6 

44 D0 46 F5 D3 76 79 57  37 A9 2A A3 DB 29 22 45 

DB 29 C2 84 4D DA 24 C4  CF 4D B1 C7 44 D9 12 B7 

2B 86 02 76 81 90 81 6A  78 5F 9E A6 22 6A 05 17 

C8 38 ED B5 EF 72 0A 00  0F B0 A1 F6 83 85 4E 6A 

2D AD 73 CC 80 D4 58 25  26 35 2F 68 70 7A 8A 6F 

26 BE CD BC 6D C3 DF 21  91 7D 16 C7 0B 80 4F 12 

3D E3 5E 64 E1 2B 80 6E  B0 00 31 AB 6C 93 A9 FF 

ED 59 8A 9F 32 06 F5 D8  1C FB 14 43 2A C6 9C 77 

86 7F 76 F3 F7 A3 88 97  09 69 E2 25 6C 1B D7 68 

62 DB AF 11 10 D4 FA BA  5C 4C 5C 74 C1 3D 30 F5 

9D 8C 03

 

包6

[2013/10/24 14:52:00:037]

02 34 33 08 26 0C B3 0E  82 35 B6 00 00 00

//密文开始

36 4D 

A1 C8 18 A3 FD 73 B0 F6  68 17 31 E5 CF CF 96 FD 

EA 7E 4B CE 24 62 B0 D5  F6 C9 CB A4 E2 A5 38 D9 

02 2C A9 14 C4 15 16 D0  C1 B3 47 9F 06 34 82 B8 

82 7F 54 01 BF 26 73 19  62 6B 2B A5 22 8F AD 38 

8D 8F F1 9B 37 01 55 FE  8F 69 B6 CA D8 1F 74 3A 

79 3A 72 43 5A ED EC 8C  CF 0B 68 53 5C 99 EC B3 

6B 5B A9 BE F6 A7 79 D0  2A 5C A7 F9 59 E3 03 0A 

31 A9 1E 42 3B BF 6C 97  AB B0 72 67 00 4B D8 EC 

E0 31 2F EF AA D9 D8 BB  F6 70 EA 61 28 0F CC 4C 

91 20 75 F2 BA 40 2B 9A  FE BD B7 11 DC C4 D6 2C 

D7 5B 89 E1 0C 1E BF 47  35 D4 D2 9B 8B 3E 47 34 

B4 53 D2 8F 55 58 74 59  A4 A8 9F 1C D9 5B AE 3D 

58 5A 0B 19 A9 5C 68 7E  D4 30 A1 50 E9 B1 E7 FB 

19 CB E9 A0 45 39 05 74  08 C0 1F C0 78 5B E9 60 

88 86 96 10 13 9F 40 88  19 3B 6F 03 9B 42 9B 3C 

88 C1 F2 5B DB 92 45 DF  2E 40 7D 32 10 0E 7C B8 

85 FA 65 82 FB D6 C6 82  33 48 12 2F 0C A6 C8 A8 

18 B4 0E D1 F0 40 68 53  C2 BC 9F FA 71 17 D6 D4 

63 AB EC F1 AC 70 B0 B7  4E 77 2E 50 DC 76 EE F1 

D6 DC AB FF 84 A2 B3 DC  75 5A 1B C9 13 B6 86 03 

95 C6 FF 64 53 B3 3E 9D  5E B2 1B 45 64 E9 87 86 

F6 63 AD CC AE 9F 2A 1F  EE A6 32 BF 64 73 D9 BF 

0C B6 69 04 2D 42 B1 E4  56 FA D5 E0 EC EB 9D 92 

21 97 93 93 CC 08 66 3F  80 FF 8A E5 68 5C 0C 72 

EE E3 BB E0 EE 22 BE E5  17 E6 6E 8A 72 5B 7A 89 

B9 5B 66 30 F1 4B 68 F1  E1 09 6E BA 29 59 C0 78 

80 C1 44 65 4C 67 8F 02  14 86 A9 61 5C 77 08 EF 

85 4D BB 9A 2F 16 38 7B  33 68 0C 10 9A 50 2C 56 

01 E3 94 EC 69 7A 48 3E  7E DC 29 B7 1F 1A 2A 63 

07 97 AA 64 9C B5 FF 77  FD D1 AF E3 71 84 51 A9 

A4 DA D3 9F F6 70 4F 80  6A C2 56 83 8A F2 B8 AA 

80 66 FB 47 DE 1B 76 5E  81 E6 2A CB 53 36 2D FA 

EF 21 26 9B 0B 54 C8 E2  C3 A6 F3 EF 43 F3 01 BA 

F7 3D 83 03 76 4D 58 AE  40 B7 D2 6A 38 8F D0 C0 

DA 8E F5 1D EF FC 7D 70  B6 47 39 25 97 5A 69 82 

F3 D8 C4 06 63 5A 0F C0  E7 74 02 D8 F8 38 49 05 

7E 27 6A 04 47 2C E3 71  38 9A C7 11 5F 00 E5 34 

2F 85 B0 1C 47 58 55 88  88 9D F6 F3 45 06 51 EA 

14 DC 0C 30 74 05 EE 82  29 97 76 DA 9B 98 CC 72 

4E C4 C6 74 B8 E9 9E A2  89 E1 DF 83 47 3A CC BC 

A2 80 BE 06 4F 28 1E CB  82 95 53 6A 86 DC B6 74 

BB CB 40 D5 CD 05 5E FE  C5 59 F5 04 C8 A7 26 39 

13 32 C2 90 E0 DA 4A BE  CC DB 0D 4B 98 89 BA 17 

CD B5 FD B8 12 07 92 79  17 74 53 5F 3B 9A 74 30 

E8 01 B8 70 09 C2 72 EB  F1 75 9E B2 51 3B

//密文结束

03

 解密后

 [

00 01 09 00 93 00 01 65 67 6E 76 54 42 34 63 79 52 64 69 58 7A 59 33 00 38 BC CB B5 B9 25 AB D4 E9 11 8A 87 38 F8 49 40 D0 6F AE 44 B0 63 57 9F 35 08 1E C6 50 60 B6 8B A4 59 B5 5F F9 3C 38 A0 3D B5 56 F8 FC 2C FF F9 48 9C 06 D5 77 D0 F8 B5 40 00 20 2A BD 1A 87 63 69 7B 6F AA CD 3C 46 D4 CE CE 94 A4 FB 0A 45 80 7C 98 77 8F DB E1 B6 C1 2C 8F 27 00 23 02 00 20 F3 5B E4 F4 76 7F 23 C4 96 03 EF 66 6C 72 EA 90 A1 8E FA 26 FB 4A 39 FC EA DD 7E FD 3E E1 96 03 01 03 00 14 00 01 00 10 31 47 8B 75 03 BA 49 ED 84 DA A3 FF B7 DF CA 16 01 07 01 D3 00 01 00 16 00 00 00 01 00 00 00 64 00 00 0D B0 00 01 51 80 00 00 00 3C 00 02 //固定88字节

5A 57 53 74 25 61 5F 50 3B 60 61 3B 29 4D 51 72 //得到密钥D,用来解密0x0828返回包的密文

00 88 00 04 52 68 C3 94 D3 67 23 07 00 00 00 00 00 78 B8 F3 C7 AF ED 5B 2C B7 FA A8 4B 73 8F C0 CA DE 2D E3 F9 B1 1E 68 28 7E F0 3E C2 91 A4 83 74 DB E1 06 E2 E4 55 19 74 39 32 C9 B1 B2 28 D5 FC 88 27 19 DA 56 81 F2 71 E8 B8 43 94 FE 9C 2B F4 17 CB DA B7 3D 06 96 90 21 04 55 66 CE 95 09 34 E1 31 53 97 3A 94 32 5C B5 5B 1D 5B BF 9C 1E CC 55 22 F9 0C 0F AA EE F1 BE 32 0D 07 26 AD 1C 27 87 A6 E8 0A D0 93 4E FD 15 43 68 54 44 4D 2B 55 67 65 75 75 4A 3B 63 7A 74 00 78 00 01 52 68 C3 94 00 70 23 DE F6 7E 7A A5 29 6D 85 27 45 C9 EB 57 EC E8 7E 20 F1 54 E7 4E C9 E2 D0 64 A0 E9 45 8B AA E0 90 42 3C 27 D0 46 CA B5 B7 37 AB C3 80 E6 64 C3 DA A6 9F 8A EF 51 91 7B D2 5D 1D CF 7B C1 88 FA 89 AE 41 3C 06 BF AD 87 86 82 32 16 7D 26 4A 14 1A 47 D0 70 B5 AF 92 44 68 8E D3 53 6A EB CE D4 BA A8 AA 93 60 88 47 D3 C9 F8 FC CD A1 56 50 96 00 83 01 51 6E 3B 3E 4D 3E 2B 6B 49 43 79 2A 2D 3E 39 57 00 70 00 01 52 68 C3 94 00 68 3C 74 D5 CF 2C 1A 42 31 A6 CF 32 1B BE E1 46 8E F9 A8 E9 01 4C 4B 4B C2 E9 A9 62 6C 7D 1B AB 0C 53 78 A0 60 9B 2F 3D F3 DA A3 61 5C F3 E8 44 3D 3A 55 79 7C B7 F6 A4 86 F5 71 ED 7E D0 E7 B7 A1 5D F0 20 2B A9 75 3F A1 CC B4 A6 E2 35 93 2E 93 74 77 CC 91 EC 1D 1A 2D 10 CD 6F 05 C6 49 54 21 D2 62 DA 61 E0 63 21 56 4B 77 7B 28 4B 4B 69 54 6D 75 36 67 50 24 75 36 01 08 00 21 00 01 00 1D 00 15 01 29 0C E5 B9 BB E3 81 AE E9 9B B7 E5 85 89 01 03 88 02 46 15 00 04 00 00 00 01 01 15 00 10 43 26 A3 2E 10 39 8A 45 92 1E B1 85 BB 4A B1 5E

 

]

获取的第二个0x0828包

[2013/10/24 14:52:00:339]

02 34 33 08 28 6B 89 0E  82 35 B6 00 00 00

//密文开始

14 01 

98 20 CB 2B 2E EF 83 A6  46 8C 08 11 97 BF BD 43 

CD DB C7 06 41 43 AC 93  5A 18 E3 F8 A9 56 47 34 

E7 40 89 18 71 F4 8A 0F  61 82 CF DA E3 33 20 67 

CD 65 F5 30 CE 1D 0D BC  AC 35 E7 E8 1C FE 60 D4 

CD 3F 53 35 C9 02 3A 38  C9 26 7F 9C 6F 0A 79 72 

DE 4E 30 69 68 3E E3 F6  36 29 7E 07 5D AD 1C 76 

45 83 0D 51 96 A6 62 BC  B7 96 DD C0 BF EF D3 C3 

3C 6A F5 23 49 99 E4 35  08 E1 75 AD 4B 7E 90 9B 

9D FF 27 65 F1 23 D4 CF  7E BA 3C BE 6C 5E A4 8F 

97 07 98 51 86 DA 15 02  C9 40 A9 5A 8D EC 64 4D 

04 BE 40 CB 11 B6 84 D5  FB A5 73 C2 27 9A 94 EA 

D8 3C 60 F4 99 66 9C AB  B7 18 51 9B BE B3 82 33 

D5 30 B8 64 3C F9 3F 62  3E 83 6A 65 22 E6 DC 8B 

D6 D2 25 FC 12 1D E2 C2  D8 7B 81 B1 E7 2B D6 1D 

8D 37 A0 1F E9 D1 AD ED  BD FD D7 08 C1 7D 2F 3D 

CD 79 7D BD 32 C2 BE 5B  8D 57 12 26 B0 58 81 F7 

BC 96 B2 AC B0 7F D9 A3  C1 6D 0D 11 05 B9 F6 A6 

A6 8A 0B 5D 3B 9B FE BC  08 BC 94 BE DA 3E F3 5F 

5C AC 51 55 D8 53 1C 25  5D F1 4E 08 86 B5 50 93 

8B DC D4 41 0E DC 6E C2  04 D8 0C 08 EC DA E8 3B 

92 AE F2 64 38 4E E9 80  78 85 97 79 C6 73 6E ED 

3F F1 FC E2 04 CD 51 44  31 E9 B2 8A 56 E0 BC 56 

F0 C7 73 45 3C 33 0B 63  F8 A1 F2 B0 CB DD F4 60 

84 D0 94 EB 5C 9B 66 E8  90 80 13 1F 2A CF C7 E0 

BE 4F 35 28 06 CF 81 B5  C5 66 9C 75 5A 4F BB 5D 

12 00 ED EB AB 0B B1 40  87 E1 64 B7 BB CC 03

 

[

00 00 0D 00 06 00 01 00 00 00 00 00 14 00 04 00 01 00 3C 01 0C 00 73 00 01

72 43 49 71 64 7A 49 78 6D 79 61 64 37 59 4E 71//会话密钥,以后用来解密,一直持续到QQ下线

0E 82 35 B6//QQ

D3 67 23 07 94 42 52 68 C3 94 00 00 00 B4 03 78 C4 D4 65 B7 3C 13 90 00 00 00 07 00 30 AA 1C 4E A4 96 21 6A 64 A1 51 30 69 41 65 36 DE 2D 13 73 5B 2B D1 FC 47 78 F1 BC 56 DB 8A A4 C1 7F 80 45 FA F4 44 CA C6 F7 64 90 A3 CA 0D 7C C1 08 02 04 08 08 08 08 08 04 00 05 01 78 C4 D4 65 01 0E 00 56 00 01 00 52 03 88 42 46 40 C6 11 00 00 18 E6 8A 5D 29 3E 4B 28 3B F4 5B 2C 65 73 2F C2 48 6B F1 92 3F 0B CE ED 28 00 20 BA 72 7B B2 46 6F 86 9F 52 76 17 5C 0E FA E6 19 DC 5A C2 04 C9 3A 4B D9 C0 CF 51 15 40 DA 76 88 00 0C FF FF FF F3 04 00 50 00 C0 07 20 C0 00 2F 00 2A 00 01 8F FE 4F BB B2 63 C7 69 C3 F1 3C DC A1 E8 77 A3 DD 97 FA 00 36 04 40 EF 11 7A 31 02 4E 10 13 94 02 2C 00 00 00 00 00 00 01 0D 00 2C 00 01 00 28 FF 06 29 2F 6F 27 53 EC BC 61 A9 D8 6F EF D8 0A DF A7 F5 72 7A 0E E5 63 47 C8 32 03 F3 9A 08 81 67 2F 63 02 DF DF E1 9A 01 05 00 49 00 01 02 03 00 15 02 00 01 03 10 09 A0 0F 53 26 02 96 DC CB 51 25 77 FB 28 30 56 00 15 02 00 01 03 10 09 A0 0F 53 26 02 96 DC CB 51 25 77 FB 28 30 56 00 15 02 00 02 03 10 BB 63 9B 49 ED 2D 64 C2 17 C6 D1 13 72 F1 C7 36

 

]

这样,就得到了会话密钥。

2.解密会话

QQ发消息:
命令字:00CD
数据来源:客户端->服务器
明文格式:发送者(4B) 接收者(4B) 0x64字节 数据大小(2B) 实体数据
备注:一次发送数据过大时,分多个包,结束标志疑似0x64字节中
      倒数第三字节(00表示结束)

QQ收消息:
命令字:00CE
数据来源:服务器->客户端
明文格式:发送者(4B) 接收者(4B) 0x84字节 数据大小(2B) 实体数据
备注:一次发送数据过大时,分多个包,结束标志疑似0x84字节中
      倒数第三字节(00表示结束)

 

//发送

[2013/10/24 15:13:27:167]

02 34 33 00 CD 04 82 0E  82 35 B6 02 00 00 00 01 

01 01 00 00 66 84

//密文开始

51 88 7E 31 4B 68 39 88 66 13 9F B3 80 BA 89 A8 21 18 25 94 C7 3C CC 5B 75 F2 3C AB 5B DC 5E 11 31 2B 35 D3 23 DB 12 89 70 19 FB 8D 43 D2 A5 A6 F8 92 49 31 8D DE 2D 6D CD FB F1 EC 6D 27 23 9C 91 94 D8 29 2A C4 5A 37 AB C2 6E B1 36 13 F4 51 E3 97 EA B7 EF DE B3 2E EB 60 FE 30 78 2C F3 C1 FA 52 BA C9 8A 4A 29 E0 64 61 9E 61 71 96 89 48 87 9F 1D 67 F2 C5 8D 65 C3 BA 88 F8 91 CC 89 2F 05 93 7A 52 20 4F 80 FF AA 14 DA 53 56 66 AA 1F 05 D6 AA 1D F0 37 F0 9F C1 30 32 0E CF 8B E3 AD BD 2F 00 A9 F4 CF E5 BF

 03

[

0E 82 35 B6 30 EE 1B BA 00 00 00 08 00 01 00 04 00 00 00 00 34 33 0E 82 35 B6 30 EE 1B BA 16 C6 7F 91 CE 89 34 92 37 41 EC 81 63 EA 62 80 00 0B 29 F9 52 68 C8 9C 01 29 00 00 00 00 01 00 00 00 01 4D 53 47 00 00 00 00 00 52 68 C8 9C C8 F6 80 CB 00 00 00 00 0F 00 86 31 00 0C E5 8D 8E E6 96 87 E6 96 B0 E9 AD 8F 00 00 01 00 27 01 00 24 E5 8F 91 E4 B8 AA E6 B6 88 E6 81 AF E8 BF 87 E6 9D A5 EF BC 8C E6 B5 8B E8 AF 95 E4 B8 8B E8 BD AF E4 BB B6 08 00 08 01 00 05 08 1B 27 00 00

]

0E 82 35 B6//发送者

30 EE 1B BA//接受者

00 00 00 08 //0x08=8

00 01 00 04 00 00 00 00 //8

34 33 //版本号

0E 82 35 B6//发送者

30 EE 1B BA//接受者

16 C6 7F 91 CE 89 34 92 37 41 EC 81 63 EA 62 80 00 0B 29 F9//20

52 68 C8 9C //时间

01 29 00 00 00 00 01 00 00 00 01 4D 53 47 00 00 //16

00 00 00 05 68 C8 9C C8 F6 80 CB 00 00 00 00 0F 00 86 31 00 0C

E5 8D 8E E6 96 87 E6 96 B0 E9 AD 8F //字体,华文新魏

00 00 01 //表示发送的是文字,00 00 02是表情

00 27 //大小24+3

01//固定,像是分隔符

00 24//送数据大小

E5 8F 91 E4 B8 AA E6 B6 88 E6 81 AF E8 BF 87 E6 9D A5 EF BC 8C E6 B5 8B E8 AF 95 E4 B8 8B E8 BD AF E4 BB B6  //实际发送数据,UTF-8编码格式,内容“发个消息过来,测试下软件”

08 00 08 01 00 05 08 1B 27 00 00//应该是炫彩字体信息

 

//接收

解密后(另外一组数据)

1F DA 49 64 //发送者QQ

0E 82 35 B6 //接收者QQ

00 0E 9C 4C 0A 8B 0C 6F //8

1F 40 00 A6 00 00 00 20 00 05 00 02 00 06 00 06 00 04 00 01 01 07 00 09 00 06 03 E9 20 02 85 90 00 0A 00 04 01 00 00 00 0C 17 //42

1F DA 49 64 //发送者QQ

0E 82 35 B6 //接收者QQ

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0B 62 BE//20

52 6B 2F E8 //时间

00 00

52 6B 2F E8 //时间

01 00 00 00 00 4D 53 47 00 00 00 00 00 //13

52 6B 2F E8 //时间

4D 8E 3F 83

00 00 00 00 09 00 86 02 00 06 //10

E5 AE 8B E4 BD 93 //字体

00 00 01 //发送的是文字

00 07 //大小 4+3

01 //固定

00 04 //大小4

31 32 33 34 //文字内容

 

附上工具:抓包工具:http://yunpan.cn/Q9wgsXp8KrGIa

              QQCrypter:http://yunpan.cn/Q9j7aZc2wBKwk

posted @ 2013-10-28 21:26  幻の雷光  阅读(5444)  评论(3编辑  收藏  举报