- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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表示登录令牌请
您可能关注的文档
- 竖直面的圆周运动临界问题和连接体问题.ppt
- 第三章趋势面分析.ppt
- 丛文软件与博世B420的连接说明.pptx
- 第三章 市场调查抽样方法.ppt
- 第3章 过程系统模拟的基本方法.ppt
- 数据采集--信号输入(单端输入、差分).ppt
- 数据库设计中的误区——连接陷阱.ppt
- 7 粗钢筋连接技术.ppt
- 第三章 电子商务的业务流程及主要环节.ppt
- 关于QQ飞车比赛的策划.doc
- 2024高考物理一轮复习规范演练7共点力的平衡含解析新人教版.doc
- 高中语文第5课苏轼词两首学案3新人教版必修4.doc
- 2024_2025学年高中英语课时分层作业9Unit3LifeinthefutureSectionⅢⅣ含解析新人教版必修5.doc
- 2024_2025学年新教材高中英语模块素养检测含解析译林版必修第一册.doc
- 2024_2025学年新教材高中英语单元综合检测5含解析外研版选择性必修第一册.doc
- 2024高考政治一轮复习第1单元生活与消费第三课多彩的消费练习含解析新人教版必修1.doc
- 2024_2025学年新教材高中英语WELCOMEUNITSectionⅡReadingandThi.doc
- 2024_2025学年高中历史专题九当今世界政治格局的多极化趋势测评含解析人民版必修1.docx
- 2024高考生物一轮复习第9单元生物与环境第29讲生态系统的结构和功能教案.docx
- 2024_2025学年新教材高中英语UNIT5LANGUAGESAROUNDTHEWORLDSect.doc
文档评论(0)