你的位置:pcMing工作室 >> 资讯 >> 网络技术 >> 协议分析 >> 详细内容 在线投稿

QQ2005 beta2 版协议分析

排行榜 收藏 打印 发给朋友 举报 来源: 互联网   发布者:未知
热度144票  浏览35次 【共0条评论】【我要评论 时间:2010年4月06日 21:00

QQ 协议 2005beta2 版协议分析

                                      pcMing工作室(MbY9jNbY:aj

概述我所作的协议是在黑箱基础上面作出, 并参考了LumaQQ 的文档, 还有网上流传很广泛的一份文档, 以及中国协议分析网的部分资料。所分析的结果仅供学习借签参考, 不能用于其他的违法行为。分析环境我在我的Linux 工作站(Redhat Fedore 3 + Linux-2.6.10) 上面安装了Vmware 虚拟机,然后在虚拟上安装了QQ2005beta2, 在我的Linux 中使用ethereal 抓包软件。

8}Fx'HT#rnq0概述
s$D fmx&l'P6A-UGT0我所作的协议是在黑箱基础上面作出, 并参考了LumaQQ 的文档, 还有网上流传很广泛的一份文档, 以及
中国的部分资料。
&{!MO.LDl0所分析的结果仅供学习借签参考, 不能用于其他的违法行为。
;F#Z!wi|(LI0分析环境
:DYv8w;kM n*K0我在我的Linux 工作站(Redhat Fedore 3 + Linux-2.6.10) 上面安装了Vmware 虚拟机,然后在虚拟上安装了QQ2005beta2, 在我的Linux 中使用ethereal 抓包软件。
协议分析网pcMing工作室*L7W.x2Ce#?&c[f%L

pcMing工作室,D IS:t~3}}&\ i


dP4_:mn!jq1Q0下图:

)tP Zb_0pcMing工作室@O*A5w&EE!~X

CUs.cL0

6GS'z6NAHFS l0

z.v-ec4_;u2K|qj0pcMing工作室(S'j0oI,]$A*n5e2{

p L.?"VC }:Z0

QQ 加密算法QQ协议中用到算法有MD5 算法,用它来生成密码的HASH 串,然后有用来加密传送数据的TEA 算法,推荐的TEA 算法应该是32 轮,但是QQ 目前就使用了16 轮,TEA 是通过增加加密算法的轮数来提高安全性的, 不是使用复杂的算法。

pcMing工作室I t\)[u{DX*]x

?j%O]&MXlZ0pcMing工作室S'o| l)O

网上有许多的资料关于这两种算法。由于下面会有代码分析, 所以我们这里给出我的MD5 算法和TEA 相关算法:下面是我的MD5 实现:pcMing工作室k*M_Q`)NG

QQ 数据报文QQ 的数据通过UDP 方式传送,就是说每个独立的报文长度不会大于64K,发送到QQ 服务器的8000 端口(默认)。pcMing工作室q:?c3]#VJ'e/b7[

Y9_Or C!W-E/@~0

所有的QQ 发送的数据报文格式如下:pcMing工作室L Gi%z%e"p&Fu/k

[*f} |/h4Z q0

字节内容以及说明
0报文的开头, 所有的报文以0x02 开始
1-2两个字节的以网络字节顺序表示的QQ 版本号
3-4两个字节的以网络字节顺序表示的命令号
5-6两个字节的发送序号,接收回应的时候必须效验这个序号,
其实这个序号可以随机生成,我认为。
7 -N具体的数据,可能加密,也可能不加密,这里的数据要看具
体的情况
N+1报文的结束,必须以0x03 表示

i]TP \2M V|0

QQ2005beta2 版本代码下面的分析这个版本QQ 的版本号码是0x0d51

_~Efouw0

)`B?$V_\.QsZ0pcMing工作室NCTk.G&v.`0|

0N7E*M1Dm&P0获取登录令牌QQ2005beta2 登录的时候首先会发送一个请求,向服务器请求登录令牌,目前这令牌是

g|&ND,k b0pcMing工作室3H.K/f iS~u+s

9|"~j:~&Mhl"\0

!MQeQ.}024 个字节,但是其实可以是其他的,要看服务器发回给我们的数据了。我抓的数据是13 个字节,如下:020d 51 00 621a 1514 c5 aa ea 0003 02 是报文的开头,0x0d51 是版本,0x0062 是请求Lgin Token 的命令我登录的QQ 号码是348498666,表示位网络字节是0x00eaaac514 0x1a15 是序号

%\0~6CXd%Cv0

:h,b ~'W|3DTAn0请求格式如下:pcMing工作室OCh;s7Os%Y j

pcMing工作室5T"Oy8E)[ s)J*I}:s

字节内容
00x02 报文开始
1-2网络字节的QQ 版本0x0d51
3-4请求登录令牌的命令号0x0062
5-6序号,可以是随机的
7-10网络字节顺序的QQ 号码
110x00
120x03 报文结尾

6X-K4mI+e)R}4Q.v"[0pcMing工作室m/wb,H.n4N k

如果成功会收到到服务返来的数据,这时候需要检查数据的命令类型是否也为0x0062 并且序列号是否是发送时候采用的序列号,如果不是,表示有错误,可以继续接收下一个包,直到超时!

![0jX)Bnko6Q0pcMing工作室z5xo U;M(Hw

目前我们抓到回应数据一般是34 字节,pcMing工作室+_X N)f!N D0@S g

pcMing工作室H | B p&x$[;Y

回应的格式如下:pcMing工作室 MC)]I2Q4?5Z.k%`&v:e

