|
说明: 本文档说明的是解密以后的TCPF数据包的字段内容。有关如何解密,请参阅有关的其它文档。分析的结果,是基于QQ 2003 (0808) 内部代码 0A 1D的版本。 0x0022,登录命令 发送方:客户端 样本: 000: 4A 35 5D 6E AE DB FA 9C 008: 96 BE 19 7E A3 E2 B2 48 016: 00 00 00 00 00 00 00 00 024: 00 00 00 00 00 00 00 00 032: 00 00 00 3A 30 9B 69 60 040: A8 32 73 B2 22 1F AA 65 048: 6C 09 F8 01 0A 3A 0D 30 056: 92 CD 77 AB 42 B9 BC 64 064: 9F 17 57 D4 C3 000 - 015: 用户QQ密码的 MD5 的 MD5 作为密钥,对空字串进行加密的结果。0A 1D版的TEA算法采取了随机PADDING的方式,所以这个数字每次看起来都不同。但是解密以后总是空字符串。 016 - 016: 总是 0x00。 017 - 020: 以前为IP地址,现在为全零。不知道具有互联网IP的机器是否有真正的地址。 021 - 022: 以前为端口号,现在为全零。 023 - 051: 不明含义,总是相同。 052 - 052: 登录模式。0A为正常方式,28为隐身。 053 - 068: 应该是和机器相关的识别号,在相同的机器上总是相同。 响应方:服务器 成功登录的样本: 000: 00 61 42 58 45 55 6B 58 008: 7A 42 57 36 78 6E 49 41 016: 59 01 82 5D 90 40 E7 A7 024: E3 0F A0 7F 00 00 01 1F 032: 40 3F 51 22 DA 03 0A 5B 040: 83 50 D2 91 55 AE FC 3A 048: 5B D4 E9 31 97 C5 85 13 056: 64 6B 30 0A CE F1 33 3D 064: 8D C2 CF 1F 40 3D AC F9 072: 8E 1F 40 00 00 1C BB 67 080: 00 CB 49 E6 FF B6 FB 01 088: 97 41 6E 96 30 48 76 48 096: EF B8 1D 1E 5A EA EB E9 104: AB 00 4A 23 D2 00 00 00 112: 00 00 00 00 00 00 00 00 120: 00 40 E7 A7 E3 3F 51 22 128: 91 00 00 00 00 00 00 00 136: 00 000 - 000: 成功登录应该为0。 001 - 016: 以后通信的密钥。 017 - 020: 登录的QQ号码。 021 - 026: 服务器检测到的客户端的IP地址和端口号。 027 - 032: 127.0.0.1:8000,应该是服务器检测到自己的IP和端口号?作用不明。 033 - 036: 本次登录时间? ...... 063 - 068: 一个端口为8000的IP地址,作用不明。 069 - 074: 一个端口为8000的IP地址,这个地址就是DTPF协议组通讯的服务器。 075 - 076: 总是0,应该为分隔。 ...... 109 - 120: 总是0。 121 - 124: 客户端的IP。(上次登录的IP?) 125 - 128: 上次登录退出时间? ... 129 - 136: 总是0。 其它:未知。 密码错误的样本(用Random Key解密):
000: 02 C3 DC C2 EB B4 ED CE 008: F3 A3 A1 000 - 000: 密码错误: 02。 001 - 010: 字符串“密码错误!”,GB18030 编码 要求转到其它服务器登录(未观察到,根据perl-OICQ的资料):
000 - 000: 转到新服务器:01。 001 - 004: 请求的QQ号。 005 - 008: 新的服务器IP。 009 - 010: 新的服务器端口号。 0x0001,注销命令:
发送方:客户端(连续发送4次) 样本: 000: 42 80 D8 9A 5A 03 F8 12 008: 75 1F 50 4C C1 0E E8 A5 000 - 015: QQ密码的 MD5 的 MD5。 0x001D,未知命令:
发送方:客户端,在登录成功后发送。而且总是连发两个。 第一个样本: 000: 03 000 - 000 :总是03,应该是子命令。 第二个样本: 000: 04 000 - 000 :总是04,应该是子命令。 响应方:服务器(定长的响应) 第一个响应样本: 000: 03 00 52 65 76 65 6D 6D 008: 41 35 65 52 54 64 4E 36 016: 64 4B 00 00 00 00 00 00 024: 00 00 00 00 00 00 38 3D 032: 1E 4A 4E 36 53 87 8E B5 040: E0 24 5C 97 80 8C 64 23 048: F4 FF BC 42 69 72 39 1D 056: F6 31 22 65 37 BE 00 D1 064: 8E A6 F8 4C 75 82 F7 B4 072: 49 1F FF 72 3E 26 01 13 080: 1B 18 F6 5A BD 8E 58 00 088: 01 00 00 000 - 000: 03,应该表明是对03号子命令的响应。 001 - 001: 00,应该是分隔。 002 - 017: 16个字符,全由字母和数字组成。 018 - 029: 全0。 030 - 030: 总是38,应该是后面数据的长度。 ... 087 - 090: 总是 00 01 00 00。 第二个响应样本: 000: 04 00 43 44 7A 7A 38 63 008: 74 6A 52 55 4B 55 35 43 016: 52 6B 00 00 00 00 00 00 024: 00 00 00 00 00 00 38 A2 032: 5B B9 D3 0E 67 E8 93 BD 040: 0E B4 F6 AE BF 54 47 D7 048: 0F 69 84 5D F2 81 5D D8 056: 12 BF EC 1E 1A 83 D2 58 064: 1D 94 D4 03 EB 91 3B 13 072: A6 B4 66 37 5C A1 96 48 080: 15 8F BD E0 A8 6C 5F 00 088: 01 00 00 000 - 000: 04,应该表明是对04号子命令的响应。 0x0006,获取用户信息:
发送方:客户端 样本: 000: 32 35 33 32 30 38 34 38 需要获取信息的用户QQ号码。ascii字符串形式。 应答方:服务器 样本: 000: 32 35 33 32 30 38 34 38 008: 1E 6A 65 66 66 5F 79 65 016: 63 6E 1E D6 D0 BB AA C8 024: CB C3 F1 B9 B2 BA CD B9 032: FA 1E B9 E3 B6 AB CA A1 040: 1E 35 31 30 30 30 30 1E 048: 64 6F 6E 67 20 66 65 6E 056: 67 20 72 64 2E 20 31 34 064: 35 1E 2D 1E 33 31 1E C4 072: D0 1E 2D 1E 6A 65 66 66 080: 5F 79 65 63 6E 40 73 69 088: 6E 6F 6D 61 63 2E 63 6F 096: 6D 1E 1E 1E 1E 30 1E 1E 104: CD A8 D0 C5 1E 2D 1E 30 112: 1E 1E 1E 32 30 34 1E 31 120: 33 30 30 35 31 36 31 32 128: 34 34 1E 30 1E CF B2 BB 136: B6 BA CD C8 CE BA CE C8 144: CB C1 C4 CC EC A1 A3 1E 152: B9 E3 D6 DD 1E 2D 1E 2D 160: 1E 30 1E 32 1E 30 1E 55 168: 53 54 43 1E 31 32 1E 31 176: 32 1E 32 1E 30 1E 2D 返回的数值由一个个字段组成,数字也是以字符串表示,没有填写的很多为-。每个字段用1E分隔。分别的含义为: QQ号码,昵称,国家,省,邮政编码,街道地址,电话,年纪, 性别:男女的GB编码。 真实姓名,电子邮件,寻呼编号,寻呼号,寻呼机供应商,寻呼台号,寻呼机类型, 职业,主页, 添加好友认证方式:'0' 不认证,'1' 需认证,'2' 不许添加 未知20,未知21, 头像:0-255的字符串表示,每三个代表一组正常,离开,忙的头像 手机号码, 手机类型:'0' 为无移动QQ,'1'为开通移动QQ。 自我描述: 城市, 未知27,未知28,未知29, 是否公开手机:'0' 公开 '1' 好友 '2' 不公开 是否公开联系方式:'0' 公开 '1' 好友 '2' 不公开 学校, 星座:以下的对应关系,见pagers.plist 生肖, 血型, QQShow, 未知37。 0x000D,设置状态:
发送者:客户端 样本: 000: 0A 00 00 00 00 000 - 000: 状态:0A 正常,1E 离开,40 隐身 001 - 004: 总是0。 应答者:服务器
样本: 000: 30 成功返回 30 ('0')。 0x0026,获取好友列表:
发送者:客户端 样本: 000: 00 00 00 000 - 001: 获取的好友列表的位置标志(第一个从 00 00 开始,以后的根据上一次响应包的标志值)。 002 - 002: 总是 0。(QQ 2000 无此数据) 应答者:服务器 样本: 000: 00 32 01 72 D1 90 00 ED 008: 11 00 04 B0 A2 BB A2 00 016: 00 01 74 55 CD 00 D8 15 024: 01 06 BB A8 D4 F3 C0 E0 032: 02 40 01 7C 13 30 00 DE 040: 18 01 08 CF EB B7 C9 B5 048: C4 D0 C4 00 00 01 7C 50 056: 8A 00 99 1D 00 03 47 59 064: 48 00 02 01 7D 1A 2A 00 072: B7 00 01 04 D4 B6 BA BD 080: 00 00 01 7E 79 A5 00 A2 088: 13 01 04 D1 A9 C2 D8 00 096: 00 01 81 E1 25 00 21 17 104: 01 07 B2 BB D2 AA BF DE 112: 20 00 00 00 01 82 90 00 120: 60 1F 00 04 6A 65 66 66 128: 00 00 00 13 3E DF 00 60 136: 17 01 09 20 20 73 61 62 144: 72 69 6E 61 00 40 00 32 152: F5 5E 00 39 19 01 06 79 160: 76 6F 6E 6E 65 00 00 00 168: 38 F3 B9 00 C3 00 00 08 176: CA B1 B4 FA C0 CF C8 CB 184: 00 00 00 41 98 95 00 90 192: 15 01 04 44 65 65 72 00 200: 00 00 44 B7 10 00 90 14 208: 01 08 D4 C2 B9 E2 C5 AE 216: BA A2 02 00 00 55 04 61 224: 00 90 11 01 08 C6 AF C1 232: C1 B1 A6 B1 B4 02 00 00 240: 59 AF 21 00 60 1A 01 07 248: CF B8 CE C3 D7 D0 7E 02 256: 66 00 5A 86 9B 00 21 00 264: 01 04 C0 B6 D6 BD 00 00 272: 00 5C 03 6E 00 A5 20 00 280: 06 B3 CC BA A3 C2 D7 00 288: 00 00 67 7C EC 00 72 1C 296: 00 06 6A 61 63 33 33 33 304: 00 00 00 70 7F C8 00 78 312: 00 01 04 C3 A8 C1 E1 00 320: 00 00 82 00 BF 00 51 00 328: 00 09 20 20 20 B7 BD BE 336: F5 CF FE 00 00 00 A0 C0 344: 6A 00 63 12 01 04 C3 CE 352: BE B2 00 00 00 D1 06 59 360: 00 60 00 00 08 D2 BB BD 368: A3 C6 AE CF E3 00 40 00 376: F0 BA 07 00 8A 00 01 04 384: C7 E0 C7 E0 00 00 00 F2 392: 69 9F 00 AB 16 01 0A 5E 400: 5F 5E C7 EF C7 EF 5E 5F 408: 5E 00 00 01 03 1B 44 00 416: D5 13 00 08 B0 AE C4 E3 424: B5 C4 C8 CB 00 00 01 0F 432: A2 D5 00 78 02 01 05 57 440: F2 AB C4 DE 02 40 01 17 448: 48 76 00 51 00 00 06 BA 456: DC B0 B2 C8 AB 00 00 01 464: 3B AD D7 00 F0 18 01 0A 472: B9 C6 BB F3 A1 CA CC EC 480: CA B9 00 00 01 44 AE 12 488: 00 87 20 00 0A 20 20 20 496: 20 51 51 D6 AE B8 B8 00 504: 00 01 B3 8C 71 00 99 1A 512: 00 08 C3 E6 B4 F8 CE A2 520: D0 A6 00 00 01 C0 29 68 528: 00 F9 12 01 06 D0 A1 C0 536: B1 BD B7 00 00 01 CA 96 544: 03 00 F9 00 01 04 D0 A1 552: BB A2 02 40 01 CB 81 C2 560: 00 90 12 01 0B 4C A1 EE 568: 76 65 CF E3 C4 CE B6 F9 576: 00 00 01 E9 1B 7F 00 0C 584: 18 00 08 B6 FE C2 BF B1 592: E4 C1 CB 00 00 02 20 F1 600: D4 00 A8 13 01 04 CE A8 608: D2 BB 00 00 02 36 B5 07 616: 00 A8 1A 01 04 BF C9 DD 624: E6 02 00 02 4C 03 88 00 632: A8 0F 01 0C A6 C4 A6 D3 640: A7 F1 A7 D1 C6 A1 C0 E6 648: 02 00 02 4D 98 8B 00 B4 656: 16 00 06 BB B5 C6 A2 C6 664: F8 00 00 02 65 0A 51 00 672: A8 00 01 04 C7 A7 CA BD 680: 00 00 02 7A DB D0 00 90 688: 00 01 02 58 32 00 00 02 696: 7C 37 4E 00 7B 15 01 04 704: 63 6F 63 6F 00 00 02 88 712: D5 EA 00 42 00 00 04 D1 720: C5 B7 E7 00 00 02 93 67 728: 5A 00 90 12 01 0C C4 C7 736: C3 B4 B0 AE CB FB CE AA 744: CA B2 00 00 000 - 001: 下一次发送0x0026命令的数据起始位置。如果为FF FF,则没有后续数据需要继续接收。 以后为一组组的数据,每组数据的定义为(按偏移位置描述): 000 - 003: QQ号码 004 - 004: 总是0,分隔 005 - 005: 头像编号 006 - 006: 年纪 007 - 007: 性别。00 男;01 女。 008 - 008: 昵称长度。 009 - 009 + 昵称长度 - 1: 昵称。 009 + 昵称长度: QQ Show 标志。 bit 1: 是否有QQ Show。 010 + 昵称长度:用户属性标志。 bit 1: 是否QQ会员。 bit 5: 是否开通移动QQ。 bit 6: 是否绑定手机。 0x0027,获取在线好友
发送者:客户端 样本: 000: 02 00 00 00 00 000 - 000: 0x02,获取在线好友清单。0x03,作用不明。 001 - 004: 总是 0x00。 应答者:服务器 0x02 的应答样本: 000: FF 01 0F A2 D5 01 00 00 008: 00 00 00 00 00 0A 04 05 016: 44 F2 A5 BB 57 3B 85 4B 024: CF D0 F0 72 5F EE A4 31 032: 02 40 000 - 000: 标志。FF 应该表示没有后续数据。但如果在一个包内无法传送全部好友(大约最多20个好友左右)时的标志是什么,暂时未知。 001 - 为33字节一组的在线好友数据。每组数据的描述(按偏移位置计算): 000 - 003: QQ号。 004 - 004: 未知作用。目前发现总是0x01。 005 - 008: IP 地址。目前全零。 009 - 010: 端口号。目前全零。 011 - 011: 总是00,应为地址后的分隔。 012 - 012: 状态。0A 正常,1E 离开。 013 - 014: 怀疑代表所使用客户软件所具有的功能。QQ 2003为04 05。 015 - 030: 该QQ号码加上其Session Key后的MD5Digest。是否两程序直接通讯时候的密钥? 031 - 032: 用户的属性。同0x0026指令用户数据的最后两字节定义。 0x03 的应答样本:
000: FF 04 4A A2 01 02 00 00 008: 00 00 00 00 00 0A 00 00 016: 00 00 00 00 00 00 00 00 024: 00 00 00 00 00 00 00 00 032: 00 00 04 4A A2 02 02 00 040: 00 00 00 00 00 00 0A 00 048: 00 00 00 00 00 00 00 00 056: 00 00 00 00 00 00 00 00 064: 00 00 00 04 4A A2 03 02 072: 00 00 00 00 00 00 00 0A 080: 00 00 00 00 00 00 00 00 088: 00 00 00 00 00 00 00 00 096: 00 00 00 00 04 4 [1] [2] [3] 下一页
|