




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目前看起来是这样 加密解密加密解密 QQ 基本协议目前为止用了两种公开的加密算法 十六轮的 TEA Tiny Encryption Algorithm 和 MD5 TEA 是一种小型的可逆加密算法 但是 TX 使用了独特的填充反馈机制 如 果整个明文不是 8 的倍数 还要在头部用 16 字节的随机数填充 然后在尾部补 0 直到是 8 的倍数 QQ 数据明文被分成 N 个 8 字节的明文单元 用 TEA 以 16 字节的密钥依次加密每个单元产生 8 字节的密文 密文再参与下一单元的加密 由于头部填充了随机字节 所以即使是同一明文的密文 也会因随机数的不同 以及反馈机制而不同 推荐的 TEA 算法应该是 32 轮 但是 QQ 目前就使用了 16 轮 TEA 是通过增加加密算法的轮数来提高安全性的 不是使用复杂的算 法 MD5 即 Message Digest Algorithm 5 信息 摘要算法 5 用于确保信息 传输完整一致 是计算机广泛使用的散列算法之一 又译摘要算法 哈希算法 QQ 的包一般都是加密的 包头包尾除外 但是有个别包是不加密的 QQ 使用 TCP 协议进行文件传送的时候大多没有加密 以后如果不做特别说明 则 默认这个包是需要加密的 此外 用什么密钥加密也有不同 不过基本上都是 用会话密钥加密 这里要注意一下 有时候你收到的包可能不是用会话密钥加 密的 比如离线的消息 你人都不在了 哪里来的会话密钥 所以服务器在你 下次登录的时候 会把你还没收到过的消息用密码密钥加密再传给你 这是一 种特殊的情况 要分清楚 以下是对主要用到的各种密钥的简单解释 名称描述 临时密钥 即可以在数据包中直接提取的加密密钥 一般是 数据段的前 16Bytes 密码密钥 先把 QQ 密码的字符串用 MD5 加密得到一个 16 字 节的 Byte 数组 再把此数组作为明文用 MD5 加密 之后得到的是一个 16 字节的 Byte 数组 会话密钥 登录认证成功后 协商出的密钥 16Bytes 用 于后续报文解密使用 UDPUDP 和和 TCP TCP QQ 基本通信协议支持 TCP 以及 UDP 两种方式 而且两种方式基本数据结构 大同小异 只是 TCP 多了一个数据包长度描述的头部信息 一般使用的是 UDP 协议 QQ 基本协议采用应答机制 也就是说发送的每一个包服务器都会回应对 应的包的执行结果 服务器发送的每一个包你也要回应 登出包除外 它没回 应 请求和响应通过相同的序列号来进行配对 请求代码也应该相同 而且每种请求的发起方都是相同的 这也许是因为 UDP 协议的不可靠性吧 由 此 QQ 支持 UDP 和 TCP 登录 如果使用 HTTP 代理 则相当于 TCP 登录 可以在登录设置中选择协议登陆 默认为 UDP 协议 协议类型 协议类型 我们尝试把 QQ 的协议进行分类 文字聊天协议族 文字聊天协议族 TCPF TCPF TextText ChattingChatting ProtocolProtocol Family Family 它主要支持 与其它 QQ 客户端进行文字聊天 TCPF 是建立在 UDP 协议之上 UDP 数据包中的 第一个字符 02 为这个协议族的标识 TCPF 的服务器使用 8000 号端口 腾讯的 QQ 客户端软件一般从 4000 号端口开始尝试使用 试验发现如果一台 PC 上有两 个 QQ 登录则一个使用 4000 端口号 另一个使用 4001 端口号 但实际上 对客 户端使用的端口号并没有限制 目前的研究集中在 TCPF 上 其它未知可能存在的协议族 其它未知可能存在的协议族 我们观察到 QQ 除了与 TCPF 服务器通信以外 还有与其它的服务器使用 UDP 进行通信 目前我们观察到的服务器为 218 17 217 111 8000 客户端使用与 TCPF 不同的端口 目前观察到的从客 户端发出的包以 06 开头 而服务器返回的包则以 01 开头 目前其具体作用未 知 我们注意到一个有趣的现象是 如果选择离线后重新上线 那么在发出登 录包之前 这个通讯已经开始 我们暂时把它命名为数据传输协议族 DTPF Data Transfer Protocol Family 最新的研究发现 它传递的是 QQ Show 的图片数据 语音 视频聊天 语音 视频聊天 目前还没有开始分析 尚未知道是使用 UDP 还是 TCP 协 议 聊天室 聊天室 没有分析 应该是 TCP 协议 随着对这些协议分析的开始 我们会给它们更精细的划分和恰当的命名 不同种类的包头包尾 不同种类的包头包尾 QQ 协议有多种包头 包头包括头字节以及包体之前的固定信息 每种包头 都分别代表了一类用途的包 但是不是所有的包都有包尾 以下是一些存在的 包头包尾格式参考 头字 节 包尾头字节之后包头的内容说明 0 x00 无发送方 QQ 版本 或者是服务器版本 2 字节 随机密钥 1 字节 如果这个字节是 0 x23 那么密钥就是 0 x23232323 这个密钥用来加密 发送者和接受 者的 QQ 号 加密算法 QQ 号取反再与密钥异 或 发送者 QQ 号的加密形式 4 字节 接受者 QQ 号的加密形式 4 字节 0 x00 系列的包 用在文件传输 过程中 传递 控制信息 也 会出现在点对 点通信中 0 x020 x03 源标志 2 字节 表示了这个包从何处来 主要用来标识客 户端版本 如果是 0 x01 0 x00 表明是由服务器发 送 包命令 2 字节 包序号 2 字节 原则是保证短期内这个序号不要重复就可 以 一般我们处理的时候都是递增 到最大再归 0 QQ 号码 若请求方为客户端 则存在此字段 否则无 0 x02 系列包主 要完成一些基 本任务 基本 上处理了这个 系列的包 QQ 的功能就差不 多了 0 x03 无格式同第一类0 x03 系列的包 用在文件传输 过程中 传递 数据信息 0 x040 x03 客户端版本号 2 字节 整个的包长 2 字节 序号 2 字节 QQ 号码 4 字节 未知的 8 字节 0 x04 系列的包 用在文件传输 过程中 如果 使用服务器中 转模式传送文 件 则用到这 些包 0 x06 未知未知未知 主要主要 QQQQ 命令 命令 一 一 QQQQ 包类型定义 包类型定义 1 QQ 基本协议族包头 0 x02 2 QQ 基本协议族包尾 0 x03 3 QQ P2P 协议族 0 x00 4 04 开头的协议族 未知含义 文件中转包有用到过 0 x04 二 用于网络硬盘协议族 二 用于网络硬盘协议族 1 正常登陆 0 x0A 2 隐身登陆 0 x28 3 性别 男 0 x0 4 性别 女 0 x1 5 性别 未知 byte 0 xFF 三 用户标志 比如三 用户标志 比如 QQFriendQQFriend 类 好友状态改变包都包含这样的标志类 好友状态改变包都包含这样的标志 1 标志 QQ 会员 0 x01 2 标志 手机 0 x10 3 标志 手机绑定 0 x20 4 在线状态 在线 0 x0A 5 在线状态 离线 0 x14 6 在线状态 离开 0 x1E 7 在线状态 隐身 0 x28 8 有摄像头 0 x80 9 绑定了手机 0 x40 10 移动 QQ 用户 0 x20 11 会员 0 x02 12 TM 登录 0 x40000 四 用户属性 在四 用户属性 在 UserPropertyUserProperty 中 相关命令中 相关命令 0 x00650 x0065 1 有个性签名 0 x40000000 2 有自定义头像 0 x100000 3 好友列表从第一个好友开始 0 x0000 4 好友列表已经全部得到 0 xFFFF 5 在线好友列表从第一个好友开始 0 x00 6 在线好友列表已经全部得到 byte 0 xFF 7 用户属性列表从第一个好友开始 0 x0000 8 用户属性列表结束 0 xFFFF 五 回复常量五 回复常量 1 通用常量 操作成功 0 x00 2 对方已经是我的好友 byte 0 x99 3 请求登录令牌成功 0 x00 4 登录信息 重定向 0 x01 5 登录信息 登录失败 0 x05 6 改变在线状态成功 0 x30 7 发送认证消息成功 0 x30 8 申请中转服务器 重定向 0 x0001 9 申请中转服务器成功 0 x0000 10 要发送的图片太大 0 x0003 11 命令常量 登出 0 x0001 12 命令常量 保持在线状态 0 x0002 13 命令常量 修改自己的信息 0 x0004 14 命令常量 查找用户 0 x0005 15 命令常量 得到好友信息 0 x0006 16 命令常量 添加一个好友 0 x0009 17 命令常量 删除一个好友 0 x000A 18 命令常量 发送验证信息 0 x000B 19 命令常量 改变自己的在线状态 0 x000D 20 命令常量 确认收到了系统消息 0 x0012 21 命令常量 发送消息 0 x0016 22 命令常量 接收消息 0 x0017 23 命令常量 把自己从对方好友名单中删除 0 x001C 24 请求一些操作需要的密钥 比如文件中转 视 频也有可能 0 x001D 25 命令常量 登陆 0 x0022 26 命令常量 得到好友列表 0 x0026 27 命令常量 得到在线好友列表 0 x0027 28 命令常量 发送短消息 0 x002D 29 命令常量 群相关命令 0 x0030 30 命令常量 测试连接 0 x0031 31 命令常量 分组数组操作 0 x003C 32 命令常量 上传分组中的好友 QQ 号列表 0 x003D 33 命令常量 好友相关数据操作 0 x003E 34 命令常量 下载分组中的好友 QQ 号列表 0 x0058 35 命令常量 好友等级信息相关操作 0 x005C 36 命令常量 隐私数据操作 0 x005E 37 命令常量 群数据操作命令 0 x005F 38 命令常量 好友高级查找 0 x0061 39 命令常量 请求登录令牌 0 x0062 40 命令常量 用户属性操作 0 x0065 41 命令常量 临时会话操作 0 x0066 42 命令常量 个性签名的操作 0 x0067 43 命令常量 接收到系统消息 0 x0080 44 命令常量 好友改变状态 0 x0081 45 命令常量 天气操作 0 x00A6 46 命令常量 QQ2005 使用的添加好友命令 0 x00A7 47 命令常量 发送验证消息 0X00A8 48 命令常量 未知命令 调试用途 0 xFFFF 六 六 0 x005E0 x005E 的子命令的子命令 1 只能通过号码搜到我 0 x03 2 共享地理位置 0 x04 七 是否设置一个选项 用在如七 是否设置一个选项 用在如 0 x005E0 x005E 这样的命令中 其他地方如果类似也可这样的命令中 其他地方如果类似也可 使用使用 1 设置 0 x01 2 取消设置 0 x00 八 八 0 x005C0 x005C 的子命令的子命令 1 得到好友等级信息 0 x02 九 九 0 x005F0 x005F 的子命令的子命令 1 得到群在线成员 0 x01 2 命令常量 请求中转 0 x0021 3 命令常量 请求得到自定义表情 0 x0022 4 命令常量 开始传送 0 x0023 5 命令常量 请求开始传送 0 x0026 十 网络硬盘协议族十 网络硬盘协议族 1 开始会话 0 x0000 2 身份认证 0 x0401 3 网络硬盘密码操作 0 x0402 4 请求网络硬盘服务器列表 0 x0409 5 列出我的网络硬盘目录 0 x1C0C 6 新建文件夹 0 x1C0D 7 删除 0 x1C0E 8 重命名 0 x1C0F 9 移动 0 x1C10 10 上传文件 0 x1C16 11 下载文件 0 x1C17 12 得到文件实际大小 0 x1C18 13 结束上传 0 x1C1A 14 免费申请开通网络硬盘 0 x1C1C 15 准备上传或下载 0 x1C1D 16 得到共享网络硬盘列表 0 x1F41 17 得到某人的共享网络硬盘目录结构 0 x1F42 18 得到某个目录对什么好友共享了 0 x1F43 19 设置共享列表 0 x1F44 十一 网络硬盘子命令 用于十一 网络硬盘子命令 用于 0 x04020 x0402 1 密码认证 0 x0 2 设置网络硬盘密码 0 x1 3 取消网络硬盘密码 0 x2 十二 十二 0 x04010 x0401 的状态码的状态码 1 网络硬盘认证需要密码 0 x1 十三 网络硬盘回复码十三 网络硬盘回复码 1 认证失败 0 x0402 十四 网络硬盘缺省目录十四 网络硬盘缺省目录 idid 1 我的文档 0 x1 2 我的图片 0 x2 3 我的多媒体 0 x3 4 个人助理 其内部的名称是 System 0 x11 5 网络收藏夹 0 x12 6 网络记事本 它的父目录是 System 内部名称是 Note 0 x13 7 自定义表情 0 x14 8 自定义头像 它的父目录是 System 内部名称是 Chatword 0 x16 9 QQ 网络相册 0 x18 10 根目录 0 xFFFFFFFF 11 网络硬盘保留的用于系统文件夹最大 id 0 x80 十五 网络硬盘上的文件属性十五 网络硬盘上的文件属性 1 是一个目录 0 x1 2 标明一个文件还没有上传完毕 0 x2 3 是否设置了共享 0 x8 4 是一个用户号码 0 x40 5 网络收藏夹文件 0 x80 6 网络相册文件 0 x200 十六 十六 0303 协议族协议族 1 请求得到好友自定义头像数据 0 x0002 2 请求得到好友自定义头像信息 0 x0004 十七 用于十七 用于 0 x001D0 x001D 1 请求密钥类型 未知 0 x3 2 请求密钥类型 文件中转密钥 0 x4 3 请求密钥类型 未知 0 x6 4 请求密钥类型 未知 0 x7 5 请求密钥类型 未知 0 x8 6 群操作命令 创建群 0 x01 7 群操作命令 修改群成员 0 x02 8 群操作命令 修改群资料 0 x03 9 群操作命令 得到群资料 0 x04 10 群操作命令 激活群 0 x05 11 群操作命令 搜索群 0 x06 12 群操作命令 加入群 0 x07 13 群操作命令 加入群的验证消息 0 x08 14 群操作命令 退出群 0 x09 15 群操作命令 发送群消息 0 x0A 16 群操作命令 得到在线成员 0 x0B 17 群操作命令 得到成员资料 0 x0C 18 群操作命令 修改群名片 0 x0E 19 群操作命令 批量得到成员群名片中的真实 姓名 0 x0F 20 群操作命令 得到某个成员的群名片 0 x10 21 群操作命令 提交组织架构到服务器 0 x11 22 群操作命令 从服务器获取组织架构 0 x12 23 群操作命令 提交成员分组情况到服务器 0 x13 24 群操作命令 得到各种 version id 0 x19 25 群操作命令 扩展格式的群消息 0 x1A 26 群操作命令 设置成员角色 0 x1B 27 群操作命令 转让自己的角色给他人 0 x1C 28 解散群 如果自己是群的创建者 则使用这个 命令 0 x1D 29 群操作命令 创建临时群 0 x30 30 群操作命令 修改临时群成员列表 0 x31 31 群操作命令 退出临时群 0 x32 32 群操作命令 得到临时群资料 0 x33 33 群操作命令 修改临时群资料 0 x34 34 群操作命令 发送临时群消息 0 x35 35 群操作命令 子群操作 0 x36 36 群操作命令 激活临时群 0 x37 37 群操作命令回复 不存在这个群 0 x02 38 群操作命令回复 群已经被删除 0 x03 39 群操作命令回复 你已经不是临时群的成员 0 x04 40 群操作命令回复 你已经不是固定群的成员 0 x0A 十八 临时会话操作回复码十八 临时会话操作回复码 1 临时会话消息发送成功 但是对方可能不在线 无 法及时回复 0 x02 十九 短信回复码 用来表示单条短信的状态十九 短信回复码 用来表示单条短信的状态 1 短信发送成功 0 x00 2 队列中 准备发送 0 x01 3 发送失败 0 x04 4 群类型常量 固定群 0 x01 5 临时群类型常量 多人对话 0 x01 6 临时群类型常量 讨论组 0 x02 7 群成员角色操作 设置管理员 0 x01 8 群成员角色操作 取消管理员 0 x00 9 群成员角色标志位 管理员 0 x01 10 群成员角色标志位 股东 0 x02 11 群操作子命令 添加成员 用在修改成员列表命 令中 0 x01 12 群操作子命令 删除成员 用在修改成员列表命 令中 0 x02 13 群操作子命令 得到群内的讨论组列表 0 x02 14 群操作子命令 得到多人对话列表 0 x01 15 群认证消息类型 请求加入群 0 x01 16 群认证消息类型 同意加入群 0 x02 17 群认证消息类型 拒绝加入群 0 x03 18 加入群的回复码 加入成功 0 x01 19 加入群的回复码 对方需要认证 0 x02 20 加入群的回复码 群禁止加入 0 x03 21 群的搜索方式 根据群号搜索 0 x01 22 群的搜索方式 搜索示范群 0 x02 二十 操作码 用在设置角色时二十 操作码 用在设置角色时 1 取消管理员 0 x00 2 设置管理员 0 x01 二十一 群消息的二十一 群消息的 contentcontent typetype 1 消息中不包含自定义表情 0 x0001 2 消息中包含自定义表情 0 x0002 3 消息回复类型 正常回复 0 x01 4 消息回复类型 自动回复 0 x02 二十二 子命令常量 用于命令二十二 子命令常量 用于命令 0 x00270 x0027 1 得到在线好友 0 x2 2 得到系统服务 0 x3 二十三 子命令常量 服务于命令二十三 子命令常量 服务于命令 0 x003C0 x003C 1 服务器端数据操作 上传组名 0 x2 2 服务器端数据操作 下载组名 0 x1 二十四 子命令常量 用于命令二十四 子命令常量 用于命令 0 x00660 x0066 1 临时会话操作 发送临时会话消息 0 x01 二十五 子命令常量 服务于命令二十五 子命令常量 服务于命令 0 x003E0 x003E 1 服务器端数据操作 批量下载好友备注 0 x0 2 服务器端数据操作 上传好友备注 0 x1 3 服务器端数据操作 添加好友到列表中 0 x2 4 服务器端数据操作 下载好友备注 0 x3 二十六 子命令常量 用于子命令二十六 子命令常量 用于子命令 0 x00670 x0067 1 修改个性签名 0 x01 2 删除个性签名 0 x02 3 得到个性签名 0 x03 二十七 子命令 用于二十七 子命令 用于 0 x00650 x0065 1 得到用户属性 0 x01 二十八 子命令二十八 子命令 用于用于 0 x00A60 x00A6 1 得到天气数据 0 x01 二十九 这两个常量用在下载好友分组时二十九 这两个常量用在下载好友分组时 1 号码类型 号码代表一个用户 0 x1 2 号码类型 号码是一个群 0 x4 三十 消息类型 就是三十 消息类型 就是 ReceiveIMHeaderReceiveIMHeader 中的类型 对于有些类型 我们做为中的类型 对于有些类型 我们做为 通知来处理 而不是显示在消息窗口中 比如请求加入 验证之类的消息 通知来处理 而不是显示在消息窗口中 比如请求加入 验证之类的消息 1 来自好友的消息 0 x0009 2 来自陌生人的消息 0 x000A 3 手机短消息 普通绑定用户 0 x000B 4 手机短消息 普通手机 0 x000C 5 会员登录提示 这个消息基本没内容 就是用来提 醒你是会员 可以显示一个窗口来告诉你上次登录时 间和 ip 0 x0012 6 手机短消息 移动 QQ 用户 0 x0013 7 手机短消息 移动 QQ 用户 使用手机号描述 0 x0014 8 QQ 直播消息 0 x0018 9 好友属性改变通知 0 x001E 10 临时会话消息 0 x001F 11 未知类型的群消息 在 2003 时是普通群消息 0 x0020 12 通知我被加入到一个群 这个群先前已经建立 我是后来被加的 0 x0021 13 我被踢出一个群 0 x0022 14 有人请求加入群 0 x0023 15 同意对方加入群 0 x0024 16 拒绝对方加入群 0 x0025 17 通知我被加入到一个群 我是在群被创建的时候 就被加的 0 x0026 18 临时群消息 0 x002A 19 固定群消息 0 x002B 20 群通知 0 x002C 21 收到的系统消息 0 x0030 22 收到个性签名改变通知 0 x0041 23 收到自定义头像变化通知 0 x0049 三十一 三十一 QQQQ 直播消息类型直播消息类型 1 网络硬盘通知 0 x0400 三十二 移动三十二 移动 QQQQ 手机短信的发送者描述类型手机短信的发送者描述类型 1 用 QQ 号描述发送者 0 x00 2 用手机号码描述发送者 0 x01 三十三 系统消息类型三十三 系统消息类型 1 同一个 QQ 号在其他地方登录 我被踢出 0 x01 三十四 消息类型 这个类型比上面的类型又再低一级 他们基本从属于三十四 消息类型 这个类型比上面的类型又再低一级 他们基本从属于 QQ RECV IM FRIENDQQ RECV IM FRIEND 所以他们是 所以他们是 normalIMHeadernormalIMHeader 中的类型 中的类型 1 普通文件消息 0 x000B 2 一个 TCP 连接请求 0 x0001 3 接收 TCP 连接请求 0 x0003 4 拒绝 TCP 连接请求 0 x0005 5 UDP 连接请求 0 x0035 6 接受 UDP 连接请求 0 x0037 7 拒绝 UDP 连接请求 0 x0039 8 通知文件传输端 0 x003B 9 请求对方主动连接 0 x003F 10 未知含意 0 x0041 11 未知含意 0 x0041 的回复 0 x0042 12 通知文件中转服务器信息 0 x004B 13 取消 TCP 或者 UDP 连接请求 0 x0049 三十五 以下常量用于消息中的表情 对于自定义表情的表示格式参考三十五 以下常量用于消息中的表情 对于自定义表情的表示格式参考 NormalIM javaNormalIM java 的注释的注释 1 系统自带表情前导字节 0 x14 2 自定义表情前导字节 0 x15 3 新自定义表情 普通格式 0 x33 4 已经出现过的自定义表情 0 x34 5 新自定义表情 存储在服务器端 0 x36 6 已经出现过的服务器端自定义表情 0 x37 7 未知自定义表情格式描述 1 未知含义 0 x38 8 未知自定义表情格式描述 2 未知含义 0 x39 三十六 这三个常量用在添加好友认证的包中 表示你是请求 或者你拒绝还三十六 这三个常量用在添加好友认证的包中 表示你是请求 或者你拒绝还 是同意别人的请求是同意别人的请求 1 通过认证 0 x30 2 拒绝认证 0 x31 3 请求认证 0 x32 三十七 三十七 QQ SYS ADD FRIEND REQUEST EXQQ SYS ADD FRIEND REQUEST EX 消息中的最后一个字节标志 是否允消息中的最后一个字节标志 是否允 许对方加自己为好友许对方加自己为好友 1 允许对方也加自己为好友 0 x01 2 不允许对方加自己为好友 0 x02 三十八 这是搜索用户时指定的搜索类类型 比如是查看全部在线用户 还是三十八 这是搜索用户时指定的搜索类类型 比如是查看全部在线用户 还是 自定义查找自定义查找 1 看谁在线上 0 x31 2 自定义搜索 0 x30 下面都是文件传输相关 这些常量是很早之前定义的 现在仅留做参考 是否 正确无法保证 一 一 文件数据信息包的命令类型文件数据信息包的命令类型 1 heart beat 0 x0001 2 heart beat 的确认 0 x0002 3 文件传输已完成 0 x0003 4 文件操作 0 x0007 5 文件操作的确认 0 x0008 二 二 QQ FILE CMD FILE OPQQ FILE CMD FILE OP 携带的信息类型携带的信息类型 1 文件基本信息 0 x1 2 文件数据 0 x2 3 文件 EOF 0 x3 三 文件控制信息传输包的命令类型三 文件控制信息传输包的命令类型 1 发送者 say hello 0 x0031 2 对发送者 hello 的确认 0 x0032 3 接收者 say hello 0 x0033 4 对接受者 hello 的确认 0 x0034 5 对通知 IP 的确认 即对 QQ IM NOTIFY IP 的确认 0 x003C 6 试探连接 0 x003D 7 试探连接的确认 0 x003E 8 主动连接对方 0 x0040 四 四 文件中转信息包的命令类型文件中转信息包的命令类型 1 发送者请求对方提供中转服务 0 x0001 2 接收者向中转服务器报到 0 x0002 3 转发包 这个包里面内嵌着一个文件数据信息包 0 x0003 4 传输结束 0 x0004 5 服务器通知可以开始传输数据 0 x0005 6 我已经准备好 0 x0006 五 五 QQ FILE CMD REQUEST AGENTQQ FILE CMD REQUEST AGENT 命令的应答类型命令的应答类型 1 批准中转请求 0 x0000 2 我现在忙 0 x0001 六 六 传输类型传输类型 1 传输文件 0 x65 2 传输自定义表情 0 x6B QQ 使用的主要协议为 TCPF 其标志为包的头字节为 0 x02 包尾为 0 x03 以下分析 均基于 TCPF 包 TCPF 包格式如下 客户端报文格式 服务器报文格式 20082008 版之前的版之前的 QQ QQ 一 登陆 QQ 通信协议的登录过程是从用户输入QQ 号码和密码后点击 登录 按钮 后开始的 从先到后按命令子域cmd 可以分为以下几个过程 Touch 过程 PreLoginToken 过程 LoginToken 过程 PreSessionKey 过程 SessionKey 过 程 其命令子域值分别为 0 x0091 0 x0062 0 x00ba 0 x00dd 0 x0022 每个 过程又分为Request 由客户端发出 和Respond 由服务器发出 2 个子过程 服务器与客户端各自有自己的包序列号 各自先初始一个 然后每次发一 个包用当前序列号 再将序列号加 1 以备下次使用 当为 0XFFFF 时清零 0X0000 例如客户向服务器发送命令 0X0091 包序列号为 0X0410 那么服 务器返回命令为 0X0091 包序列号为 0X0410 的包 下一次客户又发了一个命 令为 0X00BA 包序列号为 0X0410 1 即 0X0041 的包 服务器返回命令为 0X00BA 包序列号为 0X0041 的包的处理结果 1 1 0X00910X0091 命令 客户端发起 命令 客户端发起 询问服务器本 QQ 号是否可以在这里登录 具体格式如下 发送 02 0F 5F 00 91 01 11 25 DF 2F BF 75 60 28 8C 5D 30 74 A7 52 50 12 CE 54 C2 00 47 7E 1B 21 B7 4D F5 29 36 9E 51 6F AC 02 E7 95 13 A6 8A 27 CE C3 5A 9B 9D 89 6B C2 07 D5 E9 55 9A 03 共计 60 字节 其中 第 0 10 字节为头部 11 字节 第 11 26 字节为临时密钥 随机产生 16 字节 第 27 58 字节为加密的数据 32 字节 第 59 字节为包尾 1 字节 密文 第 27 58 字节 用临时密钥解密后为 00 01 01 00 00 00 03 00 00 00 00 3A 3C 0E 21 初始客户端会发送 15 个 0 x00 作为尝试连接 服务器返回 1 02 0F 5F 00 91 01 11 C8 38 BD F8 EA 72 0D 1C 1C F0 E7 72 39 F6 84 F2 03 共 24 字节 其中 第 0 6 字节为头部 7 字节 第 7 22 字节为加密的数据 16 字节 第 23 字节为包尾 1 字节 密文 第 7 22 字节 用初始密钥解密后为 00 00 表示此服务器成功接受连 接 不再重定向 注 可能会有多个服务器接受连接 客户端一般会选择第一个成功接受的服务 器 服务器返回 2 02 0F 5F 00 91 01 11 E3 0E 5A 51 8F F9 96 B4 6E DE A2 9F 9E EC AB 0D 93 4E 24 92 32 18 B4 A2 97 42 06 EF FE D4 F5 58 03 共 40 字节 其中 第 0 6 字节为头部 7 字节 第 7 38 字节为加密的数据 32 字节 第 39 字节为包尾 1 字节 密文 第 7 38 字节 用临时密钥解密后为 00 01 01 00 00 00 01 00 00 00 00 DB 85 3E 08 共 15 字节 明文中的第 0 10 字节固定 我们可以凭借第 0 和第 1 字节是否全是 0 来判断是否需要重定向新的服务器 第 11 14 字节为服 务器分配的新服务器地址 本例为 219 133 62 8 按位转换成十进制 这是 告诉客户端重新去另一个服务器试试 再向新的服务器发送 0X0091 命令 2 2 0X00620X0062 命令 客户端发起 命令 客户端发起 此过程不加密 具体格式如下 发送 02 0F 5F 00 91 01 12 25 DF 2F BF 00 03 共 13 字节 其中 第 0 10 字节为头部 11 字节 第 11 字节为数据 0 x00 1 字节 第 12 字节为包尾 1 字节 服务器返回 02 0F 5F 00 91 01 12 00 18 0B 3B AE 38 09 11 99 1F C0 A3 A7 C1 CD 14 14 27 94 E4 66 EF 7C 3A 3D 8E 03 共 34 字节 其中 第 0 6 字节为头部 7 字节 第 7 8 字节为令牌长度 00 18 2 字节 第 9 32 字节 令牌内容 24 字节 第 33 字节为尾部 1 字节 3 3 0X00BA0X00BA 命令 客户端发起 命令 客户端发起 这个是请求登录令牌命令 格式如下 发送 02 0F 5F 00 BA 01 13 25 DF 2F BF 3F 6B E0 82 C8 E2 82 CA A8 5F F6 EE 00 4B 91 3B A3 C6 F3 D9 EF 23 6A DE 81 D9 DE DF A6 8E C6 91 EE E7 41 E6 7F AD CC 5E F5 3C 2D 0E 95 AC 0D 8C A8 FF 51 18 C3 E3 4A 86 7F 6A 64 EB 46 EE 71 35 03 共 76 字节 其中 第 0 10 字节为头部 11 字节 第 11 26 字节为本包临时密钥 16 字节 第 27 74 字节为加密的数据 48 字节 第 75 字节为包尾 1 字节 密文 第 27 74 字节 用本包临时密钥解密后 18 0B 3B AE 38 09 11 99 1F C0 A3 A7 C1 CD 14 14 27 94 E4 66 EF 7C 3A 3D 8E 03 00 05 00 00 00 00 00 00 00 固定 共 35 字节 第 0 字节 0 x18 为令牌长度 第 1 24 字节 为令牌内容 其实就是 0 x62 命令服务器返回的令牌内容 第 25 28 字节 子命令 如果由验证码获得 第一位是 04 第 29 34 字节 固定 未知 注 此数据包客户端会重复连续发 3 次 服务器返回 服务器会返回 3 次响应 共 56 字节 其中 第 0 6 字节为头部 7 字节 第 7 54 字节为加密的数据 48 字节 第 55 字节为包尾 1 字节 密钥使用上步的临时密钥 密文长度为 48 字节 解密后分别为 03 00 05 00 00 20 4F 50 84 57 E1 AD DC C2 D9 F4 3E CA 22 5F 22 01 F2 25 62 45 A6 7F 32 5B 20 2C 80 21 96 56 D1 AA 03 00 05 00 00 20 8C 2C 78 00 EA BF CE C2 DB 58 D2 BC 98 7A BC CF 28 BB 66 36 92 59 09 91 44 2C 8D 20 B0 81 55 41 03 00 05 00 00 20 DA 71 25 30 2D 5C D0 64 5D AE 86 D5 14 86 E1 07 5E EC 3D BB 29 78 82 08 20 F4 98 3D A2 5E 4E 38 第 0 3 字节 命令集 固定的 第 4 5 字节 令牌长度 第 6 37 字节 为令牌内容 服务器 3 次反馈的令牌内容不一样 第一次的令牌内容在后面还有用 其它两 次的不知道有什么用了 4 4 OX00DDOX00DD 命令 客户端发起 命令 客户端发起 这部分应该是 2007B3 或 B2 新增的命令 用于密码验证 比较重要 格式如 下 发送 包头包尾由上可得 数据段为 224 字节 前 16 字节为临时密钥 后 208 字节为密文内容 解密后内容为 00 5F 00 00 08 04 01 E0 20 4F 50 84 57 E1 AD DC C2 D9 F4 3E CA 22 5F 22 01 F2 25 62 45 A6 7F 32 5B 20 2C 80 21 96 56 D1 AA 00 20 89 39 98 FA 02 65 45 77 C8 90 9C 29 90 71 12 D1 82 9E 01 A6 67 73 0F BC 9A F8 D9 D1 C8 9E 3B FA 00 14 7C 7D 42 CE F3 32 E5 B2 9D 8E 4D D6 CC 66 31 50 CD FB 1F D9 00 67 00 0F 5F 00 BA 01 13 25 DF 2F BF 3F 6B E0 82 C8 E2 82 CA A8 5F F6 EE 00 4B 91 3B A3 C6 F3 D9 EF 23 6A DE 81 D9 DE DF A6 8E C6 91 EE E7 41 E6 7F AD CC 5E F5 3C 2D 0E 95 AC 0D 8C A8 FF 51 18 C3 E3 4A 86 7F 6A 64 EB 46 EE 71 35 03 00 A3 AC C9 CF B4 CE B5 C4 B5 C7 C2 BC B7 BD CA BD CE AA A1 BE B3 F5 CA BC B5 C7 第 0 7 字节 命令集 固定的 第 8 字节 0 x20 令牌长度 第 9 40 字节 令牌内容 就是 0 xBA 第一次服务器返回的响应内容 第 41 字节 0 x00 分隔符 第 42 字节 0 x20 密码验证串长度 第 43 74 字节 密码验证串 比较重要 下面再介绍构成方式 第 75 字节 0 x00 分隔符 第 76 字节 0 x14 长度 第 77 96 字节 未知 不固定 第 97 字节 0 x00 分隔符 第 98 字节 0 x67 剩余字符长度 第 99 字节 0 x00 某种标示 固定的 第 100 101 字节 版本号 第 102 103 字节 0 x00BA 子命令 请求登录令牌 第 104 105 字节 0 x5F15 序列号 随机的 第 106 109 字节 QQ 号 第 110 125 字节 令牌临时密钥 第 126 173 字节 密文登录令牌 可以用上面的密钥解开的 第 174 字节 0 x03 结束符 其实从第 99 174 字节就是 0 xBA 客户端发起的密文 第 175 字节 0 x00 分隔符 第 176 201 字节 是一段中文编码 大概意思是 上次登录方式为 初始登录 方式 没显示全 密码验证串 0 x20 字节的构成方式 基本思路是 先用密码密钥 TEA 算法解这 0 x20 字节 解得到 0 x14 字节 而这 0 x14 字节中的前 0 x10 字节 是密码进行一次 MD5 的结果 后 0 x04 字节是随机 数 由于在这里是登录过程中第一次使用到密码密钥 所以推论应该是在进行 密码验证 服务器返回 数据段长度为 168 字节 全部为密文 密钥使用密码密钥 如果密码错误则用 临时密钥解 解密后内容为 00 97 00 00 00 6D B9 00 20 77 FD AB D6 75 30 5E 03 01 4C 66 9D CE 39 FC CA 0A A7 49 14 AC 15 AA 29 95 89 F5 1A 81 55 6E BF 00 20 FC 14 62 D4 AF 8A A4 88 0B 31 BE 69 16 EC A2 29 B9 28 D1 0A A4 F1 B3 28 5D 56 C6 AD 30 DF 68 5C 00 38 09 67 8B 18 DF 18 BA B1 6D E4 A3 42 7E DD 5E 3D 68 77 2F 6B 77 BA 9F 6B 75 10 AE 90 CC CB 87 1E 74 CF 48 5B 27 EC EC DF 62 CC 70 6E 01 81 0B 90 14 D9 1D 51 E2 2D 29 27 68 63 63 65 35 65 57 56 63 61 4E 43 38 65 53 32 00 00 00 00 00 00 第 0 7 字节 子命令集 第 8 字节 0 x20 长度 第 9 40 字节 内容未知 第 41 字节 0 x00 分隔符 第 42 字节 0 x20 长度 第 43 74 字节 内容未知 第 75 字节 0 x00 分隔符 第 76 字节 0 x38 长度 第 77 132 字节 此段内容将在 0 x22 客户端发送数据段以明文形式出现 作用 不明 第 133 148 字节 这 0 x10 很字节重要 将是 0 x22 命令使用的临时密钥 第 149 154 字节 6 个 0 x00 应该是填充字节 3 3 0X00220X0022 命令 客户端发起 命令 客户端发起 这个是请求登录的命令 里面有一些密码等数据 这部分根据版本的不同 数据段长度不同 解密后内容也不一样 以下以 2007 bate3 为例 发送 数据段长度为 0 x23A Bytes 不确定是定长 数据结构为 第 0 1 字节 0 x0038 长度 第 2 57 字节 作用不明 即 0 xDD 服务器返回内容解密后的第 77 132 字节 第 58 字节到结束 为密文内容 其密文内容用 0 xDD 服务器返回的第 133 148 字节作为临时密钥进行解析 解析后内容为 00 00 00 20 A8 93 88 38 C4 DB 10 D2 1C 89 54 77 75 B1 9D A9 C7 1B 3F 91 BB EC 62 E2 D7 60 61 1C CF CF 97 7E 57 22 C9 78 F9 C8 51 E2 18 1A 28 EB 5F 98 07 D5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 73 19 5B E2 0D 81 E0 BE AE DF 60 39 B8 44 6B E9 C4 28 00 00 00 00 00 00 00 00 00 00 00 01 01 00 00 00 03 00 00 00 00 3A 3C 0E 21 FC BC 0A D4 C4 6E EA 4C A7 72 75 45 8A 65 E5 F7 20 4F 50 84 57 E1 AD DC C2 D9 F4 3E CA 22 5F 22 01 F2 25 62 45 A6 7F 32 5B 20 2C 80 21 96 56 D1 AA 00 00 00 06 00 00 00 00 00 00 01 40 01 68 A6 05 D4 00 10 6C 73 8F 7F 01 53 7D A6 1F E8 CA 03 22 5E A8 FD 00 00 00 00 00 00 00 00 00 00 00 01 01 00 00 00 03 00 00 00 00 3A 3C 0E 21 02 8A 65 96 50 00 10 8F 36 B2 C6 AF 1F 40 1D A4 E4 AA 34 2C BA EF 1C 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 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025恒丰银行重庆分行社会招聘(5.22截止)考前自测高频考点模拟试题完整答案详解
- 2025年马鞍山和县公开引进高中教师12人考前自测高频考点模拟试题及答案详解(网校专用)
- 2025年春季福建华南女子职业学院人才招聘15人考前自测高频考点模拟试题及答案详解(历年真题)
- 2025贵州瓮安县“雁归兴瓮”人才引进考前自测高频考点模拟试题及答案详解(夺冠)
- 2025年河北秦皇岛昌黎第一中学招聘教师若干名考前自测高频考点模拟试题及完整答案详解一套
- 2025年临沂兰陵县国有资产运营有限公司公开招聘工作人员(4名)模拟试卷及答案详解(夺冠系列)
- 2025黑龙江伊春市铁力市乡镇卫生院招聘医学毕业生2人考前自测高频考点模拟试题及一套答案详解
- 2025年4月广东深圳市光明区教育局招聘公办幼儿园人员模拟试卷附答案详解(考试直接用)
- 2025年社区实务基础题库及答案
- 2025年福建省厦门市集美区幸福幼儿园招聘1人模拟试卷及答案详解(夺冠)
- 资阳产业投资集团有限公司第三轮一般员工市场化招聘笔试参考题库附答案解析
- 2025年淮南市大通区和寿县经开区公开招聘社区“两委”后备干部30名笔试备考题库及答案解析
- 《文献检索与科技论文写作入门》课件(共八章)
- 2025云南红河红家众服经营管理有限公司社会招聘工作人员8人笔试参考题库附带答案详解
- 城管协管员面试题目及答案
- DL-T 794-2024 火力发电厂锅炉化学清洗导则
- 天津市受问责干部管理办法
- 内科进修汇报护理
- 口腔咨询师沟通技巧培训
- T/CSWSL 004-2018饲料原料酿酒酵母发酵白酒糟
- 双五归零方法实施培训
评论
0/150
提交评论