说明:
本文档说明的是解密以后的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 C3000 - 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: 00000 - 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 A1000 - 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 A5000 - 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 00000 - 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 00000 - 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 00000 - 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 40000 - 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 4A A2 04 104: 02 00 00 00 00 00 00 00 112: 0A 00 00 00 00 00 00 00 120: 00 00 00 00 00 00 00 00 128: 00 00 00 00 00 04 4A A2 136: 05 02 00 00 00 00 00 00 144: 00 0A 00 00 00 00 00 00 152: 00 00 00 00 00 00 00 00 160: 00 00 00 00 00 00 04 4A 168: A2 06 02 00 00 00 00 00 176: 00 00 0A 00 00 00 00 00 184: 00 00 00 00 00 00 00 00 192: 00 00 00 00 00 00 00 04 200: 4A A2 07 02 00 00 00 00 208: 00 00 00 0A 00 00 00 00 216: 00 00 00 00 00 00 00 00 224: 00 00 00 00 00 00 00 00 232: 04 4A A2 08 02 00 00 00 240: 00 00 00 00 0A 00 00 00 248: 00 00 00 00 00 00 00 00 256: 00 00 00 00 00 00 00 00 264: 00 04 4A A2 09 02 00 00 272: 00 00 00 00 00 0A 00 00 280: 00 00 00 00 00 00 00 00 288: 00 00 00 00 00 00 00 00 296: 00 00 04 4A A2 0B 02 00 304: 00 00 00 00 00 00 0A 00 312: 00 00 00 00 00 00 00 00 320: 00 00 00 00 00 00 00 00 328: 00 00 00 04 4A A2 0C 02 336: 00 00 00 00 00 00 00 0A 344: 00 00 00 00 00 00 00 00 352: 00 00 00 00 00 00 00 00 360: 00 00 00 00 04 4A A2 0D 368: 02 00 00 00 00 00 00 00 376: 0A 00 00 00 00 00 00 00 384: 00 00 00 00 00 00 00 00 392: 00 00 00 00 00000 - 000: 标志。FF 应该表示没有后续数据。
其他:未知。
0x0016 发送消息发送者:客户端
样本:
000: 00 01 82 90 01 82 5D 90
008: 0A 1D 00 01 82 90 01 82 016: 5D 90 9F 22 9C 77 9E B5 024: 0C 68 60 0F 13 37 06 F4 032: EA 2C 00 0B 4D B5 3F 65 040: 38 44 00 60 00 00 00 01 048: 00 00 00 00 01 61 61 61 056: 20 00 0A 00 00 00 00 86 064: 02 CB CE CC E5 0D000 - 003: 发送方QQ号。
004 - 007: 接收方QQ号。008 - 009: 发送方客户端版本号。010 - 013: 发送方QQ号。014 - 017: 接收方QQ号。018 - 033: 发送方QQ号+session Key的MD5 Digest。034 - 035: 总是00 0b。怀疑表明到消息特性前的长度。036 - 037: 消息的序列号。038 - 041: 发送时间。为自1970年1月1日起经过的秒数。042 - 042: 总是00043 - 043: 头像。044 - 046: 总是0x00。047 - 047: 消息特性标识。旧版0x00,新版0x01。是否表明存在字体属性字段。048 - 051: 总是0x00。052 - 052: 消息类型。0x01,普通消息。0x02,自动回复消息。053 - 不定长: 消息内容。C字符串形式,以0x00结尾。好象每个消息结尾前都有一个空格字符。消息结尾+000 - 000: 字号。+001 - 003: 颜色的RGB值。+004 - 004: 未知。总是0x00。+005 - 005: 字符编码类别。0x86,GB2312。0x00,英文字符。+006 - 006: 与选用的字体相关的属性,具体含义未知。+007 - 不定长。字体名。最后:与选定字体相关的属性,具体含义未知。应答者:服务器
样本:
000: 00
000 - 000: 0x00,成功。
0x0017,接收消息
发送者:服务器
其中 018-019为消息类型标识,目前已观察到的消息类型有:
00 09 普通消息
00 20 群消息00 21 加入群通知00 22 被从群删除通知00 23 请求批准加入群通知00 24 加入群请求批准通知00 25 加入群请求拒绝通知00 26 创建群通知00 30 系统通知消息 文件传送通知普通消息(00 09)样本:
000: 01 82 5D 90 00 01 82 90
008: 00 09 49 BB 3D 8D C2 EB 016: 1F 40 00 09 0A 1D 01 82 024: 5D 90 00 01 82 90 AA D6 032: 54 47 90 04 6D 76 8D D0 040: 4D CB 64 B8 87 7A 00 0B 048: 00 6B 3F 65 39 32 00 60 056: 00 00 00 01 00 00 00 00 064: 01 62 62 62 20 00 0A 00 072: 00 00 00 86 02 CB CE CC 080: E5 0D000 - 003: 发送者的QQ号。
004 - 007: 接收者的QQ号。008 - 011: 应为服务器转发消息的流水号。012 - 015: 发送者的IP地址。(转发的消息是服务器的地址)016 - 017: 发送者的端口号。018 - 019: 消息类型标识。(00 09)020 - 021: 发送者QQ版本号。022 - 025: 发送者QQ号。026 - 029: 接收者QQ号。030 - 045: 发送方QQ号+session Key的MD5 Digest。046 - 047: 总是00 0b。怀疑表明到消息特性前的长度。048 - 049: 消息的序列号。050 - 053: 发送时间。为自1970年1月1日起经过的秒数。054 - 054: 总是00。055 - 055: 头像。056 - 058: 总是0x00。059 - 059: 消息特性标识。旧版0x00,新版0x01。是否表明存在字体属性字段。060 - 063: 总是0x00。064 - 064: 消息类型。0x01,普通消息。0x02,自动回复消息。065 - 不定长: 消息内容。C字符串形式,以0x00结尾。好象每个消息结尾前都有一个空格字符。消息结尾+000 - 000: 字号。+001 - 003: 颜色的RGB值。+004 - 004: 未知。总是0x00。+005 - 005: 字符编码类别。0x86,GB2312。0x00,英文字符。+006 - 006: 与选用的字体相关的属性,具体含义未知。+007 - 不定长。字体名。最后:与选定字体相关的属性,具体含义未知。群消息(00 20)样本:
000: 0C 04 A9 F4 01 82 5D 90
008: 00 0D 1A 8C DA 12 5F C6 016: 1F 40 00 20 0C 04 A9 F4 024: 02 01 39 A4 76 00 00 00 032: 01 3F 7C EF 88 00 00 00 040: 00 00 12 68 69 0D 0A 20 048: 00 09 00 00 00 00 86 02 056: CB CE CC E5 0D000 - 003: 内部群号。
004 - 007: 接收者的QQ号。008 - 011: 应为服务器转发消息的流水号。012 - 015: 服务器IP地址。016 - 017: 服务器的端口号。018 - 019: 消息类型标识。(00 20)020 - 023: 外部群号。024 - 024: 02,可能表示临时群。025 - 028: 群消息发送者QQ号。029 - 030: 总是0x00。031 - 032: 消息的序列号。033 - 036: 发送时间。037 - 040: 总是0x00。041 - 042: 后面消息数据的长度。065 - 不定长: 消息内容。C字符串形式,以0x00结尾。好象每个消息结尾前都有一个空格字符。消息结尾+000 - 000: 字号。+001 - 003: 颜色的RGB值。+004 - 004: 未知。总是0x00。+005 - 005: 字符编码类别。0x86,GB2312。0x00,英文字符。+006 - 006: 与选用的字体相关的属性,具体含义未知。+007 - 不定长。字体名。最后:与选定字体相关的属性,具体含义未知。加入群通知(00 21)样本
000: 0C 21 53 A4 01 82 5D 90
008: 00 04 5F 77 DA 12 5F C6 016: 1F 40 00 21 00 17 0D 24 024: 01 01 82 5D 90000 - 003: 内部群号。
004 - 007: 接收者的QQ号。008 - 011: 应为服务器转发消息的流水号。012 - 015: 服务器IP地址。016 - 017: 服务器的端口号。018 - 019: 消息类型标识。(00 21)020 - 023: 外部群号。024 - 024: 群类型:0x01,固定群;0x02,临时群。025 - 028: 新添加的成员。(自己的QQ)。被从群删除通知(00 22)样本
000: 0C 21 53 A4 01 82 5D 90
008: 00 02 A6 55 DA 12 5F C6 016: 1F 40 00 22 00 17 0D 24 024: 01 01 82 5D 90000 - 003: 内部群号。
004 - 007: 接收者的QQ号。008 - 011: 应为服务器转发消息的流水号。012 - 015: 服务器IP地址。016 - 017: 服务器的端口号。018 - 019: 消息类型标识。(00 22)020 - 023: 外部群号。024 - 024: 群类型:0x01,固定群;0x02,临时群。025 - 028: 被删除的成员的QQ号。请求批准加入群通知(00 23)样本
000: 0C 21 53 A4 0E C9 37 04
008: 00 09 2E 9F DA 12 5F 8B 016: 1F 40 00 23 00 17 0D 24 024: 01 01 82 5D 90 04 74 65 032: 73 74000 - 003: 内部群号。
004 - 007: 接收者的QQ号。008 - 011: 应为服务器转发消息的流水号。012 - 015: 服务器IP地址。016 - 017: 服务器的端口号。018 - 019: 消息类型标识。(00 23)020 - 023: 外部群号。024 - 024: 群类型:0x01,固定群;0x02,临时群。025 - 028: 申请加入者QQ号。029 - 不定长: Pascal 字符串的附言。加入群请求批准通知(00 24)样本
000: 0C 21 53 A4 01 82 5D 90
008: 00 0B B2 6B DA 12 5F C6 016: 1F 40 00 24 00 17 0D 24 024: 01 0E C9 37 04 02 CE DE000 - 003: 内部群号。
004 - 007: 接收者的QQ号。008 - 011: 应为服务器转发消息的流水号。012 - 015: 服务器IP地址。016 - 017: 服务器的端口号。018 - 019: 消息类型标识。(00 24)020 - 023: 外部群号。024 - 024: 群类型:0x01,固定群;0x02,临时群。025 - 028: 批准者(群管理员)QQ号。029 - 不定长: Pascal 字符串的原因。(这里总是 02 CE DE,就是“无”)加入群请求拒绝通知(00 25)样本
000: 0C 21 53 A4 01 82 5D 90
008: 00 04 72 6D DA 12 5F C6 016: 1F 40 00 25 00 17 0D 24 024: 01 0E C9 37 04 04 68 68 032: 68 68000 - 003: 内部群号。
004 - 007: 接收者的QQ号。008 - 011: 应为服务器转发消息的流水号。012 - 015: 服务器IP地址。016 - 017: 服务器的端口号。018 - 019: 消息类型标识。(00 25)020 - 023: 外部群号。024 - 024: 群类型:0x01,固定群;0x02,临时群。025 - 028: 拒绝者(群管理员)QQ号。029 - 不定长: Pascal 字符串的拒绝原因。新创建群通知(00 26)样本
000: 0C 04 A9 F4 01 82 5D 90
008: 00 0C B8 79 DA 12 5F C6 016: 1F 40 00 26 0C 04 A9 F4 024: 02 00 01 82 90000 - 003: 内部群号。
004 - 007: 接收者的QQ号。008 - 011: 应为服务器转发消息的流水号。012 - 015: 服务器IP地址。016 - 017: 服务器的端口号。018 - 019: 消息类型标识。(00 26)020 - 023: 外部群号。024 - 024: 0x02,可能表示临时群。025 - 028: 管理员QQ号。系统通知消息(00 30)样本(可能只用于通知多处登录的情况)
000: 00 00 27 10 01 82 5D 90
008: 00 00 B3 A3 00 00 00 00 016: 00 00 00 30 01 2F B1 A7 024: C7 B8 CD A8 D6 AA C4 FA 032: A3 AC 51 51 2D 32 35 33 040: 32 30 38 34 38 D4 DA B1 048: F0 B4 A6 B5 C7 C2 BC A3 056: AC C4 FA B1 BB C6 C8 CF 064: C2 CF DF A1 A3000 - 003: 发送者,10000。
004 - 007: 接收者QQ号。008 - 011: 流水号。012 - 017: 发送者IP和端口号。这里全零。018 - 019: 消息类型标识。(00 30)020 - 020: 未知021 - 021: 消息长度022 - 不定长: 消息内容。应答者:客户端
样本:
000: 01 82 5D 90 00 01 82 90
008: 00 09 49 BB 3D 8D C2 EB为接收到的消息的前16个字符。
0x0030,群操作命令第一个字节为子命令,目前了解的子命令包括:
0x01: 创建新群
0x02: 添加/删除群成员
0x03: 更改群信息
0x04: 获取群的有关信息
0x05: 激活群
0x06: 查找群
0x07: 加入群
0x08 加入群验证信息
0x09: 退出群
0x0A: 向群发送消息
0x0B: 获取在线群成员
0x0C: 获取群成员信息
0x01 创建新群
发送者:客户端
样本:
000: 01 02 02 00 00 00 00 04
008: 6E 61 6D 65 00 00 0B 61 016: 6E 6F 75 6E 63 65 6D 65 024: 6E 74 0B 64 65 73 63 72 032: 69 70 74 69 6F 6E 01 39 040: A4 76 03 50 1B 3F 04 17 048: AF 5C 00 05 A6 C3 00 06 056: 5D 10 02 90 21 67 01 82 064: 5D 90000 - 000: 0x01,创建新群子命令。
001 - 001: 0x02,代表创建的是临时群。0x01为固定群002 - 002: 身份认证模式。0x01,不需要认证;0x02,需认证;0x03,不允许添加。创建多人通话时为0x00。003 - 005: 总是 0x00。006 - 006: 分类。0x00,同学;0x01,朋友;0x02,同事;0x03,其它。007 - 不定长: Pascal字符串形式的群名。+ 000 - 001: 总是0x00。应为分隔。+ 002 - 不定长:Pascal字符串形式的群内通知。+ 000 - 不定长:Pascal字符串形式的群描述。+ 000 - 最后: 四个字节一组的群成员QQ号码。(不包括群创建者(管理员))应答者:服务器
样本:
000: 01 00 0C 04 A9 F4 0C 04
008: A9 F4000 - 000: 0x01,创建新群子命令标识。
001 - 001: 0x00,应该代表成功。002 - 005: 内部群号。006 - 009: 外部群号。0x02: 添加/删除群成员
发送者:客户端
样本:
000: 02 0C 08 9C 10 01 00 01
008: 82 90 00 32 F5 5E 00 38 016: F3 B9 00 41 98 95000 - 000: 0x02,添加删除群成员子命令标识
001 - 004: 内部群号。005 - 005: 操作。0x01,添加;0x02,删除。006 - 不定长:四个一组的涉及的QQ号码。应答者:服务器
样本:
000: 02 00 0C 08 7E 3C
000 - 000: 0x02,添加删除群成员子命令标识。
001 - 001: 0x00,应该代表成功。002 - 005: 内部群号。0x03: 更改群信息
发送者:客户端
样本:
000: 03 0C 08 7E 3C 01 02 00
008: 00 00 00 03 61 61 61 00 016: 00 03 61 61 61 03 61 61 024: 61000 - 000: 0x03,更改群信息子命令。
001 - 004: 内部群号005 - 005: 总是 0x01。应该表明操作类别是修改。006 - 006: 身份认证模式。0x01,不需要认证;0x02,需认证;0x03,不允许添加。创建多人通话时为0x00。007 - 009: 总是 0x00。010 - 010: 分类。0x00,同学;0x01,朋友;0x02,同事;0x03,其它。011 - 不定长: Pascal字符串形式的群名。+ 000 - 001: 总是0x00。应为分隔。+ 002 - 不定长:Pascal字符串形式的群内通知。+ 000 - 不定长:Pascal字符串形式的群描述。应答者:服务器
样本:
03 00 0C 08 7E 3C
000 - 000: 0x03,更改群信息子命令。
001 - 001: 0x00,应该代表成功。002 - 005: 内部群号。0x04 获取群的有关信息
发送者:客户端
样本:
000: 04 0C 04 A9 F4
000 - 000: 0x04,获取群信息子命令标识。
001 - 004: 内部群号。应答者:服务器
样本:
000: 04 00 0C 04 A9 F4 0C 04
008: A9 F4 02 00 01 82 90 02 016: 00 00 00 00 00 00 00 00 024: 04 6E 61 6D 65 00 00 0B 032: 61 6E 6F 75 6E 63 65 6D 040: 65 6E 74 0B 64 65 73 63 048: 72 69 70 74 69 6F 6E 00 056: 01 82 90 00 00 05 A6 C3 064: 00 00 06 5D 10 00 01 39 072: A4 76 00 01 82 5D 90 00 080: 02 90 21 67 00 03 50 1B 088: 3F 00 04 17 AF 5C 00000 - 000: 0x04,获取群信息子命令标识。
001 - 001: 0x00,代表成功。002 - 005: 内部群号。006 - 009: 外部群号。010 - 010: 0x02,可能代表临时群。011 - 014: 群管理员QQ号。015 - 015: 身份认证模式。0x01,不需要认证;0x02,需认证;0x03,不允许添加。创建多人通话时为0x00。016 - 018: 总是 0x00。019 - 019: 分类。0x00,同学;0x01,朋友;0x02,同事;0x03,其它。020 - 023: 总是0x00。024 - 不定长: Pascal字符串格式群名。+000 - 001: 总是0x00,应为分隔。+002 - 不定长: Pascal字符串格式的群内公告。+000 - 不定长: Pascal字符串格式的群描述。+000 - 不定长: 以0x00分隔的群成员QQ号清单。(包括群管理员)。0x05 激活群
发送者:客户端
样本:
000: 05 0C 04 A9 F4
000 - 000: 0x05,激活群子命令标识
001 - 004: 内部群号应答者:服务器
样本:
000: 05 00 0C 04 A9 F4
000 - 000: 0x05,激活群子命令标识。
001 - 001: 0x00,表示命令成功。002 - 005: 内部群号。0x06 查找群
发送者:客户端
样本:
000: 06 02 00 00 00 00
000 - 000: 0x06,查找群子命令标识。
001 - 001: 查找模式:0x01,按群编号查找。0x02,查找示范群。002 - 005: 外部群号。查找示范群全是0x00。应答者:服务器
样本:
000: 06 00 02 0C 0B CD 52 00
008: 01 86 D2 01 00 00 27 10 016: 00 00 00 00 06 B2 C6 BE 024: AD 39 34 00 00 01 28 CE 032: D2 C3 C7 D5 E2 D2 BB C8 040: BA D4 E7 D2 D1 B2 BB D4 048: D9 CA C7 B5 B1 C4 EA B2 056: BB B6 AE CA C2 B5 C4 C3 064: A7 D7 B2 C9 D9 C4 EA 0C 072: 0B CD 53 00 01 86 D3 01 080: 00 00 27 10 00 00 00 02 088: 0C B5 D8 C7 F2 B5 DB B9 096: FA D5 BD B6 D3 00 00 01 104: 1E 51 51 C8 BA C8 C3 CE 112: D2 C3 C7 BD BB C1 F7 B1 120: E4 B5 C3 C8 E7 B4 CB BC 128: F2 B5 A5 A3 BA A3 A9 0C 136: 0B CD 54 00 01 86 D4 01 144: 00 00 27 10 00 00 00 01 152: 06 D7 D4 D3 CE C2 BF 00 160: 00 01 20 B0 AE BA C3 D7 168: D4 D6 FA D3 CE B5 C4 C2 176: BF D3 D1 C3 C7 A3 AC D3 184: EB C4 E3 D2 BB C6 F0 CD 192: AC D0 D0 0C 0B CD 55 00 200: 01 86 D5 01 00 00 27 10 208: 00 00 00 02 10 C1 AA BF 216: B5 B9 AB CB BE C7 FE B5 224: C0 D4 DA CF DF 00 00 01 232: 1A C1 AA B4 B4 B9 AB CB 240: BE B4 FA C0 ED C9 CC D0 248: C5 CF A2 BD BB BB BB CD 256: A8 B5 C0 0C 0B CD 56 00 264: 01 86 D6 01 00 00 27 10 272: 00 00 00 02 12 D1 D8 BD 280: AD B1 A8 C9 E7 DF AC B8 288: E5 C8 CB D7 A8 C7 F8 00 296: 00 01 1E CC D8 D4 BC DF 304: AC B8 E5 C8 CB B5 C4 D0 312: C5 CF A2 D6 D0 D0 C4 A3 320: AC CB FB C8 CB CE F0 C8 328: C5 0C 0B CD 57 00 01 86 336: D7 01 00 00 27 10 00 00 344: 00 02 10 BA E3 CF E8 B9 352: AB CB BE CD AC CA C2 BD 360: BB C1 F7 00 00 01 28 CD 368: AC D4 DA D2 BB B8 F6 B5 376: D8 B7 BD C4 C3 B9 A4 D7 384: CA B5 C4 A3 AC C8 BA C8 392: C3 CE D2 C3 C7 BD BB C1 400: F7 B8 FC B7 BD B1 E3 0C 408: 0B CD 58 00 01 86 D8 01 416: 00 00 27 10 00 00 00 01 424: 0E 31 33 B6 B0 39 38 30 432: 31 33 31 C5 AE C9 FA 00 440: 00 01 14 C5 AE C9 FA D7 448: D4 D3 D0 C5 AE C9 FA B5 456: C4 CC EC B5 D8 A3 A1 0C 464: 0B CD 59 00 01 86 D9 01 472: 00 00 27 10 00 00 00 01 480: 0A CB DE C9 E1 CD F8 CD 488: F8 C3 CB 00 00 01 14 CD 496: F8 C1 A6 CE DE CF DE A3 504: AC D6 BB D2 AA BB A5 C1 512: AA A3 A1 0C 0B CD 5A 00 520: 01 86 DA 01 00 00 27 10 528: 00 00 00 02 09 34 31 34 536: BD CC D1 D0 CA D2 00 00 544: 01 14 D7 D4 B3 C9 D2 BB 552: CC E5 A3 AC C2 DB D1 A7 560: CA F5 CC EC B5 D8 0C 0B 568: CD 5B 00 01 86 DB 01 00 576: 00 27 10 00 00 00 02 0E 584: D3 A2 D3 EF D0 AD BB E1 592: BC BC CA F5 B2 BF 00 00 600: 01 2C D5 E2 C0 EF D3 D0 608: CE DE CA FD C4 D1 CC E2 616: A3 AC BB B9 D3 D0 CE DE 624: CA FD C4 D1 CC E2 B5 C4 632: CC E2 BD E2 A3 A1 BF EC 640: C0 B4 C0 B2 A3 A1000 - 000: 0x06,查找群子命令标识。
001 - 001: 0x00,表示命令成功。002 - 002: 0x02,也许表示查找的结果是示范群。003 - 不定长。一组组的群数据。每组的格式为:+000 - 003: 内部群号。(可能会变化) 004 - 007: 外部群号。 008 - 008: 0x01。应该表示是固定群。 009 - 012: 创建者QQ号。 013 - 015: 全为0x00。 016 - 016: 分类标识:0x00,同学;0x01,朋友;0x02,同事;0x03,其它。 017 - 不定长: Pascal字符串的群名称。+000 - 001: 全是0x00,分隔。+002 - 002: 身份验证:0x01,不需要认证;0x02,需认证;0x03,不允许添加。+003 - 不定长: Pascal字符串的群描述。0x07 加入群
发送者:客户端
样本:
000: 07 0C 0B CD 52
000 - 000: 0x07,加入群子命令。
001 - 004: 要加入的群的内部群号。应答者:服务器
样本:
000: 07 00 0C 0B CD 52 01
000 - 000: 0x07,加入群子命令。
001 - 000: 0x00,表示命令成功。002 - 005: 要加入的群的内部群号。006 - 006: 01 表示成功,02 表示需要验证信息。0x08 加入群验证信息
发送者:客户端
样本:
000: 08 0C 21 53 A4 01 00 00
008: 00 00 04 74 65 73 74000 - 000: 0x08,验证信息子命令
001 - 004: 要加入群的内部群号。005 - 005: 操作类别:0x01,请求;0x02,同意;0x03,拒绝。006 - 009: 要求加入的QQ号。(操作类别为0x01时,此字段为0)010 - 不定长,pascal字符串形式相关信息。(操作类别为0x02的时候,此信息为0xCE 0xDE,GB18030的“无”字)。应答者:服务器
样本:
000: 08 00 0C 21 53 A4
000 - 000: 0x08,加入群验证信息子命令。
001 - 000: 0x00,表示命令成功。002 - 005: 要加入的群的内部群号。0x09 退出群
发送者:客户端
样本:
000: 09 0C 0A 38 89
000 - 000: 0x09,退出群子命令。
001 - 004: 要退出的群的内部群号。应答者:服务器
样本:
000: 09 00 0C 0A 38 89
000 - 000: 0x09,退出群子命令。
001 - 000: 0x00,表示命令成功。002 - 005: 要退出的群的内部群号。0x0A 向群发送消息
发送者:客户端
样本:
000: 0A 0C 04 A9 F4 00 10 68
008: 69 20 00 09 00 00 00 00 016: 86 02 CB CE CC E5 0D000 - 000: 0x0A,向群发送消息子命令标识。
001 - 004: 内部群号。005 - 006: 消息数据长度。007 - 不定长:消息内容。C字符串形式,以0x00结尾。+000 - 000: 字号。+001 - 003: 颜色的RGB值。+004 - 004: 未知。总是0x00。+005 - 005: 字符编码类别。0x86,GB2312。0x00,英文字符。+006 - 006: 与选用的字体相关的属性,具体含义未知。+007 - 不定长。字体名。最后:与选定字体相关的属性,具体含义未知。应答者:服务器
000: 0A 00 0C 04 A9 F4
000 - 000: 0x0A,向群发送消息子命令标识。
001 - 001: 0x00,表示命令成功。002 - 005: 内部群号。0x0B 获取在线群成员
发送者:客户端
样本:
000: 0B 0C 04 A9 F4
000 - 000: 0x0B,获取在线群成员子命令标识
001 - 004: 内部群编号。应答者:服务器
样本:
000: 0B 00 0C 04 A9 F4 3C 00
008: 01 82 90 01 39 A4 76 01 016: 82 5D 90 03 50 1B 3F 04 024: 17 AF 5C000 - 000: 0x0A,向群发送消息子命令标识。
001 - 001: 0x00,表示命令成功。002 - 005: 内部群编号。006 - 006: 0x3C,未知含义。007 - 不定长: 四字节一组的在线群成员QQ号。0x0C 获取群成员信息
发送者:客户端
样本:
000: 0C 0C 04 A9 F4 00 01 82
008: 90 00 05 A6 C3 00 06 5D 016: 10 01 39 A4 76 01 82 5D 024: 90 02 90 21 67 03 50 1B 032: 3F 04 17 AF 5C000 - 000: 0x0C,获取群成员信息子命令标识。
001 - 004: 内部群编号。005 - 不定长: 四字节一组的需要获取信息的群成员QQ号。应答者:服务器
样本:
000: 0C 00 0C 04 A9 F4 01 82
008: 5D 90 00 CC 1F 00 09 6A 016: 65 66 66 5F 79 65 63 6E 024: 00 00 00 01 82 90 00 60 032: 1F 00 04 6A 65 66 66 00 040: 00 00 05 A6 C3 00 21 13 048: 01 04 B7 B2 ED FE 02 40 056: 00 06 5D 10 00 6F 00 01 064: 09 20 20 20 8C 57 95 FE 072: A1 E5 02 00 01 39 A4 76 080: 00 57 00 01 02 DE A5 00 088: 00 02 90 21 67 00 7B 20 096: 00 04 44 75 64 65 00 00 104: 03 50 1B 3F 00 AE 00 01 112: 0A CA C4 D1 D4 B2 BB BF 120: C9 D0 C5 00 40 04 17 AF 128: 5C 00 21 03 01 08 D3 EA 136: D6 AE BC BE B9 9D 00 40000 - 000: 0x0C,获取群成员信息子命令标识。
001 - 001: 0x00,表示命令成功。002 - 005: 内部群编号。006 开始:群成员信息。同0x26命令的数据定义。出错后的应答:
样本:
000: 01 02 C4 FA C3 BB D3 D0
008: C8 A8 CF DE B4 B4 BD A8 016: C8 BA 2C C7 EB CF C8 D7 024: A2 B2 E1 CE AA BB E1 D4 032: B1000 - 000: 子命令标识
001 - 001: 0x02,表示错误。002 - 最后: 错误信息。0x0081,用户状态改变通知
发送方:服务器
样本:
000: 00 01 82 90 01 40 E7 AF
008: 39 0F A0 00 0A 04 05 49 016: F8 16 6A CB 4E FE 26 BA 024: CE BC C6 27 47 50 3E 00 032: 00 01 82 5D 90000 - 003: 发生状态改变的QQ号码。
004 - 004: 总是 0x01。005 - 010: IP及端口号。(在离线时为0)。011 - 012: 新状态:0A 为正常,14 为下线,1E 为离开。013 - 014: QQ版本的功能特征。015 - 030: 该QQ号码加上其Session Key后的MD5Digest。031 - 032: 0。033 - 036: 自己的QQ号码。
http://www.cnpaf.net/Class/OtherAnalysis/200506/4759.html