igaofen

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

qq使用的是一个封闭协议,目前没有任何官方文档。不过好在有人已经做了这件事,这里要感谢LumaQQ的作者提供的<LumaQQ开发者参 考手册>(可以从lumaqq.linuxsir.org下载),我只是验证一下上面的说法,也谈不上分析。写这篇文章只是纪录一下自己做的事,初 学者水平,高手跳过。

网络协议分析工具,我用的是Ethereal,这是一个开源的软件可去官网免费下载。
设置一下 Fliter, 因为qq默认是UDP连接,为了避免其他协议的干扰,可设置Fliter 为仅拦截udp数据。这玩艺语法挺多的也没细细研究。以前好像有一个叫WPE的东西,直接可以拦截所以从某一程序发出的封包,用起来方便一点,不过因为常 常被用来做外挂,很多杀毒软件干脆把它当病毒处理,晕

Start Capture后,打开QQ。qq登陆成功好后,停止拦截。

QQ程序运行后会做以下的事
1,向服务器请求一个登陆令牌。
      成功的话,服务器返回一个令牌。
2,发出登陆请求(用到前面获得的令牌)
      登陆成功
      ……

所以我们拦截到的第一个封包是用来请求登陆令牌的,
我截获的如下
0000   00 22 aa 40 19 a6 00 e0 4c 80 47 ab 08 00 45 00 .".@....L.G...E.
0010   00 29 72 38 00 00 80 11 f0 18 c0 a8 00 2e db 85 .)r8............
0020   3c 17 0e 45 1f 40 00 15 2a d6 02 0e 1b 00 62 63 <..E.@..*.....bc
0030   39 15 84 6e 8f 00 03                             9..n...

注意这是一个以太网帧,并非全部是qq发出的内容。
按照OSI模型依次剥掉数据链路层,IP层,UDP层的头部后,剩下的才是我们要的东西(红色部分)。

0000   00 22 aa 40 19 a6 00 e0 4c 80 47 ab 08 00 45 00 .".@....L.G...E.
0010   00 29 72 38 00 00 80 11 f0 18 c0 a8 00 2e db 85 .)r8............
0020   3c 17 0e 45 1f 40 00 15 2a d6 02 0e 1b 00 62 63 <..E.@..*.....bc
0030   39 15 84 6e 8f 00 03                             9..n...

qq封包一般由包头,包体,包尾组成。也有些包没有包尾。
根据<LumaQQ开发者参考手册>qq基本输入包格式是这样的。
05系列的输入包基类
1. 包头标识,1字节
2. source,2字节
3. 包长度,2字节
4. 包命令,2字节
5. 包序号,2字节
6. 用户QQ号,4字节
7. 包体
8. 包尾,1字节

我们来安号入座。

05系列的输入包基类
1. 包头标识,0x02 //说明是基本包
2. source,0x 0e1b   //qq版本
3. 包长度,无对应 //可能是使用的是UDP所以不需要长度信息
4. 包命令,0x0062 //说明是一个请求登陆包,我这样想
5. 包序号,0x6339 //循环增加
6. 用户QQ号,0x15846e8f   //用windows附件里的计算器转化成10进制,果然是偶的QQ号!!
7. 包体 0x00           //请求登陆包的包体就是0x00,其他的包会大一点,而且可能会加密,
8. 包尾,0x03     

posted on 2009-08-29 22:19  igaofen  阅读(2024)  评论(0编辑  收藏  举报