QQ2005beta2协议分析-v1.2.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
QQ2005beta2协议分析-v1.2

QQ协议2005beta2版分析 概述 。 分析环境 安装了QQ2005beta2,在我的Linux中使用 ethereal抓包软件。 下图: 图上我我抓到数据 QQ加密算法 QQ协议中用到算法有MD5算法,用它来生成密码的HASH串,然后有用来加密传送 数据的TEA算法,推荐的TEA算法应该是 32轮,但是 QQ目前就使用了16轮,TEA是通 过增加加密算法的轮数来提高安全性的,不是使用复杂的算法。 网上有许多的资料关于这两种算法。 由于下面会有代码分析,所以我们这里给出我的MD5算法和TEA相关算法: 下面是我的MD5实现: QQ数据报文 QQ的数据通过UDP方式传送,就是说每个独立的报文长度不会大于 64K,发送到 QQ 服务器的8000端口(默认)。 所有的QQ发送的数据报文格式如下: 字节 内容以及说明 0 报文的开头,所有的报文以 0x02开始 1-2 两个字节的以网络字节顺序表示的QQ版本号 3-4 两个字节的以网络字节顺序表示的命令号 5-6 两个字节的发送序号,接收回应的时候必须效验这个序号, 其实这个序号可以随机生成,我认为。 7 - N 具体的数据,可能加密,也可能不加密,这里的数据要看具 体的情况 N+1 报文的结束,必须以0x03表示 QQ2005beta2版本代码 下面的分析这个版本QQ的版本号码是0x0d51 获取登录令牌 QQ2005beta2登录的时候首先会发送一个请求,向服务器请求登录令牌,目前这令牌是 24个字节,但是其实可以是其他的,要看服务器发回给我们的数据了。 我抓的数据是13个字节,如下: 02 0d 51 00 62 1a 15 14 c5 aa ea 00 03 02 是报文的开头,0x0d51 是版本,0x0062是请求Lgin Token的命令 我登录的QQ号码是348498666,表示位网络字节是 0x00eaaac514 0x1a15 是序号 请求格式如下: 字节 内容 0 0x02报文开始 1-2 网络字节的QQ版本 0x0d51 3-4 请求登录令牌的命令号0x0062 5-6 序号,可以是随机的 7-10 网络字节顺序的QQ号码 11 0x00 12 0x03报文结尾 如果成功会收到到服务返来的数据,这时候需要检查数据的命令类型是否也为 0x0062 并且序列号是否是发送时候采用的序列号,如果不是,表示有错误,可以继续接收下一个包, 直到超时! 目前我们抓到回应数据一般是 34字节, 回应的格式如下: 字节 内容 0 0x02报文开始 1-2 服务器标识,0x0000(一般是) 3-4 0x0062 5-6 序列号,和刚才发送采用的是一样的 7 0表示成功 8 令牌数据的长度(现在是 24) 9 – N 令牌数据 N+1 0x03报文结束 下面是我们获取登录令牌的实现: /* 这个函数用来获取登录令牌*/ int qq_request_login_token(struct qq_client *qc,unsigned char*token) { unsigned char buff_tx[65535]; /*64K数据发送缓存* / unsigned char buff_rx[65535]; /*64K数据发送缓存*/ int len = -1; f d_set fds; struct timeval timeout; int e = -1; uint16_t tmp16 = 0; uint32_t tmp32 = 0; uint16_t seq = rand(); /*我们随机生成序号*/ /*检查传入的参数*/ if(!qc||qc-server0||!token){ return -EFAULT; } /*清零数据是个好习惯!*/ bzero(buff_tx,sizeof(buff_tx)); bzero(buff_rx,sizeof(buff_rx)); /*构造发送数据*/ /*0x02表示报文开始*/ buff_tx[0] = 0x02; /*QQ版本号码 0x0d51是QQ2005beta2 */ *((uint16_t*)buff_tx[1]) = htons(0x0d51); /*0x0062表示登录令牌请

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档