pcMing工作室1G"C.D:I!I3Lx'tIBq

字节内容
00x02 报文开始
1-2服务器标识,0x0000(一般是)
3-40x0062
5-6序列号,和刚才发送采用的是一样的
70 表示成功
8令牌数据的长度(现在是24)
9 – N令牌数据
N+10x03 报文结束

YbL~Gm+z"Y0

'kM2UxvJ0下面是我们获取登录令牌的实现:pcMing工作室+U@*f1hK-?tk2~ e

6Xy6l/B6_5hr3^%T Z0/* 这个函数用来获取登录令牌*/ int qq_request_login_token(struct qq_client *qc,unsigned char*token) {

R3X5p c9V3f&d0/*发送这13个字节的报文到QQ服务器*/ len = write(qc->server,buff_tx,13);pcMing工作室Q8J:[8P*B:TC

/[`)y0E`Ls0/*我们采用了非阻塞的套节字, 所以么设置超时, 并检查socket 事件!*/ bzero(&timeout,sizeof(timeout)); /*超时一秒*/ timeout.tv_sec = 1; timeout.tv_usec = 0; /*设置需要监视的socket*/ FD_ZERO(&fds); FD_SET(qc->server, &fds); /*检查socket 事件*/ e = select(qc->server+1,&fds,NULL,NULL,&timeout);

t,h _ @1y1?0

1M n;K,U{/^ u0if(e==-1||e==0){ /*超时了… */ fprintf(stderr,"request login token timeout.\n"); return -EFAULT;pcMing工作室E;C"^!zy(@0S0e d&m5B$J

o2ASn#B!a&]K'I0}pcMing工作室$\/a m&S bIse

pcMing工作室 ?xYn3oo[8y'O

/*好了!服务器回应数据出现了把接收数据放入buff_rx */ len = read(qc->server,buff_rx,sizeof(buff_rx));

.F X*@Rj-S#m0

8@+t5r$z:m,z+o K6Sz0if(len<=0){ /*读入数据失败*/ fprintf(stderr,"request login token error.\n"); return -EFAULT;pcMing工作室+B/M4|j @)T };o;b^

pcMing工作室9J8zz"D3R)Fez3f

}

+hM9H'p)~`0pcMing工作室3c(~!M@M

if(buff_rx[0] != 0x02 ){ /*不是QQ报文*/ fprintf(stderr,”not qq data .\n”); return –EFAULT;pcMing工作室u)d'HQ:R U+I5Hm![$`*|

3Q)^+sO5u0}pcMing工作室meYE8ZL

pcMing工作室_BB;oX7\

#if 0 tmp16 = *((uint16_t*)&buff_rx[1]); printf("respond source tag x\n",ntohs(tmp16));pcMing工作室 Gk:t!z @

pcMing工作室It5d9Rs M)`

#endifpcMing工作室8Z)X'Q;j` pD;y

#Z,S'F"kJb-l'kE0tmp16 = *((uint16_t*)&buff_rx[3]);pcMing工作室&C:c'j] A&dkD

顶:6 踩:6
对本文中的事件或人物打分:
当前平均分:0.21 (43次打分)
对本篇资讯内容的质量打分:
当前平均分:0.07 (43次打分)
【已经有46人表态】
5票
感动
4票
路过
3票
高兴
8票
难过
8票
搞笑
7票
愤怒
5票
无聊
6票
同情
上一篇 下一篇
发表评论
换一张

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】

网络资源