http://www.cctry.com/thread-146696-1-1.html
最近写个QQPC协议返回当前QQ各种状态的东东。网上很多地方说的都有点不太明白,而且最新协议的也很少,基本都是以前的。苦逼之下借鉴各种资料,熬了几天。终于写出来了。因为只返回各种状态,,所以偶分析到0826这个数据包。后面的也就没分析了。虽然东西不多。。也希望能帮到对这方面有星期的朋友吧。。下面是分析的内容。。 腾讯的数据包都是用的tea加密算法。我们要先解密。。。才能看到真正的内容
搞忘记了。 用到的工具。。 QQCrypter.rar
(163.27 KB, 下载次数: 83)
抓包工具自行选择吧。。
[2013/1/13 22:49:38:144](发送的数据包)
02 //包头 腾讯所有发送的数据包都是以这个开头
2F 35 //版本号 QQ版本不同。这个东西也会变
08 25 // 命令 首次跟服务器接触发送滴。。
4B B1 //序号 这个东东是随机的 。。。 随机生成这个就可以了。
39 80 8C 2C // QQ号的HEX 转换过来就是 964725804
03 00 00 00 01 01 01 00 00 65 A6 00 00 00 00 //这个是固定的。。具体啥么东西,不清楚
3E 59 4A DF 55 04 B1 AD 22 33 9F B3 E1 C3 CC D7 //这个是随机的tea key 软件里随机生成就可以
-------------------------------------------------------------------------------以下就是经过 tea key加密后的数据了
39 16 78 35 92 0F 3D 37 95 4C 7C C8 8E 26 5C E6
D4 D9 47 C0 EE 30 08 94 BE 08 AC 8C 14 C8 CD 1A
90 CF 7F 01 AE 8D 55 75 51 56 D9 A7 92 6B A0 C6
79 00 BF 99 47 06 8F 5C D9 2C 6B 97 C9 D4 AE 79
C1 31 1B AC A6 0E 5F 9C
----------------------------------------------------------------------------- 以下是经过tea key解密后的数据
00 18 00 16 00 01 //token1 固定的6的长度 这些后续的发包里需要用到。所以要记下来,好方便后面组合
00 00 04 11 00 00 00 01 00 00 12 91 //token2 固定的 12的长度
39 80 8C 2C //这个是QQ号
00 00 00 00 01 14 00 19 01 01 //固定的数据
00 15 //这个呢。下面数据大小 16进制的15 换成10进制就是21 下面刚刚好是21的长度
03 2A 37 9C 8E 0B 74 A2 F1 E5 47 56 0B 02 CE 2C D0 0A 83 9E D2
//这21的长度是随机的。随便生成
-----------------------------------------------------------------------------
03 //包尾 腾讯所有发送的数据包都是以这个结尾
[2013/1/13 22:49:38:238](接收的数据)
02
2F 35
08 25
4B B1
39 80 8C 2C //前面的和上面的意思一样。这个是QQ的返回包
00 00 00 //用固定的 00 00 00隔开了
--------------------------------------------------------------------------------以下是加密数据,用发送的那个tea key解密
30 10 39 3F 8B 13 9F 79 36 24 8A 07 78 25 94 C7 2C 50
D1 2A 3D B1 54 5E 19 8C 93 EA 10 4E 5E 99 80 96
C0 D0 39 39 6C 14 D2 53 D9 35 C4 95 4A 3B 60 94
80 9C F8 B5 D9 8B DC 65 D6 3F C1 6C DA 10 4A A3
9A CC BA FB 98 44 6B B2 91 53 7F A8 94 A0 11 38
BB EA 8B 89 22 1B 51 94 87 1B 77 22 00 EE EB 43
EE E1 7B 9F 4F E0 F8 10 20 66 DC 97 E6 A5 EA D4
F4 DD 02 A5 3C CA
-------------------------------------解密出来的数据
FE // 服务器IP需要中转..。。。其实根据接收的数据包大小就可以知道。需要中转的话 接收的数据包是135的长度,不需要的话是111的长度
01 12 // 固定
00 38 //0038的token 38的10进制是56,下面56的长度后就可以是下一个命令了,这些数据在 0826包都需要
D8 62 09 42 21 5C FE 51 C6 E6 07 C6 0A 3A 2A 7F 7B 50 E0 86 A3 0F 7E 10 FB A4 04 E6 DA 6E 9B BF 19 CA 64 52 2E 27 FB B0 9C 68 A0 4F BA 6A EC 9B 24 F4 F3 14 BF A1 D8 5F
00 17 00 0E 00 01 //固定了
50 F2 C9 3F //这个是连接的时间 2013-01-13 22:48:31
7B B6 90 44 //偶的本机IP 123.182.144.68
BD 0B 00 00 00 0C 00 16 00 02 00 00 00 00 00 09 00 00 00 00
70 5A 54 65 //中转的服务器IP 112.90.84.101 这里把解密出来的IP地址直接放到socket的IP设置那里就可以了,
00 00 00 00 00 00
---------------------------------------------------------
03 //包尾
[2013/1/13 22:49:38:144](给中转过后的IP发送0825包)
02
2F 35
08 25
42 0A //这个应该是上面的序号+1才对 不过不知道肿么回事,我这里刚刚出了一堆中转。呵呵
39 80 8C 2C //qq
03 00 00 00 01 01 01 00 00 65 A6 00 00 00 00 //以上的就不分析了啊。。根据上面的看就知道了
E6 F0 06 96 1A E0 CB C4 5C FA 20 1B 98 C4 84 EE //重新随机生成的tea key
----------------------------------------------------------------------------加密数据 用上面的key解密
56 F0 09 B9 F5 D6
79 7D 2B 8F 18 79 F6 54 75 8D 6C BA CD C4 BF E0
8E 14 00 0B 92 67 DF D6 20 F7 EE 77 EC 84 1C 18
0B 2F B7 34 67 83 4B 5E B9 70 F8 FC 51 63 04 52
9D 05 5C 21 58 14 AA E4 2F 4D 69 13 E2 1D ED 78
91 C4
---------------------------------------------------------------------------以下是解密数据
//是不是很熟,这个就是第一次发包的数据,其实下面的都是和第一次一样的。重发了一遍而已
//所以捏。。偶就不解释了。。
00 18 00 16 00 01
00 00 04 11 00 00 00 01 00 00 12 91
39 80 8C 2C
00 01 00 00 01 14 00 19 01 01
00 15
03 2A 37 9C 8E 0B 74 A2 F1 E5 47 56 0B 02 CE 2C D0 0A 83 9E D2
---------------------------------------------------------------------------
03 //包那个尾
[2013/1/13 22:49:38:191] 其实呢。这个包的大小是111的,也就是说不需要中转了哈。
02
2F 35
08 25
42 0A
39 80 8C 2C
00 00 00 //以上都是一成不变的东东。
-------------------------------------------------------------------加密那个数据
06 11
B7 37 D9 EA 80 DE CC FB 88 89 D8 A2 60 70 18 57
5C 85 CB 64 92 82 33 3C D8 A3 FA B7 AA B4 28 C1
DB 07 0B 41 3F 9B 3E CD E8 55 42 4A 33 50 34 99
2B 41 68 7A E4 36 D9 4B F5 DC 7F 07 5E 0A 84 90
7F 63 49 EA 26 BC 06 6C D9 81 99 70 FF 9F E3 85
CA 84 3F A2 CD 32 4D 48 E2 F0 C1 06 11 8E
-----------------------------------------------------------------------------解密那个数据
00 //接触成功了。
01 12 //还是这个,,固定那个固定
00 38 //56长度的token 后续要用的噢。。
0B B4 8E C1 91 63 37 83 EF 7D 01 C2 73 D0 84 42 C2 2A 95 4E 63 6A 0E 82 D4 CF 65 87 46 67 F3 20 AD D1 49 42 94 3F 31 17 27 91 0C 38 90 82 6E 81 D0 8F CB 8E 41 B6 C9 45
00 17 00 0E 00 01
50 F2 C9 3F //很明显的时间。。
7B B6 90 44 //偶的IP地址
BD 06 00 00//其实。接收的包。记住一些下面的包需要用的数据就可以了。没用的像这些随机数据直接不用记
-----------------------------------------------------------------------------
03 //包包的尾部
[2013/1/13 22:49:38:207] // 发送的包 0826了喔。。这个返回的是各种状态了
02
2F 35
08 26
2D F3
39 80 8C 2C
03 00 00 00 01 01 01 00 00 65 A6 00 00 00 00 //以上的东西。老样子。看第一个包的分析就知道了
2D 1A 48 4E 3C 62 52 CC 30 7B 66 B2 50 E2 1A 14 //0826 随机生成的tea key 或者叫随便生成的
-----------------------------------------------------------------------加密数据咯
F5 CC 47 E7 C8 8D
91 6E 11 E8 D3 41 34 DE 00 F8 05 DA 71 AB A1 67
70 2F 11 00 08 22 FA 94 DE 63 B5 74 EC 83 70 21
0A 7A 9B 83 EA 6B EC 5E 96 39 A5 2C 31 D8 D1 DE
25 53 7B CB 89 E8 DE C6 94 EA DF C9 55 61 B9 EA
E6 DC 06 92 69 A1 71 FA EE 93 1B 05 D8 13 FF 8E
2F 81 34 13 6A D4 8B B4 86 FC 80 DE F5 F3 9B 93
8E 48 F9 59 17 F1 44 B9 A8 66 FB 38 6B BE F5 FE
5B F4 FF 9B 0F 18 8D 13 20 0F E7 74 50 C4 C9 3F
51 84 1B 54 E8 06 61 76 A7 34 7D 3E AD 2D 2D 9A
6D A0 9D C2 30 D3 90 E1 9C B5 00 16 89 75 87 3D
B0 8D 37 FA C5 2C 1C BD 79 38 0E 3A A0 E9 04 34
20 54 4B 5F A6 33 52 AC F4 40 92 25 FE 66 AC F0
3B D1 FE CC FB 4E CF 6E 0D 23 1B A1 A9 63 70 8B
23 4B 75 C7 55 A9 5D B8 E7 C1 D6 DC EA A5 32 1C
81 30 CE 79 29 3B 83 21 87 84 20 80 5F 40 19 DC
4E E0 31 54 BF F6 03 69 D8 36 69 E7 DF A3 66 C5
35 85 7F CD BA EC 64 6D F0 04 47 49 7C EE 2A 63
8D 43 AF B6 18 DA 07 47 D2 B5 4B 34 D8 2D 7D B0
B4 BC 2C B8 0B 67 87 40 76 F0 54 29 04 41 DD CC
71 B6 01 40 70 1B E1 0B D7 4D 87 B1 73 4A 5B 49
EE 87 14 93 EE 76 17 E2 94 19 84 BA F0 5F 0E 82
89 69 E3 4B 9F 0E 7F F0 1D 18 94 EB AF EA BB 01
2B D6 D0 7D 63 32 E5 5B D7 F5 61 F7 7D 94 EE 74
31 87 F0 A9 61 8C 04 5B FB D9 E9 F3 B7 7E A2 69
80 A1 BB E6 72 83 01 63 92 9C BB 03 B6 C6 17 86
E9 1C 47 B1 98 C0 F4 5F E5 96 53 FC A8 E4 65 3C
A9 E1 2F 7B DC 62 BB 4A AF 39 71 9F E1 8D BE DD
E2 E5 99 06 08 53 87 72 1B 4C 84 5D 1C C2 56 81
E7 0B
-------------------------------------------------------------------------以下是解密数据 真多啊
01 12
00 38
0B B4 8E C1 91 63 37 83 EF 7D 01 C2 73 D0 84 42 C2 2A 95 4E 63 6A 0E 82 D4 CF 65 87 46 67 F3 20 AD D1 49 42 94 3F 31 17 27 91 0C 38 90 82 6E 81 D0 8F CB 8E 41 B6 C9 45
//////////上面的数据眼熟么,中转过后,0825包接收到的,这个包就当头给发出去了貌似就是令牌的意思吧
00 05 00 06 00 02 //固定这么几个字节。。。数据也是固定的
39 80 8C 2C //然后 QQ号
00 06
00 78 // 78 是16进制的,,10进制是120.。。也就是说。下面有120长度的数据时一个分水岭。噶
//。。这个也是加密的。解密的方式是QQ密码的一次MD5+00 00 00 00 +QQ号的hex
6E 44 7B 20 42 41 CE 47 9C 6C 25 F5 BD 06 48 54 47 7A 20 F9 19 8B CA AC 77 AD 6E 00 11 72 1D 67 08 CC CF BD 64 1D 68 DC 86 A6 DC 17 69 38 C6 90 5C 6D D9 A8 80 C7 D4 A3 16 B4 9A B2 5E B8 8C 0E 18 66 A6 C3 7A D8 80 86 97 67 64 87 FB FA FE 60 65 F0 E5 47 18 11
44 05 1D 7E B5 50 74 97 6B A7 7D 85 26 08 25 A4 43 1B 88 C8 39 A7 92 85 48 26 52 2A 1B 15 C8 33 F3 D0
------------------------------------------------------------------------------00 78的解密数据
4E 8B B4 0A //刚刚开始时4的长度,,随机的。。
00 01 //固定的
39 80 8C 2C //qq号
00 //固定
00 04 11 00 00 00 01 00 00 12 91 //眼熟么 0825里的
00 00 00 // 00的固定噢。
0A DC AF 06 5B F8 C6 99 4D 9C 42 16 27 12 D2 56 //这个是密码的一次MD5。。密码是yansh83082 反正QQ是
//冻结的 嘿嘿
50 F2 C9 3F //时间来了。。。
00 00 00 00 00 00 00 00 00 00 00 00 00 //固定长度的数据
7B B6 90 44 //偶的IP地址
00 00 00 00 00 00 00 //固定的
0C //这位会变。。不过固定貌似也没事。。怪了
00 10 // 16的长度
49 85 A1 B8 21 04 DA 46 9E 3F 17 C4 99 6E 4F DB //这个是固定的
D0 D4 42 1A 34 8E A9 9B BD C2 CF B8 B8 E1 B3 5A //这个是随机的。。用随机的这个解密下面 00 40的数据
------------------------------------------------------------------------------以上就是 0078的解密数据了
00 18 00 16 00 01 00 // 0825数据包里面的
00 04 11 00 00 00 01 00 00 12 91 //0825数据包里面的 token1 和token2 。。又拿过来了
39 80 8C 2C //QQ号
00 00 00 00 01 03 00 14 00 01 //固定的长度和数据
00 10 //0x10的10进制是16 16的长度 一般16的长度都是key
ED A1 D3 F6 EC 73 DE 8F 1F 5C 4B 3C 2C CB 3B 3F //不过这个数据是固定的。。。
01 14 00 19 01 01 00 15 03 2A 37 9C 8E 0B 74 A2 F1 E5 47 56 0B 02 CE 2C D0 0A 83 9E D2 //还是0825里面的
01 02 00 62 00 01 //这个也是固定的
BD 1E 9F A1 BE EE F7 83 9C 07 D0 C9 91 0D 4E D9 //随机16的长度。。。不知道是个啥么的key反正这里没用
00 38 //0826 返回的令牌了。。
00 26 12 A1 AB 5C 0D 20 26 43 91 28 8C DB AE 62 70 B7 BB 92 16 5F 33 1C E3 F4 C3 C8 13 12 A0 C2 AA FA 1E E5 AD F1 7F 38 91 E3 08 B9 F4 4C 5B 5A 8B 59 00 4A 5C 4A 45 75
00 14 //14的10进制是20,下面分出20个来
62 96 52 20 9A 2E D1 94 B9 6F 35 F0 AF 1C 46 3C 1B D5 4A 5B
00 1A //固定数据
00 40 //40的10进制 64 下面是64个。。也是加密的。。。
0B 43 20 5C 6F 5D 29 A2 D3 84 6E F2 54 1B BE 12 68 52 A1 5B 6C BA 08 76 9F 23 CD 41 30 FC C8 F8 CB 76 2B 8B B2 5C A2 66 CD 23 30 89 BE 77 3A B5 00 2B 21 70 F3 00 4B 1F 59 42 C7 B1 C5 83 A2 35
---------------------------------------------------------------------------以下是解密部分,00 40的解密部分。。别理解错了
00 15 00 30 00 00 01 BE 1D AF 4F 00 10 0A 7B 3C 1F 90 D2 01 52 46 B5 A6 42 C7 E9 22 0D 02 EC F4 85 BC 00 10 AD 7D C0 21 74 66 7B 1D 30 6C 08 63 DC AC 9C 29
//整个解密出来的数据部分都是固定的。。。汗。不知道干嘛呢。
---------------------------------------------------------------------------
03 //包尾部了
因为偶只需要这点。所以也只分析了这点。。下面返回的数据是异常登录信息的。解不开。只有账号密码正确的情况下。。0826的返回包才能用0826的KEY解开。密码错误,需要验证码,冻结,异地登录等信息,都没办法用0826的key解开。。貌似是别的KEY了?
另外说下判断吧。。。
0826 返回包的长度=127 是账号异常 =175是密码错误 =740 是账号正常滴,密码也正常滴 =871就是异地登录了,,而下面这个返回包呢。就是871的长度
只要按照上面的解密步骤。。反过来进行加密。。那么最后把加密的数据发送出去。。就可以了。记得不是发送字符串啊。
[2013/1/13 22:49:38:269]
02 2F 35 08 26 2D F3 39 80 8C 2C 00 00 00 E1 82
9B 2F AA CC AF 23 D6 56 80 56 BF A9 5C BC 39 7B
22 86 C5 E8 7E 1E 17 09 83 E9 66 24 B8 38 37 F7
DB 71 A6 7D E2 4A 41 E8 7A 6E 63 4F 35 8F 2F 6B
EB 54 D4 8B 36 19 0F D5 BE 55 9A 8F E8 BE F3 D6
8A 32 70 E1 A8 48 2D F5 6C 5D 13 61 16 AE 70 36
81 0C 65 CF 2E 90 B9 07 5B DB 3D 0A 86 ED 72 1A
1D A1 F6 CD 3F 37 E8 5F A2 CD 19 72 32 EF E8 63
F8 4A 3A 2A 6D 7D 5F 90 3A D4 BA 8F E0 19 E4 81
5B 6F E3 F6 05 B5 22 95 B4 DB DA A8 0A D1 AE C6
E7 36 AB DA BB D9 D3 B1 55 84 BA 00 6E 24 AA FD
0E 87 24 4B F3 E4 69 FA C7 BF A0 E2 A6 75 39 26
CE BC 0D 50 3E 9C BC E3 F6 16 16 74 E4 95 6F E9
EF 55 9E FE 62 55 49 D9 B4 4B 4F 87 60 C7 1D 6C
F8 8D F1 BB 8B BF 79 EF 2C 08 DB 38 6F 21 6D D8
FE 8D 7E 9D 47 11 E2 5B 8B AB DB E1 00 FE 3C 8F
D3 04 F3 43 16 42 8F 25 E7 45 AF A9 5D 5F 76 7C
0B 8F 77 DB 42 D2 D0 F2 68 2F C1 0E 09 42 18 3A
54 A6 FC 6A 64 2F 71 91 9F E7 42 43 DB 81 32 BC
B3 2D 4B 0F D2 5F 4D AE 18 08 3E 6C BD C2 45 1F
11 C0 82 8D 3D 1F BE A0 27 F6 D3 52 CF 17 74 64
93 04 4E 6A E1 AE D7 34 76 A0 DE 0B 63 7F C0 C9
F0 A6 78 40 9A 3E 80 A7 6F E6 B0 BE 27 26 40 11
8C 06 FC 6A E7 A2 ED A6 C9 AD 99 DB 1F 3C D0 86
15 B8 05 83 A7 85 DE 8F 73 7B 00 49 DA EB 64 FB
07 55 64 E1 25 A9 C4 12 9C 11 27 B4 66 62 0D 4D
76 92 CD 57 65 8E 72 10 73 4E F9 43 50 00 F4 A1
BA 9D F7 7F E8 81 7B D5 AD ED CB D8 63 5C 03 AF
15 16 B3 A3 A4 23 AD FF 6B 56 6A 35 87 10 8B 94
17 25 0D BE 09 F3 42 07 96 1E 13 19 7B C7 C0 B5
88 C5 D8 77 33 E7 0B 47 D8 DD 7D C9 B4 74 21 D7
6E 65 BF 8E 2D 7A 70 C6 34 BC 11 06 30 72 82 D7
F4 54 7B 67 32 33 A1 06 16 91 17 18 72 95 08 BF
54 E0 F7 C7 EF B0 98 5D F0 A2 7C 85 60 81 06 EC
07 1C A9 78 9F 96 31 F6 97 B3 A6 C0 3D 3F 26 EE
CF A2 98 F3 D9 0F 64 C1 30 6D 1D 39 E6 FC 51 63
26 33 D1 BC 2B 95 CF E4 10 20 92 B6 94 E2 89 E8
31 0B B6 EF 6B 55 10 35 A1 80 0C CE B7 0B B8 66
96 DB 8E 71 ED C7 73 CF BA 51 26 71 17 47 5A 4A
92 07 BB E5 E2 12 69 33 10 E8 5B 3F 57 03 4D 1D
B0 7B 7B 61 02 56 A1 BF F0 A4 0F 0C ED 88 CE A4
F8 71 82 6F 48 3A 0F 72 48 17 75 DF 34 0F 79 98
12 FA F9 26 11 E9 B5 4D 42 0E 4C 91 68 16 BD 6F
7A 59 8C 07 1D 0F C3 A1 30 B4 62 14 DD 7F 1F 2A
9F 87 58 2E 74 47 D4 3D 59 95 43 71 33 2E 05 29
40 C3 06 3B 70 61 E0 FA 19 C2 99 5B 7F 9D E4 E4
3F 48 2E BC 48 6E CB 44 B5 59 73 B5 B4 70 1B 23
7A 34 C4 6B F3 B9 08 B3 FB B5 0F BE 17 B6 A3 6A
AA 76 6A 87 04 B9 45 91 55 FD 50 40 E1 89 F7 63
5B 57 2C 1C 37 B5 D0 4C BC 4D 1E 01 05 18 2A BB
CD 9F B2 50 3E 6F 5E AA 55 49 89 8E 17 07 99 D7
E5 6A 05 34 5E 79 EC 02 CA 66 A1 70 52 CF EA FB
A6 44 9C BA 9C D5 09 77 83 E5 02 F4 2E 59 6F 96
D2 15 35 04 BF 2E 27 5B 02 90 42 A3 45 D3 B3 99
84 15 A6 AA 46 8F 03