阅读更多
特别声明本人是以研究和学习为目的的,我们并没有违反 QQ 的版权许可的东西。一切的协议分析都是把 QQ 当作黑箱分析,我们所做的一切都遵循中华人民共和国《计算机软件保护条例》。
QQ版本: Tencent QQ 2006 B3
QQ号码: 9219811
先简单介绍一下工具,Ethereal,貌似强大不过不是很好用的抓包工具-_-#,给个截图:
还有就是QQ_Debuger,我写的加密解密分析工具,可以到我的空间里面下载
现在简单的介绍一下数据包的组成,QQ的数据包分为发出的包和接收的包两种,总体来说这两种数据包都包含3部分,包头,加密包体,包尾,只是出和入的包头有些不同
发送的数据包组成
1. 11位包头
00 0x02 QQ数据包开始标志
01-02 QQ的版本号,2006B3为0x0f4b
03-04 请求的命令
05-06 随机序列号,标志包的唯一性
07-10 4个字节的QQ号码 例如 9219811 就是 00 8c ae e3
2. 加密的包体,密钥是什么要具体看是什么包,解密可以用我的工具来解
3. 包尾部 1个字节 0x03 QQ数据包结束标志
接收的数据包就没有了后面的四位QQ号码,前面的都是一样的,对应的.
简单介绍一下QQ的登录流程,简化来说分为2步
第一步,请求LoginToken;第二步,发送带LoginToken的登录数据包
1.1 请求LoginToken:
包的组成: 1 包头, 命令QQ_CMD_REQUEST_LOGINTOKEN = 0xba;
2 包体, 0-15 是随机的Key
后面的内容是随机的Key加密数组01 00 05 00 00 00 00的结果. 数组是固定的, 不知道用途
3.包尾 具体数据包如下
0020 31 a9 0f a0 1f 40 00 3c a0 cc 02 0f 4b 00 ba 25 1....@.< ....K..%
0030 09 00 8c ae e3 c8 55 40 00 ab 95 05 63 ae 4b e6 ......U@ ....c.K.
0040 ec c7 22 38 b3 15 e5 63 0c 83 58 32 f0 e0 7e 1b .."8...c ..X2..~.
0050 76 90 e3 88 03 e1 97 38 5f df a5 76 d1 03 v......8 _..v..
灰色是头部,红色是Key,蓝色是加密部分,最后是结尾
1.2 LoginToken服务器返回部分:
0020 00 08 1f 40 0f a0 00 40 45 94 02 0f 4b 00 ba 25 ...@...@ E...K..%
0030 09 89 74 42 01 bf 7d cd ba 74 6b ee 28 74 83 b7 ..tB..}. .tk.(t..
0040 80 70 41 88 a6 73 dd 84 a9 dd d9 46 2f 8b f8 86 .pA..s.. ...F/...
0050 7d b8 59 6a 23 33 50 41 56 50 8b 96 1b a9 e5 ab }.Yj#3PA VP......
0060 c7 03
蓝色部分用第一步的红色Key解密后为
01 00 05 00 00 20 54 37 00 16 29 19 F9 E2 C0 59 32 7A FE 6E E7 69 C4 77 F7 D2 AD 0B 62 32 83 E3 A0 6A 28 BD 88 52
绿色为LoginToken长度,粉红色部分为请求的LoginToken
1.3 请求登录数据包:
0020 31 a9 0f a0 1f 40 01 dc 99 34 02 0f 4b 00 22 25 1....@.. .4..K."%
0030 09 00 8c ae e3 93 b6 76 6b dc ca b1 94 13 4f e2 .......v k.....O.
0040 00 12 c9 4f 6e e0 26 65 74 e3 23 53 a3 ee 45 73 ...On.&e t.#S..Es
0050 c7 33 6c 5d d3 a4 2e b3 5e 89 ce 6a 7f 90 89 54 .3l].... ^..j...T
0060 67 e3 54 80 f5 95 f9 df af c4 6a 22 45 a9 21 b1 g.T..... ..j"E.!.
0070 6e 26 5a bd 3a ae 28 cb 39 24 f8 89 95 c0 98 c2 n&Z.:.(. 9$......
0080 70 d9 1a 57 84 90 e5 a8 8f 5e a4 23 22 fd 00 cb p..W.... .^.#"...
0090 36 27 09 8f a5 e1 db ea 5a 32 53 4a 22 42 2c 1e 6'...... Z2SJ"B,.
00a0 0a 5f 3d 85 63 dc 9b ef a4 da f5 93 25 20 a4 2e ._=.c... ....% ..
00b0 0e 51 aa e4 61 98 bf 15 65 31 ce 0f 44 d4 57 2d .Q..a... e1..D.W-
00c0 28 29 0f b5 4d f6 ee f3 47 e1 48 ae b1 98 ab 9a ()..M... G.H.....
00d0 35 be 6f fd 0d 11 20 2a 71 ec 82 33 96 3a a4 7d 5.o... * q..3.:.}
00e0 1c 4f c6 e5 ae 03 a0 f0 c8 38 7f 65 a7 ce ed 9d .O...... .8.e....
00f0 f4 23 81 5d cd b5 58 03 89 a3 87 e1 89 cc 9f 90 .#.]..X. ........
0100 c6 f3 bf 59 6f 02 d0 70 86 80 84 12 d6 a6 86 fc ...Yo..p ........
0110 b0 1e 4d af 0e 2e 44 a7 1c ca 44 4f 66 cb 5c 7a ..M...D. ..DOf.\z
0120 ed 4d ab be d5 7d 9f 59 27 dd 31 cd 8f c3 9f 9d .M...}.Y '.1.....
0130 e4 5d 1a 5e d0 5a a5 8e 03 5d 7b 2f 95 5f 5f ee .].^.Z.. .]{/.__.
0140 c9 4d 9a 13 83 1f 54 ea 4b 9e 11 c9 1b 43 fb d0 .M....T. K....C..
0150 50 c0 5b 24 c7 c3 79 46 ba 79 9b 89 b0 5f ed 1a P.[$..yF .y..._..
0160 d0 63 13 87 1e b5 ad b5 cf 2e e2 c1 9a 0c 8f ba .c...... ........
0170 ef fb d7 c0 e6 54 01 a3 00 d8 5c a2 8f 40 a6 ff .....T.. ..\..@..
0180 24 a3 51 b9 d5 68 e2 bc 04 17 23 7f 77 af 05 7b $.Q..h.. ..#.w..{
0190 5f 60 60 7e 65 14 2a a7 81 a8 c2 33 ac d0 37 6c _``~e.*. ...3..7l
01a0 44 17 01 f5 d6 6a 20 a0 b9 3b 3c f5 a8 16 0c 04 D....j . .;<.....
01b0 f4 e5 6b 2a f4 b3 3b 70 58 2d a0 d1 51 e2 25 70 ..k*..;p X-..Q.%p
01c0 e2 10 84 bf 0c 45 b4 c8 37 5b c8 e0 d0 31 2f 8b .....E.. 7[...1/.
01d0 83 df 97 d0 9f 8e ac e6 2e a8 ed f5 74 9c 04 7d ........ ....t..}
01e0 f1 8e 14 6a a6 e1 04 0f 9b e9 d9 aa f5 99 b6 97 ...j.... ........
01f0 2f 73 6f 36 20 1e b1 b4 f1 ee 8a e5 64 03
这个包体够长,如果没记错的话是460位的加密部分,红色部分是解密的Key,解密后简化为:
01 A5 3A E4 B4 DB 42 E0 8E 4A 10 AA E3 94 4C 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3F F2 31 72 30 C8 95 7D D8 6A 49 0D F9 8E 44 EA 5B 0A 2F 69 E5 4B 54 71 9F 47 9A 17 C0 B8 52 1B 16 62 20 12 A7 F5 8B D1 6B 81 F1 4D 4E FE 90 51 BA 49 85 3C 16 64 BB BA AA FA 8F 9C A3 DF 38 EC 89 CC 76 01 40 01 30 99 C5 A8 00 10 59 0F D5 F7 AA 50 01 09 60 77 1C AC 29 B8 3D EB 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 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 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 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 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 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 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 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 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 00 00 00 00 00 00 00 00 00
好像共424位吧, 000 - 015 : 用密码的两次MD5作为密钥加密任意一个东西,服务器只看能不能正常解密,其他的不管.有人分析说这个东西变了,其实只是有些解密工具解不出这个包(可能是官方加的空字串),但是确是还是用TEA加密的.
016 - 051 固定组合
052 登录方式 正常 0x0a,隐身 0x28
053 - 068 固定组合
069 LoginToken的长度 这个版本是0x20 也就是32位长
070 - 070+LoginToken.Length LoginToken内容
剩下的 固定组合
1.4 登录数据返回包:
这一步是关键部分了,服务器会返回一个数据包,解密包体后有4种结果,登录成功,重定向服务器,登录失败,密码错误.这个版本有点特别,登录成功事件的解包密钥是两次MD5的密码HASH,其他的事件则是初始化的Key.
解出包体第一位代表登录状态 0x00 ->成功 0x01->重定向 0x05->登录失败 0x09->密码错误
登录成功的情况:
0020 00 08 1f 40 0f a0 00 c8 f6 18 02 0f 4b 00 22 25 ...@.... ....K."%
0030 09 7f d6 7a 64 0d 2b 9a a8 5c 01 56 e5 3b 38 ce ...zd.+. .\.V.;8.
0040 ec a9 9d 5e 13 00 e3 87 ec bc 82 ce f3 cc e5 40 ...^.... .......@
0050 93 24 e6 db d0 31 53 08 91 0b 67 45 0a 01 07 01 .$...1S. ..gE....
0060 a6 ef 17 2f 4e d5 3e a7 17 c6 53 3a 4b 75 cc e3 .../N.>. ..S:Ku..
0070 0f 86 05 07 85 27 f3 a9 95 a2 23 05 fd d4 df 53 .....'.. ..#....S
0080 e3 4a fc 82 80 6d e2 5c e3 12 50 6d c7 a2 1c 4a .J...m.\ ..Pm...J
0090 b2 73 6b df b6 66 86 4e 3b 11 e0 fb 8e 65 45 f3 .sk..f.N ;....eE.
00a0 0d 4b c1 21 47 27 81 63 f7 28 0d dd 76 9c f8 e2 .K.!G'.c .(..v...
00b0 55 ed f5 ff 3c d1 c5 0f 77 aa 18 d6 e0 39 a8 db U...<... w....9..
00c0 a6 7f de 1c 99 23 4d 64 46 02 e7 d0 97 62 34 08 .....#Md F....b4.
00d0 06 18 dd 37 c0 05 7c 2b 40 50 ca 2e 40 59 0b 93 ...7..|+ @P..@Y..
00e0 a4 38 b5 a1 d7 65 34 30 ab 03
解密后
00 64 4B 63 79 6A 72 49 36 65 4E 44 75 70 44 34 61 00 8C AE E3 CA 69 87 D9 05 BA 7F 00 00 01 1F 40 45 2B 29 C4 03 0A E1 10 08 C3 07 02 94 CA 26 1F 7B F2 40 5B 9A 91 A6 6D CF AC 9D 1A A1 13 3D 8D C2 CF 1F 40 CA 68 C1 1B 1F 40 00 00 42 00 00 00 00 00 13 ED 46 FD 79 85 F7 5D A3 56 79 14 BD F2 A6 EB 8F BE F9 CB 28 79 6E 1E 9A C5 47 61 83 25 AD 25 00 00 00 01 00 00 00 00 00 00 00 00 CA 69 87 D9 45 2B 29 22 44 C5 E7 C9 44 C8 94 E8 00 0A 00 0A 01 00 00 0E 10 01 14 8F FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
红色部分为SessionKey 64 4B 63 79 6A 72 49 36 65 4E 44 75 70 44 34 61,以后的通信很多都是用这个为密钥,后面记录了一些号码,IP,端口,上一次登录IP之类的消息,不太知道详细组成
如果是重定向或者登录失败,后面会跟上重定向的服务器地址和端口或者登录失败的原因.