QQ2006协议分析之一 登录篇

          特别声明本人是以研究和学习为目的的,我们并没有违反 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之类的消息,不太知道详细组成



如果是重定向或者登录失败,后面会跟上重定向的服务器地址和端口或者登录失败的原因.

你可能感兴趣的:(C++,c,qq,C#,J#)