QQ协议分析之TCPF包数据分析

时间:2005-06-10 来源:协议分析论坛 作者:jeff_yecn 点击:
说明: 本文档说明的是解密以后的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
  

说明:

本文档说明的是解密以后的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 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 00

000 - 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 0D

000 - 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: 总是00
043 - 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 0D

000 - 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 0D

000 - 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 90

000 - 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 90

000 - 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 74

000 - 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 DE

000 - 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 68

000 - 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 90

000 - 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 A3

000 - 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 90

000 - 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 F4

000 - 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 95

000 - 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: 61

000 - 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 00

000 - 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 A1

000 - 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 74

000 - 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 0D

000 - 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 5C

000 - 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 5C

000 - 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 40

000 - 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: B1

000 - 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 90

000 - 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号码。

------分隔线----------------------------
顶一下
(4)
100%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容
  • SKYPE协议分析

    1 、概述 Skype是由Kazaa于2003年发明的基于P2P 技术的VoIP客户端,用户可以通过Skype...

  • 让IRIS嗅探器可以在Win2003 SP1上运行

    IRISSniffer是著名网络安全eeye公司的一个用于网络诊断的嗅探器程序,与SnifferPro相...

  • QQ 协议2005beta2 版协议分析

    概述 我所作的 协议 是在黑箱基础上面作出, 并参考了LumaQQ 的文档, 还有网上流传很...

  • QQ协议分析之TCPF包结构

    包结构类型: TCPF包我们把它分为5类: 登录请求包(LIP,LogIn Packet),它是由客...

  • QQ协议概述

    QQ的版本: QQ的版本升级比较频繁,而且与多数的软件不同的是,它客户端的升级往往伴...