分析的QQ版本是2013beta3版本的,只是针对于登陆时的一组数据包做的简单的分析!
QQ在登陆过程中,会和服务器进行数据交互,首先就是实用的是0x0825像服务器发送的请求!下面是数据包的内容,
发送的第一个数据包,0x0825
[NO.1 2013-05-08 10:13:59 245 SEND 147字节]
02 32 4D 08 25 1E EC 50 93 A4 A5 03 00 00 00 01
01 01 00 00 66 2C 00 00 00 00 75 1C 6E 17 EF DF
D6 0D C2 87 BC 03 29 B4 4E 3C 00 CF 78 BB 1B 7A
D4 4A 26 68 F6 99 C2 B7 F6 99 08 39 59 D3 46 BE
42 29 AE 0B 3E AC 0D C7 5B 2C 09 EE 10 37 2C C8
A0 CF BF B0 83 6C 99 D4 18 D0 FF 3D 19 98 C8 66
94 74 1F 2D CF 33 C8 85 35 37 E6 FF 66 07 B3 C8
07 2F EB 6F 8A 1E 1A 9E 16 18 64 1F 68 58 52 67
CA A0 12 75 6B 09 DD 4A 5D 9D 81 C1 E7 8B CB F2
10 89 03
报文的解读
02 #包头,所有QQ协议的包头都是
32 4D #版本号,同一版本中不会改变
08 25 #命令字段
1E EC #序列号,随机生成
50 93 A4 A5 #QQ号,需要转换成10进制
03 00 00 00 01 01 01 00 00 66 2C 00 00 00 00 #此字段暂时不理解,是固定字段
75 1C 6E 17 EF DF D6 0D C2 87 BC 03 29 B4 4E 3C #TEA key,QQ的报文采用的是TEA的16轮加密算法!
经过TEA key加密的密文
00 CF 78 BB 1B 7A
D4 4A 26 68 F6 99 C2 B7 F6 99 08 39 59 D3 46 BE
42 29 AE 0B 3E AC 0D C7 5B 2C 09 EE 10 37 2C C8
A0 CF BF B0 83 6C 99 D4 18 D0 FF 3D 19 98 C8 66
94 74 1F 2D CF 33 C8 85 35 37 E6 FF 66 07 B3 C8
07 2F EB 6F 8A 1E 1A 9E 16 18 64 1F 68 58 52 67
CA A0 12 75 6B 09 DD 4A 5D 9D 81 C1 E7 8B CB F2
10 89
解密后报文如下: 这里解密使用的是QQanalyer
00 18 00 16 00 01 #token1(在后面的包0x0826里面会出现)
00 00 04 31 00 00 00 01 00 00 13 D5 #token2 同上
50 93 A4 A5 #QQ号码
00 00 00 00 03 09 00 08 00 01 固定 字段
7B 97 28 47 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) #后面29个随机字段,随机填充一些字段增加复杂性。
01 02 00 19 02 8D 25 57 B1 CF 01 38 F6 0A 8A 08
CD 5C 3D EB 75 50 65 A2 64 80 2D C0 9D
03、包尾
第二个数据包,来自服务器的回应。
[NO.2 2013-05-08 10:13:59 263 RECEIVE 111字节]
02 32 4D 08 25 1E EC 50 93 A4 A5 00 00 00 9F A2
61 9B 89 67 84 B8 B2 93 FE 7C BE 94 A8 A5 25 0F
C1 2B C8 C6 36 EC D4 81 8C DB 0A AE C9 48 33 A1
45 2F BA E6 29 A2 3C E7 41 F3 AD F0 99 56 29 52
61 5E 05 9D FE AB 00 39 E0 EA 4E 78 2C C2 E3 33
7E 03 BD C1 80 78 C6 87 8C A1 BC 58 82 9F 43 5C
19 2E 3F AE A6 B7 92 F8 97 90 D6 24 2D 10 03
02
32 4D
08 25
1E EC
50 93 A4 A5 前面几个,同上,有人就干脆将前面的11字节划分成了包头
00 00 00 #固定
加密字段
9F A2
61 9B 89 67 84 B8 B2 93 FE 7C BE 94 A8 A5 25 0F
C1 2B C8 C6 36 EC D4 81 8C DB 0A AE C9 48 33 A1
45 2F BA E6 29 A2 3C E7 41 F3 AD F0 99 56 29 52
61 5E 05 9D FE AB 00 39 E0 EA 4E 78 2C C2 E3 33
7E 03 BD C1 80 78 C6 87 8C A1 BC 58 82 9F 43 5C
19 2E 3F AE A6 B7 92 F8 97 90 D6 24 2D 10
用第一个数据包中的KEY解密之后
00 01 12 00 38 5E 21 67 6C CE 60 58 6F 43 2A A7
03 03 71 38 8B 2A 73 6D 4B E9 C7 6F 46 C7 1A 9E
71 50 F6 29 BB 2C E3 F3 A9 24 05 89 41 2C 17 FE
B2 F0 5D 1D FE BF 0F CE B3 89 77 76 9D 00 17 00
0E 00 01 51 89 B4 E6 7C CD B6 62 0F A0 00 00
00 登陆成功
01 12
00 38 (56) 这个在后面的0x0826里面也会有的
5E 21 67 6C CE 60 58 6F 43 2A A7
03 03 71 38 8B 2A 73 6D 4B E9 C7 6F 46 C7 1A 9E
71 50 F6 29 BB 2C E3 F3 A9 24 05 89 41 2C 17 FE
B2 F0 5D 1D FE BF 0F CE B3 89 77 76 9D
00 17 00 0E 00 01 固定
51 89 B4 E6 #登录时间
7C CD B6 62 #登陆IP
0F A0 00 00
03 #包尾