qq分析及还原

zjymubox 贡献于2017-04-11

作者 zhangjinyu  创建于2014-10-29 12:08:00   修改者zhangjinyu  修改于2016-04-08 06:59:44字数32439

文档摘要:
关键词:

QQ协议分析及还原 标签: qqlogin解密服务器算法加密 2012-07-31 15:24 22795人阅读 评论(2) 收藏 举报 分类: QQ分析(7) 最初,QQ通信协议并没有加密,而是直接采取明文的方式进行传输,到了后来才使用了加密传输,加密算法一直没有变过,使用的是blowfish算 法,但是密钥的交换协议变得比较频繁。其实TX也是被逼的,现在的互联网用户比前几年更加注重隐私安全,这么大用户量的通信软件,如果用户与对方之间的聊 天信息可以轻易的被第三方破译获取,那么用户量肯定会离开她,而去选择那些能够更加保护好个人隐私的人通信软件。因此,随着时间的推移和技术的发展,以前 设计的协议可能会被研发者发现一些弱点,“图谋不轨”者加以利用,会对TX造成一些潜在的风险,他不得不对协议进行修改(QQ2011正式版中的密钥交换 中对密码的MD5计算就加入了salt的概念,这个salt就是对应的QQ号码,后面会有详细的描叙)。 QQ协议首选的传输层是UDP,如果UDP不可登陆,那么会再尝试使用TCP进行传输。UDP使用的端口是8000,TCP使用的端口是443,应用协议基本一样,只是在通过TCP进行传输时,前两个字节为协议内容的长度(包括2个字节)。 QQ协议中每个通信内容都带有一个协议头部,如下图: 其中标识1一个字节,版本号、命令字和序号都是2个字节,QQ号码有4个字节,接下来是数据部分(已加密),最后是一个尾部标识1个字节。 在进行协议还原的时候,最关心的就是协议头部的命令字,需要根据不同的命令字,来进行相应的处理,最终获取密钥解密聊天内容。   QQ登陆协议密钥交换过程,首先我们使用Wireshark抓报文分析,观察主要用到的命令字(见上一篇Header部分的介绍)。 QQ2011登陆过程分析 命令字 含义 1、Touch Information(0×0091) 根服务器SAY HELLO,如果对该报文做一些小动作,可以让QQ认为,TX的服务器或网络不能访问… 2、Login Request(0x00ba) 未知,可以不进行处理。 3、Login Verify(0x00dd) 向服务器发送登陆请求,需要使用密码进行运算作为密钥才能机密该报文,解密的报文中包含对第4步的解密密钥。 4、Login get Information(0x00e5) 未知,但是服务器返回的报文你必须得知道,因为这个报文中包含解密会话密钥报文(第6步)的密钥。 5、Login verify E3(0x00e3) 未知,可以不进行处理。 6、Login send Information(0×0030) 客户端向服务器发送sessionKey,使用第4步获取的密钥进行解密。                     1、Touch Information(0×0091) 这个报文无需关心,是客户端向服务器在SAY HELLO… 2、Login Request(0x00ba) 未知,在此处并不重要。 3、Login Verify(0x00dd) 非常重要!!获取会话密钥首先得解密该报文。但是要解密该报文,必须得知道该登陆QQ用户的密码,而用户密码只有用户和TX知道,第三方是不知道的 (也有可能存在“不可思议”的第三方…)。数据传输过程中使用的加密算法是blowfish,这个算法目前从公开的资料上来说,还没有发现漏洞。因此,要 实时获取用户的聊天信息,除非已经知道密码了,或者已经暴力破解了密码(这里简单介绍一下怎么进行暴力破解,这里的暴力破解,当然不是模拟一个QQ客户端 不停的向TX服务器发送登陆请求,这样太慢了,而且TX那边也会有记录。首先,得分析出这个报文的密钥生成算法[不是简单的直接使用密码作为密钥],加密 算法(这个已知,是blowfish),第二,需要将对方的登陆报文截取保存到文件,然后写一个程序,不停拼接字符串、数字、标点符号进行组合,根据第一 步分析它密钥的生成方法生成出密钥,然后作为blowfish算法的密钥,去解密报文,如果解密成功,恭喜你,你暴力破解到了一个QQ密码。但是这种概率 比较小,即使有一些,这些号码的价值不大,扯远了…)。 LoginVerify报文的解密密钥生成方法,在QQ2011版本之前,是MD5(MD5(PWD)),对QQ的密码做了两次MD5运算。但是 QQ2011版本(包括2011版本)之后,这个算法做了一点修改,就是:MD5(MD5(PWD+QQ_NUM)),这个修改其实是非常有必要的,为什 么呢?因为随着硬件技术的发展,以及前些年MD5彩虹表的推出,简单密码的MD5值非常容易就能从彩虹表中找出对应MD5值,从而得到原始字符串密码,即 使TX做了两次的MD5运算。在彩虹表的推出或以前(因为我也不知道是在这以前还是以后,呵呵),在执行MD5运算时,就有了加SALT的说法,很形象! 加盐,在这里,QQ_NUM就是盐,这样就加大了使用彩虹表破解的难度。 使用密码根据以上的算法得出解密密钥,解密Login Verify报文后,会得到一个新的密钥,这个密钥暂且就叫做verify_key。 Login Verify Reply(0x00dd) 服务器对客户端Login Verify报文的响应,这个报文需要verify_key作为密钥进行解密,得出一个新的密钥-verify_reply_key。 4、Login get information(0x00e5) 客户端接收到服务器的Login Verify Reply报文后,会使用verify_reply_key加密数据发送到服务器,而这里面又包含了一个key – get_info_key。 5、Login verify E3(0x00e3) 未知,此处可以不进行处理。 6、Login send Information(0×0030) 使用get_info_key解密该报文,得到会话KEY – session key。 回想一下:密码是关键,有了密码才能解密Login Verify(0x00dd)报文,解密了Login Verify(0x00dd),才能解密后续的的报文。其步骤是:passwd -> verify_key -> verify_reply_key -> get_info_key -> session_key。 前面两篇简单的介绍了QQ登陆协议密钥交换过程以及所使用的加密算法,知道了这两点,就可以对它的协议进行还原了。 QQDecrypt,通过winpcap抓包,实时对QQ聊天协议进行还原。 除了聊天协议之外,我们还可以对QQ相关的协议进行还原,包括但不限于: 1、QQ文件传输 2、QQ音频传输 3、QQ视频传输 4、QQ密码验证程序 5、QQ密码获取,是的,你没有看错,有一种主动的方法(用户登录时)就可以获得QQ的密码。在网络出口获取,而不是在客户端进行HOOK的方式获取。 QQ协议分析(一) 标签: qq解密tokenc服务器2010 2012-07-31 15:34 4732人阅读 评论(0) 收藏 举报 分类: QQ分析(7) QQ协议的分析已经很早就有很多人做过了,不过由于版本的更新,之前分析的协议又不能用了,不过目前2008版的QQ协议还可以用,我的分析也是在之前其他人分析的基础上弄的,只是分析了几个重要的协议,实现了登录,收发信息,心跳包,注销等功能了。 以下是基于QQ2009的协议,经过简单研究,发现QQ2009与2010协议基本相同。 0x0091   发送: 包头:02 版本:1A 35 命令:00 91 包序号:62 7D QQ号:10 73 a1 f6 固定:02 00 01 00 01 01 01 00 00 64 00 密钥:D6 D1 DA FD 4D E6 70 FE 46 48 A0 AD BD 95 E0 B6 密文:82 9C 11 56 B6 24 68 18 A6 A1 B8 09 6A A7 C3 C4 E8 45 E5 33 EE 13 52 C6 C7 29 D1 46 93 21 97 EF 88 F2 FE 8B 76 9F DB 44 EA B0 1A 10 68 AC 05 18 包尾:03   解密: 固定:00 01 0091Data01(在后面的命令里面要用到的):00 00 08 04 01 E0 0091Data02(在后面的命令里面要用到的):00 00 03 20 00 00 00 01 00 00 0A 5D 固定15字节0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 接收: 包头:02 版本:1A 35 命令:00 91 包序号:62 7D QQ号:10 73 a1 f6 固定:00 00 00 密文:D1 B3 D5 AF 79 DE 82 8B E5 F8 FE 98 59 DB 0D AD D5 D6 8A FE A4 E1 74 5B 08 F0 58 E2 4E 6A 5F 37 DE BC 9E 2F 27 CA 40 82 11 1A 48 CD C6 32 35 7D 6A D9 9F 8C 0A 72 12 29 5A 5E AD 98 3C 77 0D 77 48 EB B4 17 F9 14 66 CC 7F D2 97 82 43 8F D8 87 89 CA 4A 02 71 29 19 66 包尾:03   解密结果: 接触成功:00 登录时间:4B E2 CF 4E IP地址:7B 91 B5 20 固定:00 00 00 00 00 00 00 00 令牌长度:00 38 0091_Token: 4E A3 61 22 B2 03 8A E3 F6 3B E3 E0 CF 90 2E B0 8D B3 86 98 37 D4 E5 E5 62 94 AB 0A F2 73 A3 DD 9D 81 5F 0E 1D CA A4 57 52 09 83 EA DC 88 80 5F D5 C4 BB D4 80 64 18 83 Touch结果:00 (00成功开始登陆,其他继续连接) 如果发生重定向 接触成功:00 登录时间: IP地址: 固定8 字节: 令牌长度: 令牌内容: Touch结果:01 重定向计数:01 链接服务器提供者标识:00 00 00 01 服务版本:00 00 00 00 服务器IP 地址(四字节):0x00BA   发送: 02 1A 35 00 BA 5F C8 10 73 a1 f6 02 00 00 00 01 01 01 00 00 64 00 密钥:FD F2 EC E4 F5 C0 95 E7 30 8B 08 55 CB 44 7B 60 密文: B3 A0 63 AB 9E B2 F5 70 7B B7 3B EA 06 D8 60 E9 87 27 B0 D5 81 1E 0A AF 6D AC 59 7F DF 45 A8 71 4E 5D 5E 8F EA DC C1 06 82 F7 FD 3B 21 5E 87 F5 C5 2A D6 AF D1 C0 A4 3E DB 90 DA 70 A4 CF F8 E0 B9 1A 2C C2 14 D6 E2 67 52 16 F3 A8 79 59 BC AA CF 78 D3 E8 21 7E 30 9D AF D1 88 15 A7 B9 77 41 12 33 F2 09 29 4E 74 8E 03 解密: 固定:00 01 0091Data1:00 00 08 04 01 E0 0091Data2:00 00 03 20 00 00 00 01 00 00 0A 5D 00 38 0091_Token: 4E A3 61 22 B2 03 8A E3 F6 3B E3 E0 CF 90 2E B0 8D B3 86 98 37 D4 E5 E5 62 94 AB 0A F2 73 A3 DD 9D 81 5F 0E 1D CA A4 57 52 09 83 EA DC 88 80 5F D5 C4 BB D4 80 64 18 83 固定:03 00 05 00 00 00 00 00 00 00   接收: 02 1A 35 00 BA 5F C8 10 73 a1 f6 00 00 00 密文: 99 26 D0 CD F6 85 AB D5 89 6A E4 91 A4 65 B0 A4 2B 41 B0 C9 6A 64 BF EF 87 64 80 F2 D0 36 BB E8 64 E3 47 B8 42 51 FF B6 79 8F 78 92 D0 9C F6 65 3C F0 5A EE 51 24 E1 79 6B 1C 35 D4 AC 0F 59 00 8F CE B0 2D C8 6D F1 66 FE 22 8E 70 47 D0 44 B9 03   解密: 验证结果:03 (03 标示成功,04 需要验证码) 固定部分:00 05 是否需要验证码:00 (00 不要,01 要) 验证码:00 00 00 00 (需要验证码时为00 00 01 23,不需要时为全 0 ) 令牌长度:00 38 00BA_Token: EB 8F F6 B1 2E F0 E0 8C 9A 03 0F D0 65 36 CC 44 5D F8 CC CF 3C 37 25 D1 E3 CE 78 F0 BA C3 37 52 14 19 A0 FC EB 3B 4A A8 37 F2 0F 98 F8 CB 39 83 49 EA 6B F0 BE 12 7A 60 0x00DD 发送: 02 1A 35 00 DD 42 B7 10 73 a1 f6 02 00 00 00 01 01 01 00 00 64 00 密钥:AB 56 24 FE 93 97 B0 A9 E4 EC 19 70 C4 F1 5E EB 密文: 13 AF B0 45 C4 64 DD B9 83 A1 9C 14 50 3E 54 FA 16 D1 3B 9F F8 DC 71 C1 1E F3 48 9B 8C 32 9D 64 1F A4 57 FF D9 9D A3 2F 5C 87 FE FB F6 68 22 BD C3 05 85 96 E2 B2 07 78 97 79 73 09 75 96 5B 2C 0B CF 62 DB C9 4F F0 90 67 39 29 56 04 8C 3B A9 93 54 A3 99 88 65 6D ED D2 02 64 E7 5D 3E 40 9D 68 A4 85 0C 12 09 03 37 5F 41 D5 A3 2C 34 63 F7 D3 28 FA 07 43 E0 67 21 C3 CA 7C 3C 08 44 27 45 41 31 0A E7 DD EE 67 65 5F F3 B5 B4 6A 2A F3 14 20 FF DB 89 84 C4 D0 39 69 CE 9A 02 E9 C2 FC DA 79 1A 4B F4 33 5B CB D1 7C EC CB 35 C3 5E CD 36 D4 1D 04 3E 7F 21 24 22 B7 FF 64 38 35 30 C7 B1 DA EF BA 12 59 2C 5C 45 D7 64 EC DA A2 95 EC 4E 76 9D 3A C8 9D 1E AF E5 26 1F 27 4B B8 AE F6 DB 0F 86 91 03 47 C2 42 8F D4 87 4F 92 46 39 A6 AB 14 E4 A1 17 0E 72 29 4D 57 35 82 9E 58 DF 67 98 7C 8E F3 E1 E3 15 AA B2 4B 61 80 BC BE CA 4C A9 31 61 4B 4C 06 A2 15 AF 1F C9 87 4E 1E BC 46 43 8A F8 42 B0 91 09 2B 83 25 CC 53 40 B3 98 4E D2 71 78 0B 16 CA CA B6 D7 F9 56 3D 83 72 DE 87 D4 72 3F 89 41 A4 9A 55 1C 80 6A 8E 3F FE AC 75 25 DD 1B 8C 91 37 17 0F 40 0A FC CB A3 1B 71 E4 17 C8 90 A8 F9 A3 28 68 D9 06 12 8E A9 87 68 FE 14 7A 9B 02 A5 D1 62 AF C5 43 63 8E DB 29 CE 38 CC 3B 8C 0A 78 0F 7A 61 8F FF 00 66 6D 9A 80 18 F3 58 1F 21 F4 25 E6 F2 0E BF 82 F9 23 D2 74 C4 80 A7 69 8F A9 AD 33 4C 46 E1 2B 4B 0B 6C EC DE AF B5 CC B0 77 CE 8E EB A3 7C 56 37 10 BC 8F C8 2C EC C6 28 D6 76 D4 07 48 11 D9 2A 3A A8 7D 37 4C 38 2C 37 96 A5 AA E3 DA 44 FC 75 2B 9A 6C D6 87 23 34 7B 25 DE 8C 4D 89 A6 91 CC 2A D2 B6 E3 CF 9A EC E2 16 F7 6E EC E4 AA 9E BF C1 54 49 EE 69 74 2A C5 AA DA 0F 4B 22 76 FB A7 5F 2E 99 01 DD 8F 0F 4F 82 62 55 DC 33 57 0F 30 D8 3C 2C 9B 98 F2 AB A9 09 D5 32 5D BD BB 40 13 EC F8 A4 0B 36 00 10 5F 73 D9 E6 38 1C 45 88 1B DA EF 67 2D 43 2A 92 30 64 B7 3D B5 50 8C 20 1B B6 69 46 BF D5 1D 7A B2 38 25 45 89 24 7C 64 88 32 FF C2 8D EA 4C 53 C7 CD F1 82 AA 5B 03   解密:(长度601 ) 00 DE 00 01 00 00 08 04 01 E0 00 00 03 20 00 00 00 01 00 00 0A 5D 00 38 00BA_Token: EB 8F F6 B1 2E F0 E0 8C 9A 03 0F D0 65 36 CC 44 5D F8 CC CF 3C 37 25 D1 E3 CE 78 F0 BA C3 37 52 14 19 A0 FC EB 3B 4A A8 37 F2 0F 98 F8 CB 39 83 49 EA 6B F0 BE 12 7A 60 00 78 FE EE CD DA E2 3A EE AB 34 80 5E 28 EE 33 D4 C9 08 47 A3 DD 90 94 5C EC CD D4 F4 CB 27 8F F0 CA 63 DB 8C CB DC 55 09 25 E2 96 4F 51 86 75 B2 02 BF 42 AD 4A 2A 33 1A 03 61 54 4A 44 71 02 72 2C BE BE B7 B3 67 8E B6 EA F8 58 93 6E 52 AE C8 EE 79 96 72 0C 45 21 49 68 3F D4 65 E3 1E 91 5B 17 98 56 BA 1E 00 F2 0A 07 A2 64 2E 91 AC 2A 0D 31 E7 34 ED 42 D1 4D A4 C9 00 14 40 8F 7C CB E2 A5 FE 51 E0 41 E0 3B 02 3F 1A 78 D6 65 82 67 (该部分是随机的16 字节Key+4 字节的Crc32 校验结果) 固定:01 77 2E 01 固定:0B A5 6B B2 长度:00 10 固定Key :C4 52 56 01 94 58 5A 14 C0 DB B7 AB B7 35 97 A8 固定:02 37 D2 12 9F 长度:00 10 固定的Key :33 31 21 8C 3A 0A 72 13 F5 F7 88 80 78 6A F6 C0 补充328 个0 :   敏感信息部分解密: 随机4 字节:3A 16 59 BD 固定:00 01 QQ号:10 73 a1 f6 0091Data02:00 00 03 20 00 00 00 01 00 00 0A 5D 固定3 字节0 :00 00 00 MD51:25 F9 E7 94 32 3B 45 38 85 F5 18 1F 1B 62 4D 0B 登录时间:4B E2 CF 4E 固定:00 00 00 00 00 00 00 00 00 00 00 00 00 IP地址:7B 91 B5 20 固定:00 00 00 00 00 00 00 00 长度:00 10 固定:3D 84 2B 69 A3 AF 4B 40 A5 F8 0F 43 63 B1 53 B4 00DD_RandomKey(接收时解密用):F6 4C BB CD 63 6A 6B D8 33 70 3E EF 7D 21 BC 0B   接收: 02 1A 35 00 DD 42 B7 55 19 B5 81 00 00 00 密文: 7A 67 3F 5C BF 06 EE C9 0A AD F2 DF F0 2D 22 B7 62 1C 46 1D 45 89 C6 29 1D C7 11 4A 89 99 48 FE 53 0D CE 9F BF 01 40 FB C9 56 32 78 B1 75 0A 56 0E EB 6D 09 D1 7E 92 52 35 3F 5C F2 71 AF FC 62 5E 0D 2E F7 09 5E AF BE 4B 15 D5 56 B9 C3 C5 19 EB 71 C2 22 DE 2D 8B 39 4C D9 8F 07 BA 95 47 DF 81 A6 58 23 F9 97 F3 ED 87 11 2F 51 4F 48 D7 D6 8A 15 AF 27 8D 7C 03 26 DD 4B 29 D0 1B 65 0B E5 9E C3 FA B6 A4 BD CC B7 4B 8D 46 28 F2 43 D3 80 A4 39 E7 B2 FA D6 A7 47 39 F6 92 A0 46 43 44 79 BB 16 61 B9 63 5F B9 27 D6 AC 39 E0 1A 06 39 C8 72 C0 B9 E5 77 5F CE 5B E6 F4 AA C6 42 11 77 00 F7 4D 18 CE 5A 7E 3A 97 04 22 D3 73 90 52 B0 9E 5E F7 54 51 91 23 7F E8 6D 9A 90 40 9A E0 64 17 09 C5 24 66 1B 3A 9C C2 4C 0F B4 2C C8 18 32 4F 48 8F 29 83 7D CF B4 0F 46 D2 D9 16 97 BD 8F 91 A8 E7 AA F0 77 E7 BA 4E 95 7B 47 92 E1 4E AF A2 68 0A 06 86 35 2D 75 54 57 A3 CC 13 D2 BA E7 E1 5B CF 8E 56 0D 08 57 C6 03   解密:(285 )如果密码错误,则需要用发送包中的随机密钥来解密 长度:01 19 成功:00 (00 验证通过、33 或51 拒绝登录、BF 没有该QQ 号、34 密码错误) 长度:00 20 00DD_Token1: 15 46 65 1D 28 A7 C6 B1 A7 29 B8 82 FB 3E 8C D3 15 32 E6 4D B8 E5 BC D6 65 97 31 2E 5A BE 9C B2 长度:00 98 固定:00 02 登录时间:4B E2 CF 4E 长度:00 90 00DD_Token2: E3 84 7D C4 85 FD 2C 40 B7 50 3A 62 59 23 DD 5A 7B 5D EF 72 64 D6 94 E9 13 31 90 A0 64 82 63 D9 44 0C 83 A7 1F 82 3E 87 80 54 6D 2D F1 44 C1 11 3F 4D 32 45 14 5D A6 7B A9 DF 19 01 94 AD 16 F2 5F DA 56 9F A4 0D 86 E1 A9 02 18 42 65 D6 95 1D 73 0E AD 43 EE 75 08 88 11 95 28 4D B8 C5 B4 D5 EA 72 54 4C B0 59 69 BD EB 19 3D BB 87 95 9C 4E 5F 2E CF 63 8B 9B 18 61 19 08 0E BA 85 48 55 CB 0A FD 0D 80 48 39 9F CB F6 95 B9 26 AD E4 0D 15 长度:00 38 00DD_Token3: C7 F7 24 5D B9 4F 7F D9 B9 B5 E1 18 92 49 AE 74 81 B0 0D 26 87 36 BC D5 7B A2 1D 87 D5 59 6B 9C CD BB A7 F7 F8 60 D2 69 DA 3B 38 12 1C A0 D9 B1 66 AB 2C A7 63 4F 72 41 00DD_Key1:4D 39 42 58 73 6A 52 54 4B 59 57 76 7A 52 66 55 00 00 00DD_Key2:35 77 6D 63 75 58 64 51 4B 7A 44 48 36 5A 35 49 00 00   0x00E5 发送: 02 1A 35 00 E5 12 29 10 73 a1 f6 02 00 00 00 01 01 01 00 00 64 00 00 38 00DD_Token3: C7 F7 24 5D B9 4F 7F D9 B9 B5 E1 18 92 49 AE 74 81 B0 0D 26 87 36 BC D5 7B A2 1D 87 D5 59 6B 9C CD BB A7 F7 F8 60 D2 69 DA 3B 38 12 1C A0 D9 B1 66 AB 2C A7 63 4F 72 41 密文: 00DD_Key1:4D 39 42 58 73 6A 52 54 4B 59 57 76 7A 52 66 55 F0 C7 1A 2A 67 58 5B 9E 2E 42 F4 B0 D2 E8 8C 7E 82 DE BB C1 C2 8D 46 A2 66 2A AC B0 43 E8 C1 9F 54 6A 11 80 EE 36 62 C3 20 53 1B 34 3D 10 58 46 71 0F A0 0A 76 EE 78 E1 22 19 1E ED 88 79 7C 25 40 7F 1B 47 CA 04 D3 D8 BF E8 B4 1D 99 D6 D7 C1 67 25 1D 6D D8 C6 21 7F E6 87 98 BA 19 92 75 8B BC 23 4B 1B BB 5E 79 5A C8 27 2B C4 89 63 92 B1 DE 91 E2 37 B9 A4 A4 AA A8 8E B5 7B FA 55 22 04 52 43 6C DB C6 F0 8C CA 9A BD AC 1D EE 7F 1B 47 34 5D A5 2B 48 AE 9B 3F 62 20 44 21 82 91 05 46 00 BE 4B B1 AC 0A 5D CB B6 89 0A 5A 0A 24 4F 95 45 F0 B4 27 00 51 2B 31 E0 98 CB C0 4C F0 4B B2 DC 72 4A 53 25 A1 36 E0 A7 99 C3 DC 45 45 52 8A FC D8 1D 5F 99 90 90 D5 06 20 52 EB 63 D9 14 6C FD FF AC AB 83 71 D0 CB 74 B7 9C 77 BC 1F 03 1C 34 13 0B F2 F2 B1 7F DB 07 11 9D F3 E2 42 48 30 24 00 43 5A F3 33 64 1A 72 60 9E A8 8A 19 71 B9 6E 60 BC 96 EE 13 79 9C 33 FB 71 5B A0 63 73 EA 03   解密: 固定:01 0E 00 01 01 0091Data01:00 00 08 04 01 E0 0091Data02:00 00 03 20 00 00 00 01 00 00 0A 5D 长度:00 38 00BA_Token: EB 8F F6 B1 2E F0 E0 8C 9A 03 0F D0 65 36 CC 44 5D F8 CC CF 3C 37 25 D1 E3 CE 78 F0 BA C3 37 52 14 19 A0 FC EB 3B 4A A8 37 F2 0F 98 F8 CB 39 83 49 EA 6B F0 BE 12 7A 60 长度:00 20 00DD_Token1: 15 46 65 1D 28 A7 C6 B1 A7 29 B8 82 FB 3E 8C D3 15 32 E6 4D B8 E5 BC D6 65 97 31 2E 5A BE 9C B2 长度:00 98 固定:00 02 登录时间:4B E2 CF 4E 长度:00 90 00DD_Token2: E3 84 7D C4 85 FD 2C 40 B7 50 3A 62 59 23 DD 5A 7B 5D EF 72 64 D6 94 E9 13 31 90 A0 64 82 63 D9 44 0C 83 A7 1F 82 3E 87 80 54 6D 2D F1 44 C1 11 3F 4D 32 45 14 5D A6 7B A9 DF 19 01 94 AD 16 F2 5F DA 56 9F A4 0D 86 E1 A9 02 18 42 65 D6 95 1D 73 0E AD 43 EE 75 08 88 11 95 28 4D B8 C5 B4 D5 EA 72 54 4C B0 59 69 BD EB 19 3D BB 87 95 9C 4E 5F 2E CF 63 8B 9B 18 61 19 08 0E BA 85 48 55 CB 0A FD 0D 80 48 39 9F CB F6 95 B9 26 AD E4 0D 15 固定:00 00 01 00 00 00 00   接收: 02 1A 35 00 E5 12 29 10 73 a1 f6 00 00 00 密文: A2 69 27 A7 8E 56 5B 6F 4A 11 9C F6 0E D1 F0 39 44 3C C8 2F 18 DE 68 AF B7 31 7C D6 F3 0F E7 03 16 30 95 DE 94 E6 BD FD 75 FD 13 0D 91 7A B2 4F B4 78 36 11 2D E3 91 30 4F DD 44 37 B7 DD 45 81 E7 DF BD 53 63 38 E2 A5 D4 CC 53 7A 51 82 E4 1A 47 11 38 01 5C 9A A2 E0 C8 95 13 1B 55 BE A3 EF EE CA 6C 27 B2 43 6A A2 1A F4 28 09 C3 02 35 A7 02 61 A7 E7 13 ED 10 8F 76 8D C4 28 A2 B7 81 04 1F 23 60 F7 AF C3 20 C7 15 7C 59 32 22 FB 0B 68 FA 46 8C 16 F4 5C CF 66 EF 12 64 DC 65 C5 74 B3 5F A2 71 9A 43 F9 C7 A2 9D 41 72 E6 CF FD B9 7A AB 8A A0 5F D3 82 6B EF EC 08 F1 56 37 39 15 5D FD 8A 35 18 42 D3 CD D6 46 34 9F 7F 0C 9A 7B 7B 4C 24 C6 B8 C6 6B 56 45 6B 07 C6 08 69 C7 84 38 05 25 9C 47 31 B5 65 95 CF BA F7 C3 46 8D 16 18 B6 B8 4E DD 93 28 4D CC B1 D2 D6 18 2C 28 D4 37 42 0B 2C C7 2D 4A 96 A5 0D 6B D8 93 BD A4 0E 3A E8 9B 21 0D 22 6F 39 78 D8 3E 11 E0 07 BB 78 A9 25 91 2D 3A CD 09 AC DA DA 7E 2D 2E 97 61 82 1B 5E 7C F8 78 31 A3 4A 69 6D 1B 9B 94 B1 5C BA 36 78 D7 5A 44 D2 0D 78 F5 C1 FF E4 E6 0C 38 11 A9 38 7A D6 0B 57 31 3B DF 20 A2 00 AD 59 F2 EE E6 B8 11 89 EA EC 0D 43 D9 69 EB 5B F5 9E E4 88 F8 A3 3A 2D A2 58 36 9E 35 3D EA AA 0C 11 B4 DB 84 73 CA FF 2C 33 30 28 18 20 79 C3 A3 1A EB AE E0 97 1D DF AB 75 2E BD 8D F5 F0 7D DA 54 9A 39 CF 20 91 3F C9 9F 18 09 7E FD 66 3C 41 2E EB 8A B9 FA 53 6F 3B 15 C8 A3 A1 67 C9 A1 D8 28 F2 75 7E FD 08 8F 8B 57 F2 EF 5A 66 51 D8 94 D7 EE 34 1B A5 D6 C3 EB F0 CB 58 95 52 1B 82 BF AD E8 EA A3 38 3A C2 20 28 06 51 F3 FC 8E 10 8A E4 F6 2C 45 47 43 1D 0A 12 84 55 20 ED 9F F9 8F 2A 66 5A 25 2D 39 C5 C0 E5 42 F4 C5 3D 62 EE 62 8E AB 08 8C 03   解密: 00DD_Key2:35 77 6D 63 75 58 64 51 4B 7A 44 48 36 5A 35 49 未知(不同的QQ 号不同):01 FD 固定:01 00 00E5_Key1:5A 51 67 66 68 4E 47 43 33 48 38 74 63 78 4A 71 固定:00 00 00 01 00 00 00 64 固定:00 DC 00 03 登录时间:4B E2 CF 4E IP地址:7B 91 B5 20 固定:00 00 00 00 00 00 00 00 长度:00 C8 00E5_Token1: E2 3A 36 19 A3 0F 0D 86 56 22 11 23 72 50 C9 3F 0E 6B B6 32 8F C4 AD EB 79 42 DF 9A 11 05 AA EB C8 8E 8A 96 01 AA FA 9F 06 17 8A DA 09 66 79 AA D8 6A 9F 2B 2B 16 0E 9A 1B CE F7 44 54 8F F0 7C E8 2D 18 AF 67 34 00 72 04 35 C5 B8 2C 35 0E CA 73 53 52 8A 70 E6 72 46 37 46 54 DB AE 23 B3 35 DC 7F 62 7E A4 F3 5A 04 43 B7 39 69 9C E5 A7 50 6D C9 EE 4B 98 95 FA 18 50 D1 EE 5E 9A 0C 7C AB 47 78 63 F0 0A C4 57 DE DD 1E 23 0A 83 72 50 BE D1 C7 2D B8 B3 76 37 73 58 22 B4 0C E5 16 84 0A 11 63 C3 36 4E A6 2B C6 A2 EE 5D 3D DF AB 51 7C B9 5F CF 7E 61 70 76 B5 3A 2E 66 B3 2D 36 CA 92 0D 59 98 97 B1 B4 2A 8E 00E5_Key2:41 44 54 33 6E 67 38 34 38 4E 61 65 76 6E 6B 79 固定:00 70 00 01 登录时间:4B E2 CF 4E 长度:00 68 00E5_Token2: 5D A4 B3 65 D1 7F 5B 94 F8 9D 6D 0A 8E ED A4 C9 CC 81 3F DC 9C 63 A3 5D A9 45 D0 76 43 09 34 95 86 19 1C DE DA 8C A6 B9 BC E9 EE 2A 56 8E C0 D6 23 5C E5 87 EE 95 10 A9 6D 24 DF 0F 09 4C 51 13 1C 07 57 A6 A0 BE E6 23 29 5F D8 E6 D6 43 38 14 D8 78 79 EF 70 29 AB B6 87 F5 9F 6F 2C 71 1E B0 F0 EF 68 A0 A4 C3 CE DC 基本固定,最后一字节有变化:00 00 0D C3 固定:00 01 固定:51 80 00 00 00 3C 00 02 长度:00 73 00E5_Token3: 固定:01 Key:39 73 51 44 74 54 57 6B 38 35 6A 32 34 79 54 59 固定:00 60 00 01 登录时间:4B E2 CF 4E 令牌长度:00 58 令牌内容: 9D 9D 83 C2 02 1F AD CF 99 71 24 47 64 53 7E 40 9E EB 76 AE DC 6A 0E 83 9A F1 7A 34 B1 93 DA 03 F2 80 6B D1 E4 2A ED 50 E3 E5 90 61 FE 64 77 C0 85 1A E2 C2 47 55 8D ED C8 3B 32 25 63 80 CF 1B F0 0B 82 3C 66 7D 75 94 A7 88 48 CD FF A0 C6 C9 C1 BB 9C 3A 3C F8 ED 9E 固定:00 00 发送: 02 1A 35 00 E3 4A C2 10 73 a1 f6 02 00 00 00 01 01 01 00 00 64 00 00 38 00DD_Token3 : C7 F7 24 5D B9 4F 7F D9 B9 B5 E1 18 92 49 AE 74 81 B0 0D 26 87 36 BC D5 7B A2 1D 87 D5 59 6B 9C CD BB A7 F7 F8 60 D2 69 DA 3B 38 12 1C A0 D9 B1 66 AB 2C A7 63 4F 72 41 密文: 80 B3 D8 48 A5 C8 0D C6 22 4A 25 A0 D1 3B 46 B1 4A 4B 4B 61 4F 35 C7 68 BD FD 5E 94 88 06 C4 68 44 C3 EA BA CA 40 2F 5D F5 DB 2E 76 DB 5D DA 89 74 53 33 7E 75 40 93 15 2A 11 06 5D BB 5F B1 A2 6B CD 19 9D B6 BC 6F 1E 01 0A 5F 6C AC 5E B5 70 ED 48 7B F3 BD C7 56 79 29 83 7C 55 DD AC 13 D6 1E 17 71 95 C1 3D FA 01 AC 47 B4 03 B8 BE FE 6D 13 EE F8 5C F7 AD 39 7D B8 A7 71 F8 E8 B8 6D 4B 13 A6 38 C3 CD D5 81 BC 3C AC D1 9C 2C 91 17 BD AF 5C FF 78 14 32 EC 0C 5C 21 56 05 8E 86 51 9E 75 0D BB 1D 83 46 51 4D 65 B2 BE 22 0B 36 87 41 AC E8 7C 07 96 B6 FC 7A 68 F9 CB 33 B4 98 26 48 28 A1 53 79 69 19 E7 5C BE ED 1F E0 C2 F9 50 7C 63 3E D4 D7 83 B1 EF D0 B7 A2 F2 E5 A1 27 D1 8C 84 21 D2 3E 34 6C 36 D7 36 AA 1C B8 AC 5F 98 85 包尾: 03 解密: 00DD_Key1:4D 39 42 58 73 6A 52 54 4B 59 57 76 7A 52 66 55   固定:00 C0 00 01 0091Data1 :00 00 08 04 01 E0 0091Data2 :00 00 03 20 00 00 00 01 00 00 0A 5D 00 38 00BA_Token: EB 8F F6 B1 2E F0 E0 8C 9A 03 0F D0 65 36 CC 44 5D F8 CC CF 3C 37 25 D1 E3 CE 78 F0 BA C3 37 52 14 19 A0 FC EB 3B 4A A8 37 F2 0F 98 F8 CB 39 83 49 EA 6B F0 BE 12 7A 60 固定:00 70 00 01 登录时间:4B E2 CF 4E 长度:00 68 00E5_Token2: 5D A4 B3 65 D1 7F 5B 94 F8 9D 6D 0A 8E ED A4 C9 CC 81 3F DC 9C 63 A3 5D A9 45 D0 76 43 09 34 95 86 19 1C DE DA 8C A6 B9 BC E9 EE 2A 56 8E C0 D6 23 5C E5 87 EE 95 10 A9 6D 24 DF 0F 09 4C 51 13 1C 07 57 A6 A0 BE E6 23 29 5F D8 E6 D6 43 38 14 D8 78 79 EF 70 29 AB B6 87 F5 9F 6F 2C 71 1E B0 F0 EF 68 A0 A4 C3 CE DC 固定:00 00 长度:00 20 数据:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00     接收: 02 1A 35 00 E3 4A C2 10 73 a1 f6 00 00 00 密文: DF B2 D0 D7 11 EF 6A 9D AC 74 E9 D3 0B 11 33 11 D9 16 14 17 8A 1A 1E 72 E2 EC 24 1A 3A C2 F8 85 7B 71 0F 9C D3 3D 69 AB 包尾: 03   解密: 00E5_Key2:41 44 54 33 6E 67 38 34 38 4E 61 65 76 6E 6B 79 固定(QQ 号不同则不同):00 13 00 00 0E 02 4F 昵称长度:06 昵称(UTF-8 编码):71 77 65 71 77 65 结果码:01 固定:00 80 00 00 00 00 00 00   如果发生错误,那么需要用发送包中的加密密钥进行解密,解密结果主要是 00 56 33 00 00 02 23 00 00 00 00 错误信息长度:00 4B 错误信息:(UTF8 编码) E6 8A B1 E6 AD 89 EF BC 8C E7 94 B1 E4 BA 8E E6 82 A8 E8 BE 83 E9 95 BF E6 97 B6 E9 97 B4 E6 B2 A1 E6 9C 89 E7 99 BB E5 BD 95 EF BC 8C E6 82 A8 E9 9C 80 E8 A6 81 E9 87 8D E6 96 B0 E8 BE 93 E5 85 A5 E5 AF 86 E7 A0 81 E3 80 82 ( 抱歉,由于您较长时间没有登录,您需要重新输入密码。 ) 固定:00 00   0x00A4 发送: 02 1A 35 00 A4 77 0C 10 73 a1 f6 02 00 00 00 01 01 01 00 00 64 00 00 38 00DD_Token3 : C7 F7 24 5D B9 4F 7F D9 B9 B5 E1 18 92 49 AE 74 81 B0 0D 26 87 36 BC D5 7B A2 1D 87 D5 59 6B 9C CD BB A7 F7 F8 60 D2 69 DA 3B 38 12 1C A0 D9 B1 66 AB 2C A7 63 4F 72 41 密文: 82 E7 0C 7C 55 47 1B 67 98 05 07 2D 7B DB 50 4E 8F FD EF 12 47 72 AA 0C 62 02 E3 EB F2 83 80 A5 C9 6D F5 FD C8 82 17 66 9A 57 73 51 65 02 BB D0 DB EE C1 C1 1B 11 83 42 30 15 90 D0 8E 6E E0 12 A8 C3 47 78 9D A7 46 E5 88 15 A7 0B 8A F2 4B 21 91 7E E4 B6 26 69 F2 D6 29 2B CC 5C EE F7 64 18 F1 72 61 0D B2 86 0D 3C 49 76 95 95 CD 48 D7 15 包尾: 03 解密: 00DD_Key1:4D 39 42 58 73 6A 52 54 4B 59 57 76 7A 52 66 55   固定:02 01 03 令牌长度:00 20 00DD_Token1: 15 46 65 1D 28 A7 C6 B1 A7 29 B8 82 FB 3E 8C D3 15 32 E6 4D B8 E5 BC D6 65 97 31 2E 5A BE 9C B2 固定: 3C 01 03 00 00 不知道(QQ 号不同则不同,同一QQ 号则相同): FB 6C 28 17 B5 73 83 61 27 80 65 5A 3D 3B 17 6F A7 94 70 C5 83 C3 C0 07 D9 AA E2 20 A0 8F 44 9D CF FF 3D D9 1C 6C 23 15 1B C3 B5 91 60 79 6C D8 3F D3 C3 E3 0A B9 AB C2     接收: 02 1A 35 00 A4 77 0C 10 73 a1 f6 00 00 00 密文: 64 DE 6F 7B 19 59 6E 46 30 20 EA 34 E3 48 44 03 B9 96 79 C5 F2 FB 35 A7 EC CA 3B 57 1F BB 64 36 03 解密: 00DD_Key1:4D 39 42 58 73 6A 52 54 4B 59 57 76 7A 52 66 55 固定: 02 00 01 03 02 03 01 03 00 长度:10 00A4_Key (同一QQ 号则相同):B8 89 57 90 73 0C 94 47 85 5A 6B 13 D4 20 DE 52     如果发送的数据包中的红色部分改成56 个0 发送出去,则接受到的数据包解密之后,结果是 02 03 01 03 00 ,从这个情况来看,是通过了的,需要测试0030 看能不能顺利得到sessionkey 。 (经过验证,红色部分全部填写成0,也能通过。) 0x0030 发送: 02 1A 35 00 30 23 9F 10 73 a1 f6 02 00 00 00 01 01 01 00 00 64 00 00 38 00DD_Token3 : C7 F7 24 5D B9 4F 7F D9 B9 B5 E1 18 92 49 AE 74 81 B0 0D 26 87 36 BC D5 7B A2 1D 87 D5 59 6B 9C CD BB A7 F7 F8 60 D2 69 DA 3B 38 12 1C A0 D9 B1 66 AB 2C A7 63 4F 72 41 密文: 02 46 4F 3C F9 6C ED 12 0F 9B 6F 3C 73 A7 BE 66 BE 03 8B 94 7E 46 64 7C E2 E7 CD EA 74 AF 6C BB DA 21 22 F2 F8 C6 09 4C 1A EB 9C 93 6F 38 52 68 46 99 51 6C 42 8E 2D FB FF 00 ED 41 B3 B0 7E 0F F1 C8 C6 69 7A 86 DF BA 46 04 49 DF F0 65 5D 53 9F B5 11 C6 60 B0 1F BB A1 A8 80 58 A3 9F 8E 83 30 AE 70 54 E3 89 21 5C A3 10 BE 0B 23 C7 F4 5D 55 80 21 08 75 24 DE 89 ED 95 D9 B9 AE 25 7E 01 92 F9 E2 AF 93 E8 71 05 46 3E BD EA 75 95 84 15 73 BF 80 1C C9 94 3B 48 6B 74 77 54 79 1A A0 B3 A5 35 A6 6C 6A 4E 81 43 99 A3 B8 46 B5 12 C7 45 4B AA CD 40 DD E9 78 11 69 EB BD FB 31 0D 54 6A 61 37 BB 9D 86 8D FC FF 85 85 BF 73 CC E3 FA 35 CA AA D1 72 9D 01 28 C3 50 D1 C6 CC DD A9 9F A0 AC F8 35 14 5B B9 63 2A 6E E6 16 51 39 D8 56 47 C6 A2 BE 0D DD 2F 55 16 60 4C 6F 30 28 2A 26 81 12 1E 18 55 B1 37 17 84 FA 2B F9 F8 8F 5A 8E 4A 97 A6 03 D7 D5 6B 95 D0 E7 7F 52 33 68 03 7C 2F C6 FF 58 BB 23 48 DF DE 5A 55 B2 31 5B B9 A2 F8 A4 B8 8F 42 59 C3 CB B7 00 2A 3B E8 64 00 69 66 A6 20 C0 A6 27 23 21 CA D2 46 26 57 BB 07 53 72 56 32 48 FD 9D 43 FA 75 14 3E CD D5 84 F7 95 2C 9A 07 EE C4 A0 E1 88 4A D3 54 5D CC F1 98 8C BF 64 A9 FB 75 B7 53 98 75 D4 06 A0 5C BF 65 1D 80 71 E2 FE 07 0B 76 8D 89 44 64 8C EB F8 D3 E2 4B 79 95 BC 8C 2B BA 89 EB 92 33 1F 89 1D EF 26 AA 31 B0 0B C0 10 3E F3 31 82 55 85 69 41 BF C0 04 C7 48 DC AC 4C FB C2 09 C6 DD EE E9 82 61 25 AC E8 2D E0 15 6A 3B C9 23 2B F0 78 3A D4 A9 44 24 0C B7 F1 68 3A 7A AE 65 F7 5C E0 B4 11 1A 82 6C 87 4F 4E 48 93 E9 46 6D BA ED 5B 00 0F 3F 19 67 9C 96 B2 E7 5B 53 54 67 06 6E F3 5F 2F 48 36 61 DA CC A3 43 9F CD 12 46 AD 2C 71 03 B5 5A 37 AB 2F B5 72 F9 F4 C4 C7 7E C7 48 DF AF E1 F2 8F 88 20 3B 6E 6E 5B B9 57 5D AD C3 BD 96 A9 A7 39 B4 ED 0C 39 81 A3 94 9D 6F C0 A2 75 9D 6F 50 58 E7 4F 73 17 8D EA 26 42 03 EC CA 36 66 24 59 24 38 57 48 EA D0 B8 DE E0 51 36 D2 52 F1 04 B6 67 4F 49 E9 CB 10 32 72 E4 7B C0 7A 33 FE AF E8 7C C4 F6 01 EA E6 A4 25 B1 EE 67 B0 46 33 29 94 54 5A E4 74 0B 73 05 15 DD 3D C8 7F 29 57 8D 43 1B E9 A3 71 EE E0 67 C4 3B EC F9 0B 48 6A 62 69 DE 0E 69 35 0D EE 25 A1 63 B2 D1 5C 48 56 F1 93 10 4A 6D F1 94 FC 47 77 10 35 A4 E4 5B AE 4C 38 0E B2 48 21 FD 02 A6 04 61 C8 AA 50 68 4C 82 40 85 F9 79 45 D4 2C 92 3D 16 0E 75 D1 79 37 95 19 CE 41 E5 37 38 7E 8C 89 21 0B 包尾: 03 解密:( 728 长度) 00DD_Key1:4D 39 42 58 73 6A 52 54 4B 59 57 76 7A 52 66 55 固定:00 01 0091Data2 :00 00 03 20 00 00 00 01 00 00 0A 5D 固定(00E5 中接收):00 DC 00 03 登录时间(0091 中接收):4B E2 CF 4E IP 地址(0091 中接收):7B 91 B5 20 固定:00 00 00 00 00 00 00 00 00 C8 00E5_Token1: E2 3A 36 19 A3 0F 0D 86 56 22 11 23 72 50 C9 3F 0E 6B B6 32 8F C4 AD EB 79 42 DF 9A 11 05 AA EB C8 8E 8A 96 01 AA FA 9F 06 17 8A DA 09 66 79 AA D8 6A 9F 2B 2B 16 0E 9A 1B CE F7 44 54 8F F0 7C E8 2D 18 AF 67 34 00 72 04 35 C5 B8 2C 35 0E CA 73 53 52 8A 70 E6 72 46 37 46 54 DB AE 23 B3 35 DC 7F 62 7E A4 F3 5A 04 43 B7 39 69 9C E5 A7 50 6D C9 EE 4B 98 95 FA 18 50 D1 EE 5E 9A 0C 7C AB 47 78 63 F0 0A C4 57 DE DD 1E 23 0A 83 72 50 BE D1 C7 2D B8 B3 76 37 73 58 22 B4 0C E5 16 84 0A 11 63 C3 36 4E A6 2B C6 A2 EE 5D 3D DF AB 51 7C B9 5F CF 7E 61 70 76 B5 3A 2E 66 B3 2D 36 CA 92 0D 59 98 97 B1 B4 2A 8E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 固定(不同QQ 号也一样):AA 27 46 1B 72 F5 9E 03 F5 C3 0D 78 A0 73 44 0B 随机:3C 0A 固定(红色部分变化,两个部分的红色相同,目前有01 和09 两种): 00 00 00 00 00 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0091Data01 :00 00 08 04 01 E0 固定(16 个0 ):00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 令牌长度:00 38 00BA_Token: EB 8F F6 B1 2E F0 E0 8C 9A 03 0F D0 65 36 CC 44 5D F8 CC CF 3C 37 25 D1 E3 CE 78 F0 BA C3 37 52 14 19 A0 FC EB 3B 4A A8 37 F2 0F 98 F8 CB 39 83 49 EA 6B F0 BE 12 7A 60 固定:00 00 00 08 00 00 00 00 08 04 10 00 01 40 01 0B A5 6B B2 00 10 C4 52 56 01 94 58 5A 14 C0 DB B7 AB B7 35 97 A8 大部分固定(红色部分会变化,有09 和01 两种): 00 00 00 00 00 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 固定:02 40 D9 9F 32 长度:00 10 固定(不同QQ 号也一样):7F 67 05 6B 08 DD 22 18 D5 95 7F 88 AC 7D 46 23 补充249 个0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00     接收: 02 1A 35 00 30 23 9F 10 73 a1 f6 00 00 00 密文: 0F 7C B1 1F 05 C2 00 EC 97 B0 D1 70 FE 5E E5 78 B3 CC 2A 05 FA 36 15 1A 92 44 A9 1E 77 9B 08 C9 91 A0 D7 FE 44 73 EB A9 6E 84 90 9C 89 00 E0 B9 12 59 A4 32 6F 14 68 A4 75 B8 45 CB 34 34 DA D6 26 0C 57 41 18 18 36 02 03 6A F2 4A 3E E7 D7 66 62 5C DF A1 CE 0D E8 3A B4 D9 06 EA 55 01 81 50 AF E0 F9 5E 66 B1 3D 7B B6 C9 BF 51 AF 1A FB BB C2 53 1A 17 1F 6C 78 C9 FC 67 95 F4 81 43 AC 10 F0 D6 AC CE 30 B0 2D 8A CE 59 64 91 CC F0 56 DF FD 58 8D E6 9D 8C C0 F9 包尾: 03   解密: 00E5_Key1:5A 51 67 66 68 4E 47 43 33 48 38 74 63 78 4A 71 登录成功:00 (其他可能继续登录) SessionKey :68 45 68 36 52 73 36 41 6B 32 32 41 50 41 53 6A QQ 号:10 73 a1 f6 IP 地址:7B 91 B5 20 未知:27 DC 4B E2 CF 4F 固定:00 00 00 00 固定:03 14 8F FE 4F BB B6 63 C7 69 C3 F1 3C DC A1 ED 40 固定:00 00 00 00 00 08 02 04 08 08 08 08 08 04 05 01 F4 03 E8 07 D0 0B B8 13 88 长度:00 30 0030_Token : EC 7A 3B 07 CA E5 74 25 F9 B1 0A 7C BA B3 D2 89 A6 1E FD A4 44 AE 8D A2 41 A4 97 7B 3C A3 F3 94 A4 85 EF 25 F3 82 43 92 7C A3 42 4F 6D 1F 7F 4D 未知(不同QQ 号不一样): 70 5A 89 C2 70 5A 89 C4 固定:00 00 00 07 0x0058(心跳) 发送包 包头:02 版本:1A 35 命令:00 58 包序号: QQ号:10 73 a1 f6 固定:02 00 00 00 01 01 01 00 00 64 00 密文:由QQ号的ASCII码组成,然后再用sessionkey进行加密得到(31 34 32 37 37 34 38 32 32 35) 包尾:03   接收:(不需要管) 心跳包每分钟发送一次,每次都应有返回,如果没有收到返回,那就需要继续发,如果连续发送5次都没有收到返回,则说明已经掉线了。   0x0062(注销) 发送: 包头:02 版本:1A 35 命令:00 58 包序号: QQ号:10 73 a1 f6 固定:02 00 00 00 01 01 01 00 00 64 00 密文:16 字节0 ,用sessionkey 加密 包尾:03   此包要连续发送4次。   此命令还有需要验证的情况,本人没有进行分析了,如果有需要的,自己去分析一下。 0x0080(有人加我为好友) 02 1A 35 00 80 E4 5C 00 66 13 D0 00 00 00 26 7E 25 F2 D1 C5 C0 BE 16 D8 27 E1 FE A5 2B 9B DC 49 55 9D 75 28 12 7B 20 2D CF 20 63 E0 9B 52 B1 8D BB 59 CD EE 51 57 0C 2C 1B B3 66 FD 7C 09 BF 2D 18 40 92 4F 06 65 DC 2B 64 A5 0D 8D EA 0F 03 C6 6B D7 64 AB 6F 84 B1 8C 7C 06 41 7E 29 7B 84 16 00 AE 47 40 93 64 EB 08 AD 42 10 B7 0D 77 E4 E4 71 18 5F 78 93 77 80 B2 59 F3 C4 7C 50 0F 03   解密: 34 30 1F 31 34 32 37 37 34 38 32 32 35(对方QQ 号) 1F 36 36 38 39 37 34 34 1F 18 93 E0 53 D1 2C 97 CB 0F F1 B2 A2 07 F7 34 BF D9 85 5E EC A1 B0 CF 6D FD 00 30 62 35 30 62 36 37 61 30 66 61 32 36 38 39 63 66 63 62 35 34 36 36 36 34 62 37 32 31 61 35 38 33 33 37 30 35 35 34 38 32 64 39 37 38 64 64 30 37   2009版本里面的qq,除了每分钟必须发送的心跳包外,每个五分钟,还必须发送下面两个命令,否则一会儿就掉线了。接收到的数据不需要管,我也不知道是用来干什么的。反正一直没有用。   0x0027(每个五分钟发一次)   发送 02 1A 35 00 27 3C 2F 55 19 B5 81 02 00 00 00 01 01 01 00 00 64 00 F6 28 66 4C 25 CE F1 38 60 FC D2 19 DE 1D F9 3A 03   解密: 02 00 00 00 00   接收: 02 1A 35 00 27 3C 2F 55 19 B5 81 00 00 00 F8 9B 8A E9 E9 8C 35 C7 FD 42 47 03 82 A0 76 DA 03 解密: FF   0x00C6(每个五分钟发一次) 发送 02 1A 35 00 C6 48 64 55 19 B5 81 02 00 00 00 01 01 01 00 00 64 00 35 CF 5B 8B 34 A0 EA E8 09 B9 0F 06 5D 6C 9C 74 03 解密: 02 00 00 00 00   接收: 02 1A 35 00 C6 48 64 55 19 B5 81 00 00 00 CB 27 71 89 8D 40 46 E7 4A 52 DF 0D 20 01 6D 9C 98 6D F7 F3 79 36 21 E9 53 5D A6 55 3F 64 D4 2E 03 解密: 02 00 00 01 2C 00 00 00 0A 00 00 00 00 00 00 00   0x00CE(接收消息) 发送者QQ :10 73 a1 f6 接受者QQ :00 66 13 D0 回复收到时填充的数据:00 0A 25 67 3A 3C 0F 33 端口:1F 40 信息类型:00 A6(好友信息) 固定:00 00 长度:00 15 内容:00 06 00 04 00 01 01 01 00 01 00 04 00 00 00 00 00 03 00 01 01 QQ版本:1A 35 发送者QQ :10 73 a1 f6 接收者QQ :00 66 13 D0 会话令牌:F0 02 DB 96 F7 07 00 0B 7C 1C C1 E2 42 94 9A 36 文本:00 0B(00 AF 震动,也可能是对方正在准备发消息的一个标志) 不知道(会变):1D 2B 发送时间:4B EE B6 A5 发送者头像:02 4F 是否含有字体属性:00 00 00 01 消息分片数:01 消息分片号:00 消息ID :00 00 是否自动回复:01 MSG的UTF8 :4D 53 47 00 固定:00 00 00 00 发送时间:4B EE B6 A5 不知道:50 60 9E 26 固定:00 00 00 00 09 00 86 00 固定:00 06 固定:E5 AE 8B E4 BD 93 固定:00 00 文本: 01 (02 为自定义表情) 长度: 00 39 不知道:01 消息长度:00 36 消息内容: E5 8F 91 E9 80 81 E4 B8 80 E4 B8 AA E6 B5 8B E8 AF 95 E6 95 B0 E6 8D AE EF BC 8C E7 9C 8B E7 9C 8B E4 BD A0 E8 83 BD E4 B8 8D E8 83 BD E6 94 B6 E5 88 B0 E3 80 82     回复时的包体: 发送者QQ+ 接受者QQ+ 收到内容中的8 字节回复内容     聊天中含有自定义表情信息的: (自定义表情在中间,,我再看看行不行呢。) 发送QQ :10 73 a1 f6 接收QQ :00 66 13 D0 00 0A 38 BC 3A 3C 0F 2A 1F 40 00 A6 00 00 00 15 00 06 00 04 00 01 01 01 00 01 00 04 00 00 00 00 00 03 00 01 01 1A 35 10 73 a1 f6 00 66 13 D0 A3 E8 70 94 34 12 C3 18 E5 D6 CC 31 3E 75 EC C5 00 0B 25 4F 4B EF 83 C2 02 4F 00 00 00 01 01 00 00 00 01 4D 53 47 00 00 00 00 00 4B EF 83 C3 74 31 E1 75 00 00 00 00 09 00 86 00 00 06 E5 AE 8B E4 BD 93 00 00 01(文本消息部分) 00 1E(长度) 01(不知道) 00 1B(消息长度) 消息内容:E8 87 AA E5 AE 9A E4 B9 89 E8 A1 A8 E6 83 85 E5 9C A8 E4 B8 AD E9 97 B4 EF BC 8C 02(自定义表情) 00 09(长度) 01 00 01 62 FF 00 02 14 A3(内容) 01(文本消息部分) 00 21(长度) 01(不知道) 00 1E(消息长度) 消息内容:EF BC 8C E6 88 91 E5 86 8D E7 9C 8B E7 9C 8B E8 A1 8C E4 B8 8D E8 A1 8C E5 91 A2 E3 80 82     QQ的消息接收了后,是需要回复的,否则服务器会不停的向你这里发送6次,回复的内容是接受到的数据包的密文部分解密出来后的前16字节,比如本例子中的前16字节就是: 发送者QQ :55 19 B5 81 接受者QQ :00 66 13 D0 回复收到时填充的数据:00 0A 25 67 3A 3C 0F 33   0017命令主要是08版以前的QQ的协议用的命令。 0x0017(接收消息) 发送者:0B 15 B9 96 接收者:00 66 13 D0 回复是的内容:00 00 68 96 DB 85 3C 40 端口:1F 40 消息类型:00 09 固定:00 00 长度:00 00 发送者QQ版本:12 21 0B 15 B9 96 00 66 13 D0 9C E8 45 9E 95 A2 0B 71 4C AD F5 90 B6 1B C8 08 消息类型:00 0B 数据包序号:00 07 发送时间:4B EE 2F 01 发送者QQ头像:00 00 是否含有字体:00 00 00 01 消息分片数:01 分片序号:00 消息ID:DC 00 自动回复:01 消息内容:B7 A2 B8 F8 C4 E3 00 0A 00 00 00 00 86 02 CB CE CC E5 0D       回复: 02 1A 35 00 17 00 07 00 66 13 D0 02 00 00 00 01 01 01 00 00 64 00 D2 C1 89 57 63 F6 49 E8 23 77 7F 29 39 8C 5E F6 18 63 19 09 73 CB 57 D2 55 D8 F8 CE 32 50 0E D5 03   解密: 0B 15 B9 96 00 66 13 D0 00 00 68 96 DB 85 3C 40     QQ的消息接收了后,是需要回复的,否则服务器会不停的向你这里发送6次,回复的内容是接受到的数据包的密文部分解密出来后的前16字节,比如本例子中的前16字节就是: 发送者:0B 15 B9 96 接收者:00 66 13 D0 回复是的内容:00 00 68 96 DB 85 3C 40 QQ协议简单分析 标签: qq服务器聊天腾讯tcp通讯 2012-07-31 14:38 1651人阅读 评论(0) 收藏 举报 分类: QQ分析(7) QQ的版本: QQ的版本升级比较频繁,而且与多数的软件不同的是,它客户端的升级往往伴随着协议相应的改变。 目前,对研究QQ协议版本比较重要的是: QQ2000c 。它对应的客户端协议版本是08xx,目前对这个版本的研究比较多。 QQ2003 (0808) 这是腾讯最新公布的QQ版本,目前发现它对应的客户端协议版本是0A 1D。目前对这个版本的研究才刚刚开始,此版本对协议做了比较大的改动。 协议类型: 我们尝试把QQ的协议进行分类: 文字聊天协议族(TCPF, Text Chatting Protocol Family):它主要支持与其它QQ客户端进行文字聊天。TCPF是建立在UDP协议之上。UDP数据包中的第一个字符02为这个协议族的标识。 TCPF的服务器使用8000号端口,腾讯的QQ客户端软件一般从4000号端口开始尝试使用,但实际上,对客户端使用的端口号并没有限制。目前的研究集 中在TCPF上。 其它未知可能存在的协议族: 我们观察到QQ除了与TCPF服务器通信以外,还有与其它的服务器使用UDP进行通信。目前我们观察到的服务器为 218.17.217.111 : 8000。客户端使用与TCPF不同的端口。目前观察到的从客户端发出的包以06开头,而服务器返回的包则以01开头。目前其具体作用未知。我们注意到一 个有趣的现象是,如果选择离线后重新上线,那么在发出登录包之前,这个通讯已经开始。我们暂时把它命名为数据传输协议族(DTPF,Data Transfer Protocol Family)。最新的研究发现,它传递的是QQ Show的图片数据。 语音、视频聊天:目前还没有开始分析,尚未知道是使用UDP还是TCP协议。 聊天室:没有分析,应该是TCP协议。 随着对这些协议分析的开始,我们会给它们更精细的划分和恰当的命名。 TCPF: TCPF是建立在UDP协议上的协议族,主要支持文字聊天功能。TCPF是以请求-响应模式工作的。也就是说,客户端发出一个请求,服务器端会给出一个相 应的响应;服务器向客户端发送信息,客户端也会给服务器相应的响应。请求和响应通过相同的序列号来进行配对(请求代码也应该相同)。而且每种请求的发起方 都是相同的。目前,已知的请求包括: 0x0001  注销登录 0x0002  心跳信息 0x0004  更新用户信息 0x0005  搜索用户 0x0006  获取用户信息 0x0009  不需认证方式添加好友 0x000a  删除好友 0x000b  需要认证的方式添加好友 0x000d  设置隐身、示忙等状态 0x0012  确认收到系统消息 0x0016  发送消息 0x0017  收到消息(服务器发起) 0x001a  未知作用。 0x001c  在对方好友列表上删除自己 0x001d  未知作用。 0x0022  登录 0x0026  获取好友清单 0x0027  获取在线好友 0x0030  群操作指令 0x0080  收到系统消息(服务器发起) 0x0081  收到好友状态改变消息(服务器发起) QQ http协议 标签: qqcmd服务器网络协议电话web服务 2012-07-31 15:14 2706人阅读 评论(0) 收藏 举报 分类: QQ分析(7) 协议说明: 协议由报文头(T)+发送者(T)+接收者(T)+报文类型(T)+报文长度(L)+报文内容组成 发送者和接收者是系统内的程序种类,OICQ服务器0x01,传真服务器0x02,WEB服务器0x03,打 印服务器是0x04,聊天服务器是0x05,OICQ用户是0x0A。 OICQ用户到OICQ服务器的通讯协议引导符 (0x81+0x0A+0x01) 报文类型报文内容报文说明 0x01 昵称(S)+肖像(M)+用户密码(S)+性别(T)+年龄(T)+真实姓名(S)+国家/地区(T)+省(T )+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+电邮(S)+爱 好(S)+说明(S)+身份验证(T)新用户注册,身份验证用于当有人要将他加入好友时询问是否 允许 0x02 服务号(L)+密码(S)+注册方式(T)老用户注册,方式分为0正常,1隐身 0x03 服务号(L)+对方服务号(L)+内容(S) 发送信息到某人 0x04 服务号(L)+组号(L)+内容(S) 广播信息,组号=0为全体 0x05 服务号(L)+朋友服务号(L) 查看朋友资料 0x06 服务号(L)+组名称(S) 增加组 0x07 服务号(L)+组编号(T)+组名称(S) 修改组名称 0x08 服务号(L)+组编号(T) 删除组 0x09 服务号(L)+移动人数(T)+{朋友服务号(L)+目的组号(T)} 移动组成员 0x0a 服务号(L)+起始编号(L)+回传个数(T)+查找标志(T) 看谁在线上 查找标志 1=向小找 2=向大找 0x0b 服务号(L)+SQL语句(S) 自定义查找 0x0c 服务号(L)+朋友服务号(L) 增加好友 0x0d 服务号(L)+朋友服务号(L)+加入原因(S) 请求加入好友 0x0e 服务号(L)+朋友服务号(L) 删除好友 0x10 服务号(L)+显示模式(T) 更改显示方式 1上线2隐藏3免打扰4离线 0x11 服务号(L)+监视服务号(L) 监视某人谈话 0x12 服务号(L)+昵称(S)+肖像(M)+用户密码(S)+性别(T)+年龄(T)+真实姓名(S)+国家/地 区(T)+省(T)+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼(S)+ 电邮(S)+爱好(S)+说明(S)+身份验证(T)更改用户基本信息 0x13 服务号(L)+朋友服务号(L)+文件名(S)+文件长度(L) 请求发送文件 0x14 服务号(L)+朋友服务号(L)+允许/拒绝是否允许发送文件 0x15 服务号(L)+朋友服务号(L)+文件内容(B) 发送文件 0x16 服务号(L) 连接测试报文 0x17 服务号(L)+朋友服务号(L)+同意标志(T) 应答对方请求加入好友 0=拒绝 1=同意 OICQ服务器到OICQ的通讯协议 报文类型报文内容报文说明 0x01 成功/失败(T)+服务号(L) 新用户注册结果返回 0x02 成功/失败(T)+组个数(T)+{组名称(S)+组编号(T)+朋友个数(T)+{朋友服务号(L)+肖 像编号(T)+朋友状态(T)+朋友昵称(S)] 老用户注册结果返回 朋友状态 1=上线=2隐藏=3免打扰4离线 0x03 标志(T) + 朋友服务号(L)+信息(S)+信息类型(T) 标志 1=系统 2=用户 发送消息,服务号=0是系统消息 1=用户某某已经把你加为好友 2=用户某某请求你通过身份验证 3=用户某某同意了你的验证要求 4=用户某某拒绝了你的验证请求 0x04 成功/失败(T)+朋友服务号(L)+昵称(S)+肖像(M)+性别(T)+年龄(T)+真实姓名(S)+国 家/地区(T)+省(T)+市(S)+地址(S)+邮编(S)+学历(T)+毕业院校(S)+职业(T)+电话(S)+寻呼 (S)+电邮(S)+爱好(S)+说明(S)朋友信息回送 0x05 成功/失败(T)+组编号(T)+组名称(S) 增加组结果回送 1/0 0x06 成功/失败(T)+组编号(T)+组名称(S)修改组名称结果回送1/0 0x07 成功/失败(T)+组编号(T) 删除组结果回送1/0 0x08 成功/失败(T) 移动组成员结果回送1/0 0x09 成功/失败(T)+在线个数(T)+{服务号(L)+昵称(S)+肖像(M)+省(T)+市(S)} 查找在线 人员结果回送 0x0a 成功/失败(T)+找到个数(T)+{服务号(L)+昵称(S)+肖像(M)+省(T)+市(S)} 自定义查 找结果回送(最多50) 0x0b 标志(T)+朋友服务号(L) 增加好友结果回送标志 0=数据库失败 =1成功 =2需要身份验证 =3对方不允许加入 =4需要身份验证且不在线 0x0c 朋友服务号(L)+昵称(S)+肖像号(M)+朋友状态(T) 给在线用户增加好友 0x0e 成功/失败(T)+朋友服务号(L) 删除好友结果回送 0x10 服务号(L)+显示模式(T) 显示模式回送 =1上线=2隐藏=3免打扰4离线 0x11 成功/失败更改用户基本信息结果回送 0x12 朋友服务号(L)+文件名(S)+文件长度(L) 请求发送文件 0x13 朋友服务号(L)+允许/拒绝是否允许发送文件 1允许 0拒绝 0x14 朋友服务号(L)+文件内容(B) 发送文件 0x15 朋友服务号(L)+当前状态(T)朋友状态回送(系统发送)=1上线=2隐藏=3免打扰4离线 0x16 服务号(L) 连接测试 QQ协议网络协议--请求部份 //登录 VER=1.0&CMD=Login&SEQ=&UIN=&PS=&M5=1&LC=9326B87B234E7235 //获取消息 VER=1.0&CMD=GetMsgEx&SEQ=&UIN= //发送消息 VER=1.0&CMD=CLTMSG&SEQ=&UIN=&UN=&MG= //朋友列表 VER=1.0&CMD=List&SEQ=&UIN=&TN=160&UN=0 //获取好友状态 VER=1.0&CMD=Query_Stat&SEQ=&UIN=&TN=50&UN=0 //获取好友信息 VER=1.0&CMD=GetInfo&SEQ=&UIN=&LV=2&UN= //增加好友 VER=1.0&CMD=AddToList&SEQ=&UIN=&UN= //回应对方请求加你为好友的响应 VER=1.0&CMD=Ack_AddToList&SEQ=&UIN=&UN=&CD=&RS= //删除好友 VER=1.0&CMD=DelFromList&SEQ=&UIN=&UN= //搜索好友 VER=1.0&CMD=Finger&SEQ=&UIN=&AG=&SX=&PV= //改变自己状态,ST的代码应该和获取好友状态代码一致 VER=1.0&CMD=Change_Stat&SEQ=&UIN=&ST= //退出登录 VER=1.0&CMD=Logout&SEQ=&UIN= 基于HTTP的QQ协议之我所见 标签: qqdelphi服务器cmdhttp服务器c# 2012-07-31 15:13 2233人阅读 评论(1) 收藏 举报 分类: QQ分析(7) 有一年没有发表文章了,最近我为了一个项目对QQ协议进行研究,有些心得,不敢独享,故把其中一项协议-- 基于HTTP的QQ协议V1.1的不完整成果,拿出来与大家分享一下。 大家说到QQ协议都觉得很神秘,是因为QQ不像MSN或者ICQ协议都已经官方公布了,而QQ的没有公布。研究 它的人也不是特别的多,虽然已经有了基于QQ协议所写成的第三方软件 foicq, qq plugins for gaim, LumaQQ,但是由于他们是基于二进制Stream的协议过于复杂,大家阅读代码也有一定的难度,再加上网络 上解析QQ协议的文章也不是十分多,所以基于QQ网络协议的应用程序也是寥寥无几的。现在我就把基于HT TP的QQ协议进行一个粗浅的剖析,希望对大家有所帮助。源码部分就用我喜欢的DELPHI和现在比较流行的 C#语言对QQ协议的实现进行具体分析。 1、找寻支持QQ HTTP协议的服务器。 大家也许会被一些假像所迷惑,也许会认为QQ的HTTP服务器是基于80口进行通信的(如:218.17.209.23: 80),其实不然,正真基于HTTP的服务器应该是:http://tqq.tencent.com:8000/,它是一个通过8000口 进行通讯的服务器。 由于QQ的HTTP服务器并不支持HTTP协议中GET方法,它支持POST方法。所以我们要给QQ的HTTP协议传参数 ,那么就必需要用POST方式才行。 2、C#和DELPHI是实现HTTP的POST方法的通信。 C#: C#里System.Web空间下提供了一个叫做WebClient的对象,使用此对象就可以使C#直接对服务器发送WEB 客户端的请求。那么我们要对服务器提交POST方法那么就必须使用其UploadData()方法才行。首先把要请 求的信息先转换为字节(因为POST提交的是字符的流数据),然后再做为UploadData()的参数。使用Uplo adData()进行数据提交,最后返回,POST的回馈信息。如下: WebClient _client = new WebClient(); string postValues = "VER=1.0&CMD=Query_Stat&SEQ=12321&UIN=29501213&TN=50&UN=0"; Byte[] byteArray = System.Text.Encoding.ASCII.GetBytes(postValues); Byte[] pageData = _client.UploadData(Host,"POST",byteArray); 这样,我们就利用C#进行了一次HTTP的POST方法提交了。 DELPHI: Delphi里我们利用一个比较流行的第三方VCL,INDY HTTP(这个组件D6,D7里面自带)进行HTTP通信。 使用其的POST方法便可以进行HTTP的POST通信,因为组件比较好用,我就不在其描述具体的过程了。大家 可以参考以下代码: function PostWebPage(url,para:String;TimeOut:Integer):String; var tmpWeb:TIdHTTP; retrun:String; Proxy:String; i:Integer; paralist:TStrings; begin retrun:=''; try   paralist:=TStringList.Create;   paralist.Text:=_Replacing(para,'&',#13#10);   tmpWeb:=TIdHTTP.Create(nil);   tmpWeb.ReadTimeout:=TimeOut;   for i:=1 to 3 do   begin     try     retrun:=tmpWeb.Post(url,paralist);     except end;     if retrun<>'' then break;   end; finally     tmpWeb.Disconnect;     FreeAndNil(tmpWeb);     FreeAndNil(paralist); end; Result:=retrun; end; 值在传入、返回时,其是基于UTF-8进行的,C#显示中文是很常,而DELPHI就要进行UTF-8的转换了。大家 可通过Utf8ToAnsi()、AnsiToUtf8()进行转换。(编码转换是C#的优越性之一) 3、实现QQ的用户登录。 在QQ通信中用户必需要登录后才可以进行互相发送信息等。QQ的登录是很关键的,大家所看到的用户在线 ,并不是用户的QQ一直连接着服务器,而是定时发送消信给服务器,证明自己还连着线,如果超出时间QQ 就认为用户已经掉线了。 在登录协议中,QQ的密码是用标准的MD5来进行加密,DELPHI的用户只需要下个MD5加密模块就可以了,而 C#自已带有,但是直接用不了,必需进行处理后,才能使其变成标准的MD5,处理代码如下:             public static string MD5(string toCryString) {   MD5CryptoServiceProvider hashmd5;   hashmd5 = new MD5CryptoServiceProvider();   return BitConverter.ToString(hashmd5.ComputeHash(Encoding.Default.GetBytes(toCryString))).Replace(" -","").ToLower();//asp是小写,把所有字符变小写 } 了解QQ是如何对用户密码加密后,那么我们就开始真正,解析QQ的HTTP登录协议了,我们把协议当传POST 的参数传给服务器,而服务器则回馈相应的信息给客户端: 传入协议: VER=1.1&CMD=Login&SEQ=&UIN=&PS=&M5=1&LC=9326B87B234E7235 VER是用来说明QQ协议的版本,CMD是说明协议的命令,Login就是指QQ的登录了,SEQ是他的为了防止重 复发送而设定的一个标记,一般我们取当前时间数值的一段放入即可。(C#:DateTime.Now.Ticks.ToStr ing().Substring(7,7) DELPHI:CopyStr(inttostr(GetTickCount()),1,5)),UIN是说明你当前要登录 的用户QQ号,PS,是MD5加密过后的密码的值。 返回协议: VER=1.1&CMD=Login&SEQ=11281&UIN=&RES=0&RS=0&HI=60&LI=300(成功) RES为0表示成功返回,RS为0表示登录成功。 VER=1.1&CMD=Login&SEQ=11422&UIN=315103947&RES=0&RS=1&RA=登录失败 RS为1表示登录失败,那么就会出现提示信息RA说明原因。 4、获得QQ名单。 如果您加了您的好友,那么您的好友就会放入你的QQ的好友名单里面,那么我们要得到QQ名单就必需给QQ 服务器发送得到好友名单的协议(我就不从复已知的参数了): VER=1.1&CMD=List&SEQ=&UIN=&TN=160&UN=0 服务器得到协议后如果成功则返回: VER=1.1&CMD=LIST&SEQ=43661&UIN=29501213&RES=0&FN=1&SN=24&UN=561256,1943497,.... UN后面则是您好友的QQ号码,每个号码都由,进行分开。那么我们只需要得到UN后面的代码,把它列表化 就OK了。C#可以用string.Split(',')把值放入列表进行处理,而DELPHI可以使用Split()把数值放入TStr ings里进行处理。 5、获得QQ好友在线名单 获得QQ好友在线名单,跟获得好友名单差不多,唯一不同的是用的命令不同用的是Query_Stat,协议如下 : VER=1.1&CMD=Query_Stat&SEQ=&UIN=&TN=50&UN=0 服务器得到协议后如果成功则返回: VER=1.1&CMD=QUERY_STAT&SEQ=-1&UIN=29501213&RES=0&FC=141,270,270,&FN=1&SN=3&ST=10,10,10,&UN=1 2327207,24259132,29501213,&NK= □,微程,鶹鸑,& FC为QQ头像的的ID,如的头像ID为270,那么其头使用的图片为91.bmp,其算法为ID/3+1。ST为QQ用户的状 态,10为上线,20为离线,30为忙碌。UN为在线用户的QQ号,NK为在线用户的QQ昵称。ST,UN,NK,每个 逗号隔开的数据相互对应。在得到消息后如果用的是DELPHI语言,那么要用Utf8ToAnsi()进行转换,不然 会出现乱码。 6、得到QQ用户的信息。 如果要看到QQ用户的真实名称,MAIL,年龄,个人说明等信息,那么我们必需要向服务器发送得到好友信 息的信息: VER=1.1&CMD=GetInfo&SEQ=&UIN=&LV=2&UN= UN为要查看用户信息的QQ号。 服务器得到协议后如果成功则返回: VER=1.1&CMD=GETINFO&SEQ=12707&UIN=415103947&RES=0&AD=云南昆明mailto:&AG=0&EM=Microprogramer@hotmail .com&FC=270&HP=msger.org(建设中...)&JB=程序员&LV=2&PC=650000&PH=0871-6466529&PR=网络为媒%252 c关系为本%252c信息为财%252c客户为主.%0d%0a&PV=云南省&RN=刘X&SC=社会大学&SX=0&UN=24259132&NK= 微程 AD用户的联系地址,AG为用户年龄,EM为用户MAIL,FC为用户头像,HP为用户网站,JB为用户职业,PC为 用户邮编,PH为用户联系电话,PR为用户简介,PV为用户所以的省,RN为用户真实名称,SC为用户毕业院 校,SX为用户性别,UN为用户QQ号,NK为用户QQ昵称。在得到消息后如果用的是DELPHI语言,那么要用Ut f8ToAnsi()进行转换,不然会出现乱码。 7、增加QQ好友。 想要新增好友,就要发送AddToList命令给服务器,具体命令如下: VER=1.1&CMD=AddToList&SEQ=&UIN=&UN= UN为我们要增加用户的QQ号。 服务器得到协议后如果成功则返回: VER=1.1&CMD=AddToList&SEQ=13666&UIN=415103947&RES=0&CD=0&UN=24259132 CD为被加QQ的身份验证状态,CD为0表示“允许任何人把我列为好友”,CD为1表示“需要身份证认才能把 我列为好友”,CD为3表示“不允许任何人把我列为好友”。如果CD为0那么信息回馈后,用户就直接加为 好友了,如果CD为1,那么还要发送一次回应加为好友的响应。 8、回应加为好友的响应。 回应加为好友响应是双方的:1、如果你发送了请求加对方为好友,如果对方需要验证,那么必需发送回 应加为好友的响应。2、如果对方发送加为好友请求给你,那么你可以加应加为好友的响应,一是加为好 友,一是通过验证,一是拒决加为好友。我们要向服务器发送命令: VER=1.1&CMD=Ack_AddToList&SEQ=&UIN=&UN=&CD=&RS= CD为响应状态,CD为0表示“通过验证”。CD为1表示“拒决加为对方为好友”。CD为2表示“为请求对方 加为好友”。RS为你要请求的理由,如果您用的是DELPHI那么RS在发送之间要用AnsiToUtf8()进行转换, 不然发送过后,请求理由会变成“?”。 服务器得到协议后如果成功则返回: VER=1.1&CMD=Ack_AddToList&SEQ=1130&UIN=415103947&RES=0& 9、删除好友。 删除好友其实很容易,向服务器发送DelFromList命令则可以删除用户: VER=1.1&CMD=DelFromList&SEQ=&UIN=&UN= UN为要删除用户的QQ号。 服务器得到协议后如果成功则返回: VER=1.1&CMD=DelFromList&SEQ=24514&UIN=415103947&RES=0& 10、改变用户当前状态。 可以把QQ设置为在线,隐身等状态,我们可以发送Change_Stat给服务器以改变当前状态,具体命令如下 : VER=1.1&CMD=Change_Stat&SEQ=&UIN=&ST= ST为要改变的状态,10为上线,20为离线,30为忙碌。 服务器得到协议后如果成功则返回: VER=1.1&CMD=Change_Stat&SEQ=17512&UIN=415103947&RES=0& 11、退出登录 要退出登录,要向服务器发送命令Logout,具体命令如下: VER=1.1&CMD=Logout&SEQ=&UIN= 服务器得到协议后如果成功则返回: VER=1.1&CMD=LOGOUT&SEQ=15803&UIN=415103947&RES=0 12、获得好友QQ的消息 如果要接收好友的消息,要向服务器发送命令GetMsgEx,具体命令如下: VER=1.1&CMD=GetMsgEx&SEQ=&UIN= 服务器得到协议后如果成功则返回: VER=1.1&CMD=GETMSGEX&SEQ=56661&UIN=29501213&RES=0&MN=3&MT=99,9,9,&UN=24259132,24259132,24259 132,&MG=30 ,asdfasdfasdfasdf ,asdfasdfasdf ,& MT表示消息类型,99表示系统消息,9表示用户消息。UN表示消息发送来源用户,MG表示发送的消息,MG 消息可以表示某些特定的系统含意,譬如:当MT为99,MG为30,UN为24259132则表示用户4259132现在处 于忙碌状态,可根据此消息进行好友列表的刷新,提高效率。在得到消息后如果用的是DELPHI语言,那么 要用Utf8ToAnsi()进行转换,不然会出现乱码。 13、向好友QQ发送消息 要发送消息给好友,要向服务器发送命令CLTMSG命令,具体命令如下: VER=1.1&CMD=CLTMSG&SEQ=&UIN=&UN=&MG= UN为消息发送给的用户QQ号码,MG为发送给该用户的消息。如果您用的是DELPHI那么MG在发送之间要用An siToUtf8()进行转换,不然发送过后,消息会变成“?”。 服务器得到协议后如果成功则返回: VER=1.1&CMD=CLTMSG&SEQ=15803&UIN=415103947&RES=0 好了,以上就是QQ基于HTTP的一个不完全的协议分析,在无源码前提下,在下能力有限,只能够分析这么 多了。利用以上协议您就可以实现很多东西,如:QQ机器人,QQ广告系统,即时通讯的整合工具等等。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档