本人最近正在研究IM通信协议内容。前面有幸联系到kanxue前辈,直接请教了一番确实受益匪浅!大大提高了研究进度。现在把初步分析结果公布出来一方面感谢kanxue前辈的大力支持,另一方面也是抛砖引玉希望看雪论坛的高手多多指教!

同时要特别感谢rgbsky关于QQ登录协议的分析贴(http://bbs.pediy.com/showthread.php?t=62660&highlight=QQ+%E5%8D%8F%E8%AE%AE),对于我的分析有极大帮助!(这也是kanxue前辈推荐的。)

目前使用较多的网络协议分析工具是Sniffer,抓包之后保存抓包文件为*.cap文件。本帖子主要是介绍该CAP文件格式,打个基础为后面的分析做准备。我们后面介绍的网络协议分析过程都是针对这种*.cap文件进行的。


使用工具:
Sniffer Pro 4.70.530

WinHex

PETools


大体上我把CAP文件分成两个部分:
01.Sniffer头部:包含整个CAP文件的基本信息。大小为128B(0000-007F)。
02.数据包部分:包含多个数据包单元。
   每个包含两部分:01.Sniffer 包头。包含Sniffer提供的抓包时间和包总大小等信息。
                  02.数据包内容。

★ 这里的数据说明顺序按照网络顺序。

Sniffer头部详细信息:
0000 - 0003: 58 43 50 00 -> XCP.    为CAP包文件头。可以用于判断打开文件是否为合法CAP文件。
0004 - 000B: CAP文件版本号。
000C - 000F: 开始抓包时间。为time_t类型数据。样本中为:C8 BB A7 49 通过PETools中的Time/Date Stamp转换可以看到日期时间如图01。
0010 - 0013: 整个文件中的数据包个数。样本中为:07 02 00 00 -> 共519包。
0014 - 007F: 未知。本次试验没有用到就没有分析了。呵呵。如果有高手做过分析请不吝赐教!

每个数据包的前面都有40B的数据我称之为Sniffer包头,是Sniffer添加的。这里举例分析的是第一个Sniffer包头内容。
偏移量为相对于文件头。
0080 - 0083: 抓取本数据包的时间。这个时间是相对于前面整体抓包时间的增量以微秒为单位。而time_t是从UTC 1970-1-1 0:0:0开始计算并以秒为单位,所以要转换是必须将这个数据除以100万再累加。所以样本中的: DF D0 B8 00 大约对应12秒所以第一个数据包的时间如图2所示。使用Sniffer打开数据包可以看到该结果正确。唯一的不同是Sniffer显示的是本地时间。注意到上述问题写程序解析就没问题了。我个人认为Sniffer这样的设计应该是为了精确表示抓包时间,因为现在网速越来越快,每秒中可能会有几百上千个数据包流过。如果用秒做单位显然不够精确。

0088 - 0089: 表示该数据包的实际大小。
0090 - 0091: 同样表示该数据包的实际大小。用两个WORD表示可能是为了占位。呵呵。
Sniffer包头的后续部分都是0,在目前得到的样本中一般都是0。可能是给未来使用留下的。


目前我使用的解析CAP文件的方法是:

01、首先判断输入文件是否为合法的CAP文件。
02、读取开始抓包时间保存下来,为计算做准备。
03、读取文件中的总数据包个数,用于后续的循环控制。
04、进入循环后首先读取该包的抓包时间增量和包实际大小。分配内存读取数据包开始分析。


补充说明:提供的QQ.cap文件为了安全只有提供一个数据包。不过Sniffer依然可以正常打开该文件。

上传的附件 CAP文件格式分析.rar