介绍gzip格式,识别gzip压缩的数据流量。

在协议分析过程中,经常会发现gzip压缩的数据,例如在HTTP协议中,在HTTP头中会标示,内容编码为gzip、DEFLATE。

但是,还有很多情况,例如一些非HTTP协议,特别是私有协议中,数据同样采用gzip压缩,但是,流量中并未写明数据是gzip压缩格式,这就给分析带来了困难。

如何解决这个困难呢?只能从数据本身着手了,需要了解gzip压缩后数据的特征和标记,以确定哪些数据是gzip压缩。

gzip的基础是DEFLATE,它其实是多种压缩文件格式的简称。在RFC1952中对gzip格式进行了定义。

对gzip格式的数据,通常使用zlib库就可以解压缩。

gzip压缩格式的数据的识别,依靠的是gzip格式内的一些特征,gzip格式如下图:

gzip格式分析与识别-LMLPHP

具体如下:

在文件头中,ID1和ID2分别为固定值0x1F,0x8B;而CM则定义了压缩使用的算法,目前仅一种,即DEFLATE压缩,对应值为0x08;FLG、MTIME、XFL、OS分别为标记、时间、可选扩展头标记、操作系统标记。

对gzip格式的识别,依靠的就是gzip的起始3字节,因为这三个字节目前是固定的,只有我们在数据流中,发现了1F 8B 08,则表示找到了gzip编码数据的起始了,继续分析就简单了。

gzip格式分析与识别-LMLPHP

如果想找个gzip的示例文件,那就到gzip官网去下载吧:

http://alpha.gnu.org/gnu/gzip/

目录下的压缩包都是gzip压缩格式。

根据各种类型的数据标记,来确定待分析的未知数据流中的数据格式,是一项很有用的技能,希望大家能多锻炼,多掌握,很多数据格式的标记,都可以在网络中找到,有人已经总结好了。

gzip格式分析与识别-LMLPHP

长按进行关注。

05-16 10:33