zoukankan      html  css  js  c++  java
  • gzip格式分析与识别

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


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


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


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


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


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


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

    640?wx_fmt=png

    具体如下:

    10字节的头,包含幻数、版本号以及时间戳,对应ID1、ID2、CM、FLG、MTIME、XFL、OS;

    可选的扩展头extra  data ,如原文件名;

    文件体compressed blocks,包括DEFLATE压缩的数据;

    8字节的尾注,包括CRC-32校验和CRC32以及未压缩的原始数据长度ISIZE。


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


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


    640?wx_fmt=png


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

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

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


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



    640?wx_fmt=jpeg

    长按进行关注。





  • 相关阅读:
    006使用python编写一个猜数字的程序
    002python函数、高级特性
    008python绘制五个五角星
    005使用 Python 生成 200 个激活码
    001python基础
    003python函数式编程,模块
    004python面向对象,错误,调试和测试
    Docker系列之(一):10分钟玩转Docker
    mongoDB系列之(一):10分钟玩转mongoDB
    Hadoop系列之(二):Hadoop集群部署
  • 原文地址:https://www.cnblogs.com/protosec/p/11673330.html
Copyright © 2011-2022 走看看