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

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

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

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

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

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

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

具体如下:

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编码数据的起始了,继续分析就简单了。

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

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

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

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

长按进行关注。

最新文章

  1. 前端MVC框架Backbone 1.1.0源码分析(二) - 模型
  2. UE4开发神秘海域类游戏原型 初阶(二):动画资源的整合
  3. jenkins调度selenium脚本不打开浏览器解决办法
  4. Linux为什么卡住了?
  5. linux网络命令
  6. HTML5——将图片拖拽上传
  7. QQReg.java
  8. ZOJ 1090 The Circumference of the Circle
  9. AngularJS与RequireJS集成方案
  10. 使用JQuery双击修改Table中Td
  11. Android开源项目发现---Layout 篇(持续更新)
  12. 如何使用Add-on SDK开发一个自己的火狐扩展
  13. Java中的String类型
  14. 解决Centos7 yum 出现could not retrieve mirrorlist 错误
  15. java文件上传 关键代码
  16. python 初始socket
  17. PHP 图片验证码验证
  18. C++拷贝控制
  19. Java jvm 内存参数限制
  20. 【Alpha版本】冲刺阶段——Day5

热门文章

  1. SpringCloud的入门学习之Eureka(高可用注册中心HA)构建Provider服务、Consumer服务
  2. IO相关Demo
  3. C#中实现文件重命名的方式
  4. 简单快速上手Jackson使用
  5. apache部分报错解决方法
  6. Android Gradle 学习笔记(二):Gradle Wrapper
  7. Visual Studio Code管理MySQL
  8. RF自动化测试之元素封装
  9. windows下切换Python运行环境。
  10. Kali设置1920x1080分辨率