中国Linux公社论坛's Archiver

yunfan 发表于 2005-5-1 17:30

协议分析贴

请大家将分析出的协议贴在这里
[color=red]我们分析的版本为QQ2005 beta1, 即版本号为0x0D05[/color]

yunfan 发表于 2005-5-1 17:41

注意,我们很多注释都是建立在Luma分析的基础上的,所以
我们先感谢Luma的出色工作!

客户端版本号:  0xd05

命令类型: outDat
命令号:  [color=red]0x0062[/color]
包体长度: [color=red]1 字节[/color]

注释:
=========================
请求登录令牌的包,格式为:
* 1. 头部
* 2. 未知的1字节,0x00
* 3. 尾部

小锁 发表于 2005-5-1 17:42

yunfan的签名挺有意思啊,不过不够全面,应该是:
你知道吗?一直索取不奉献,最后丢掉小命的是什么吗?是猪!
被耍了吧!

yunfan 发表于 2005-5-1 19:29

:lol:

yunfan 发表于 2005-5-3 08:42

搞清楚了群资料回应包中, 每个成员之间的2个字节的含义。
第一个字节是 这个好友所在的群内分组索引号
第二个字节是 是否是管理员


另外,还有个取得群内组织的分组名称。 还有可以取得群内讨论组的名称的命令
正在分析中。

liuspider 发表于 2005-5-3 10:40

lumaqq 中不是实现了群的支持了吗? 为什么不直接参考呢?

yunfan 发表于 2005-5-3 10:58

[quote:0c02cd4dc6="liuspider"]lumaqq 中不是实现了群的支持了吗? 为什么不直接参考呢?[/quote]

LumaQQ 的群是大部分功能支持, 但是不完全, 像群内组织的获取 什么的。还没有分析出来,至少是没有公布出来。

我们分析的是2005版本, 在这个版本中,群部分的个别协议内容变动了。 一些在lumaqq中的未知字节, 我们也在逐步搞清楚含义。

yunfan 发表于 2005-5-3 12:53

2005 等级 协议

包类型: outDat
命令: 0X005C
名称: 好友等级请求包(QQ_CMD_GET_LEVEL)

注释: (QQ2005 beta 1)
====================================

* 好友等级请求包,格式为
* 1. 头部
* 2. byte 0: 总是0x00 可能是子命令, 目前只有0x00
* 3. byte 1-4: 好友QQ号
* 4. 如果是多个好友,重复第3部
* 6. 尾部

注意的是,腾讯QQ一次最多是发送70个好友,剩下的,
用第二个包发,够70个,再分一个包,以此直到所有好友
都发送完毕。注意,自己的号码也在这个包里发。 一般腾讯
的是在第一包的最后一个。 估计是用std::list<int> 一样的结构,
自己的号码是一个push_back 的,所以是第一个包的随后一个


***********************************************************

包类型: inDat
命令: 0X005C
名称: 好友等级请求应答包(QQ_CMD_GET_LEVEL)

注释: (QQ2005 beta 1)
====================================

* 好友等级请求应答包,格式为
* 1. 头部
* 2. byte     0: 总是0x00 可能是子命令, 不确定
* 3. byte  1- 4: 好友QQ号
* 4. byte  5- 8: 登录总时长, 秒为单位
* 5. byte  9-10: 等级
* 6. byte  11-12: 升级剩余时长,小时为单位
* 7. 如果是多个好友,重复第3到6部分
* 8. 尾部

yunfan 发表于 2005-5-3 19:43

群管理员设置协议分析

包类型: outDat
命令: 0X0030
名称: 群命令(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

群管理员设置子命令 0x1B (QQ_QUN_CMD_ADMIN)

请求包
1。头部
2。byte 0, 子命令: 0x1B
3。byte 1-4, 群ID
4。byte 5-8, 要操作的成员QQ号
5。byte 9, 一个功能字节。 0x00:删除操作, 0x01:设置操作
6。尾部


包类型: inDat
命令: 0X0030
名称: 群命令(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

群管理员设置子命令 0x1B (QQ_QUN_CMD_ADMIN)
1。头部
2。byte 0, 命令: 0x1B
3。byte 1, 回应码  0x00 成功
3。byte 2-5, 群ID
4。byte 6-9, 群版本号
5。byte 10-13, 要操作的成员QQ号
5。byte 14, 一个功能字节。 0x00:删除操作, 0x01:设置操作
6。尾部

yunfan 发表于 2005-5-3 19:55

群转让协议分析

包类型: outDat
命令: 0X0030
名称: 群命令(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

群转让子命令 0x1C (QQ_QUN_CMD_TRANSFER)

请求包
1。头部
2。byte 0, 子命令: 0x1C
3。byte 1-4, 群ID
4。byte 5-8, 要操作的成员QQ号
5。尾部


包类型: inDat
命令: 0X0030
名称: 群命令(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

群转让子命令 0x1C (QQ_QUN_CMD_TRANSFER)
1。头部
2。byte 0, 命令: 0x1C
3。byte 1, 回应码 0x00 成功
4。byte 2-5, 群ID
5。byte 6-9, 要操作的成员QQ号
6。byte 10-13, 群版本号
7。尾部
注意如果回应码不为0x00, 则说明失败,那么第6部分就是一个
字符串的错误消息

yunfan 发表于 2005-5-3 20:15

修改群名片协议分析

包类型: outDat
命令: 0X0030
名称: 群命令(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

修改群名片子命令 0x0E (QQ_QUN_CMD_MODIFY_CARD)

请求包
1。头部
2。byte 0, 子命令: 0x0E
3。byte 1-4, 群ID
4。byte 5-8, 自己QQ号
5。byte 9, 真实姓名长度
6。真实姓名内容字符串
7。1字节, 性别 0x00:男
8。1字节,电话长度
9。电话的字符串表示
10。1字节,电子邮件长度
11。电子邮件内容
12。1字节,备注长度
13。 备注内容
14。尾部


包类型: inDat
命令: 0X0030
名称: 群命令(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

修改群名片子命令 0x0E (QQ_QUN_CMD_MODIFY_CARD)
1。头部
2。byte 0, 命令: 0x0E
3。byte 1, 回应码 0x00 成功
4。byte 2-5, 群ID
5。byte 6-9, 自己QQ号
6。尾部

Anomymous 发表于 2005-5-4 11:00

个人建议:这类的内容放到 wiki 上更好一些,可以大家协作,有错误好修改

liuspider 发表于 2005-5-4 11:05

faint,没注意成了 游客了......

yunfan 发表于 2005-5-4 11:14

[quote:21f4e77150="liuspider"]faint,没注意成了 游客了......[/quote]

得慢慢来啊。 毕竟,我没有那么多精力。:(

BOoRFGOnZ 发表于 2005-5-12 10:10

我有点晕 :?

lxleaves_zhang 发表于 2005-5-18 16:54

包类型: inDat
命令: 0X005C
名称: 好友等级请求应答包(QQ_CMD_GET_LEVEL)

注释: (QQ2005 beta 1)
====================================

* 好友等级请求应答包,格式为
* 1. 头部
* 2. byte 0: 总是0x00 可能是子命令, 不确定 //0x00应该是成功的意思
* 3. byte 1- 4: 好友QQ号
* 4. byte 5- 8: 登录总时长, 秒为单位
* 5. byte 9-10: 等级
* 6. byte 11-12: 升级剩余时长,小时为单位
* 7. 如果是多个好友,重复第3到6部分
* 8. 尾部

yunfan 发表于 2005-5-20 12:52

呵呵, 对于005C命令的服务器回应包的包体部分,
第一个字节,which is always 0x00, 不应该是成功的意思。

我是基于以下原因,做这个猜测的,
1。在发送包包体的第一个字节是一个0x00,回应包正好和这个对应,
2。像腾讯新出现的命令一样,腾讯应该预留一些字节做以后功能的扩充。腾讯不应该
     轻易浪费这样一个大的命令族。以后对于等级或许还会出现新的内容什么的,这样
     腾讯只用更改子命令号就可以了

不过,这些都是推测而已 :)

casper 发表于 2005-5-29 11:01

新建群讨论组协议分析

包类型: outDat
命令: 0X0030
名称: 新建讨论组请求包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

新建讨论组子命令 0x30

请求包
* 1. 头部
* 2. 命令类型,1字节,0x30
* 3. 创建的临时群类型,1字节,0x02
* 4. 父群内部ID,4 字节
* 5. 讨论组名长度,1字节
* 6. 讨论组名,长度不定
* 7. 讨论组成员的QQ号,4个字节一个
* 8.尾部

***********************************************************


包类型: inDat
命令: 0X0030
名称: 新建讨论组应答包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1,来自LumaQQ)
====================================  

* 1. 头部
* 2. 命令类型,1字节,0x30
* 3. 回复码,1字节
* 4. 临时群类型,1字节,0x01是多人对话,0x02是讨论组
* 5. 父群内部ID,4字节
* 6. 创建讨论组ID,4字节
* 7. 尾部

casper 发表于 2005-5-29 11:41

获取讨论组成员列表协议分析

包类型: outDat
命令: 0X0030
名称: 获取讨论组成员列表请求包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

获取讨论组成员列表子命令 0x37

请求包
* 1. 头部
* 2. 命令类型,1字节,0x37
* 3. 创建的临时群类型,1字节,0x02
* 4. 父群ID,4 字节
* 5. 讨论组ID,4 字节
* 6. 尾部

***********************************************************


包类型: inDat
命令: 0X0030
名称: 获取讨论组成员列表应答包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1, 来自LumaQQ)
====================================  

* 1. 头部
* 2. 命令类型,1字节,0x37
* 3. 回复码,1字节
* 4. 临时群类型,1字节
* 5. 父群ID,4字节
* 6. 讨论组ID,4字节
* 7. 成员QQ号,4字节
* 8. 如果有更多成员,重复7部分
* 9. 尾部

casper 发表于 2005-5-29 13:24

退出群内讨论组协议分析

包类型: outDat
命令: 0X0030
名称: 退出讨论组请求包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

退出讨论组子命令 0x32

请求包
* 1. 头部
* 2. 命令类型,1字节,0x32
* 3. 临时群类型,1字节,0x02
* 4. 父群内部ID,4 字节
* 5. 讨论组ID,4 字节
* 6. 尾部

***********************************************************


包类型: inDat
命令: 0X0030
名称: 退出讨论组应答包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1,部分来自lumaQQ)
====================================  

* 1. 头部
* 2. 命令类型,1字节,0x32
* 3. 回复码,1字节,0x00
* 4. 临时群类型,1字节,0x02
* 5. 父群ID,4字节
* 6. 讨论组ID,4字节
* 7. 讨论组成员QQ号,4字节
* 8. 如果有多人,重复7
* 9. 尾部

casper 发表于 2005-5-29 13:46

修改群名片协议分析

包类型: outDat
命令: 0X0030
名称: 修改群名片请求包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

修改群名片子命令 0x0E

请求包
* 1. 头部
* 2. 命令类型,1字节,0x0E
* 3. 父群ID,4 字节
* 4. 修改人的QQ号,4字节
* 5. 真实姓名长度,1字节
* 6. 真实姓名,5得到的长度
* 7. 性别,1字节,0x00 表示男 0x01表示女
* 8. 电话长度,1字节
* 9. 电话,8得到的长度
* 10. email长度,1字节
* 11. email,10得到的长度
* 12. 备注的长度,1字节
* 13. 备注,12得到的长度
* 14. 尾部

***********************************************************


包类型: inDat
命令: 0X0030
名称: 修改群名片应答包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================  

应答包
* 1. 头部
* 2. 命令类型,1字节,0x0E
* 3. 回复码,1字节
* 5. 父群ID,4字节
* 6. 修改人QQ号,4字节
* 7. 尾部

casper 发表于 2005-5-29 14:25

获取群名片协议分析

包类型: outDat
命令: 0X0030
名称: 获取群名片请求包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

获取子命令 0x10

请求包
* 1. 头部
* 2. 命令类型,1字节,0x10
* 3. 父群ID,4 字节
* 4. 要查询的QQ号,4字节
* 5. 尾部

***********************************************************


包类型: inDat
命令: 0X0030
名称: 获取群名片应答包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================  

应答包
* 1. 头部
* 2. 命令类型,1字节,0x10
* 3. 回复码,1字节

  如果回复码是0x00,表示获取群名片成功
      * 4. 父群ID,4字节
      * 5. 被查询的QQ号,4字节
      * 6. 真实姓名长度,1字节
      * 7. 真实姓名,5得到的长度
      * 8. 性别,1字节,0x00 表示男 0x01表示女
      * 9. 电话长度,1字节
      * 10. 电话,8得到的长度  
      * 11. email长度,1字节
      * 12. email,10得到的长度
      * 13. 备注的长度,1字节
      * 14. 备注,12得到的长度
      * 15. 尾部

  如果回复码是0x05,表示查询的用户没有设置群名片
      * 4. 父群ID,4字节
      * 5. 要查询的QQ号,4字节
      * 6. 群名片长度,0x18
      * 7. “用户没有设置群内详细信息”字符串
      * 9. 尾部

yunfan 发表于 2005-5-29 19:34

Excellent Job, casper
只是, 那个修改群的我分析过了, 就别做重复劳动啦。

我们以后都注意一下, 看看什么已经分析出来,少点重复劳动   :lol:

呵呵, 不错, 继续!

casper 发表于 2005-5-30 18:02

还有什么协议要分析的?是不是只剩下文件传输协议了 :wink:

yunfan 发表于 2005-5-30 20:19

no, 当获取了一个永久群后,如何知道群内有几个组织?有几个讨论组?
这个个问题不解决,我们就不支持群内的的组织和讨论组了。

注意,在腾讯QQ中, 群内组织和讨论组是分开的, 我还没有时间分析在协议上有什么不同。

casper 发表于 2005-5-31 11:55

添加删除群讨论组成员协议分析

包类型: outDat
命令: 0X0030
名称: 添加删除群讨论组成员请求包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

添加删除群讨论组成员子命令 0x31

请求包
* 1. 头部
* 2. 命令类型,1字节,0x31
* 3. 创建的临时群类型,1字节,0x02表示讨论组
* 4. 父群内部ID,4 字节
* 5. 讨论组ID,4字节
* 6. 操作方式,1字节,0x01表示添加,0x02表示删除
* 7. 添加或删除的成员QQ号,4字节
* 8. 如果操作多个成员,重复7
* 9. 尾部

***********************************************************


包类型: inDat
命令: 0X0030
名称: 添加删除群讨论组成员应答包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================  

应答包
* 1. 头部
* 2. 命令类型,1字节,0x31
* 3. 回复码,1字节
* 4. 临时群类型,1字节,0x01是多人对话,0x02是讨论组
* 5. 父群内部ID,4字节
* 6. 讨论组ID,4字节
* 7. 操作方式,1字节,0x01表示添加,0x02表示删除
* 8. 添加或删除的成员QQ号,4字节
* 9. 如果操作多个成员,重复8
* 10. 尾部

casper 发表于 2005-5-31 11:56

修改群讨论组名称协议分析

包类型: outDat
命令: 0X0030
名称: 修改群讨论组名称请求包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================

修改群讨论组信息子命令 0x34

请求包
* 1. 头部
* 2. 命令类型,1字节,0x34
* 3. 创建的临时群类型,1字节,0x02
* 4. 父群内部ID,4 字节
* 5. 讨论组ID,4字节
* 6. 修改的讨论组名长度,1字节
* 7. 修改的讨论组名,6得到的长度
* 8.尾部

***********************************************************


包类型: inDat
命令: 0X0030
名称: 修改群讨论组名称应答包(QQ_CMD_QUN_CMD)

注释: (QQ2005 beta 1)
====================================  

应答包
* 1. 头部
* 2. 命令类型,1字节,0x34
* 3. 回复码,1字节
* 4. 临时群类型,1字节,0x01是多人对话,0x02是讨论组
* 5. 父群内部ID,4字节
* 6. 讨论组ID,4字节
* 7. 尾部

Anomymous 发表于 2005-6-28 21:35

有没有关于QQ个性签名的分析呀

xixixi 发表于 2005-7-18 13:50

有临时会话的协议分析么?

yunfan 发表于 2005-7-18 14:12

个性签名的获取还没有分析, 但是个性签名更改的通知已经实现。 请等待 Eva 0.3.0 , 参考具体内容。

群临时回话,大概分析了一下,没有时间完成。 慢慢来吧。

页: [1] 2

Powered by Discuz! Archiver 6.1.0F  © 2001-2007 Comsenz Inc.