iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >gzip压缩文件底层结构及文件损坏的修复方法是什么
  • 242
分享到

gzip压缩文件底层结构及文件损坏的修复方法是什么

2023-06-04 19:06:47 242人浏览 八月长安
摘要

本文小编为大家详细介绍“gzip压缩文件底层结构及文件损坏的修复方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“gzip压缩文件底层结构及文件损坏的修复方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知

本文小编为大家详细介绍“gzip压缩文件底层结构及文件损坏的修复方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“gzip压缩文件底层结构及文件损坏的修复方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

接修复损坏的gzip压缩文件之原理篇,再次引用GZIP结构图:
gzip压缩文件底层结构及文件损坏的修复方法是什么

已知修复一个损坏的gzip文件的关键环节在于找到下一个正常压缩包的起始点。根据结构图中的信息可知,每个压缩包的开始结构中有是否到达尾部标志、使用的哈夫曼树类型、以及3个哈夫曼树的树元素个数等。如果某个gzip文件中间有一个坏扇区,要找到坏扇区后的一个正常起点,仅需按位右移,一直移位到可以正常解压的某个位,就可能找到了正确的压缩包起始。而根据gzip文件的压缩作业窗口为32KB大小推算,这个遍历不会超过64KB即可找到。在内存中快速循环可以很快找到,但需要有明确的判断错误的方法。

首先可以明确的是结尾标志,应该为0(我们是从损坏的点向后查)。而哈夫曼树类型也大致应该是动态哈夫曼(0x02),cl1的元素个数应该取值为257到286之间(包含边界),cl2的元素个数应小于等于30,ccl的元素个数取值可为1-15(包含边界)。
其实,还可以参考的东西有,解开的哈夫曼树是否异常,或者通过规律性原则找到最后一个取值为256的值,但这些算法应该是较为麻烦的,有上面的算法连续校验几个压缩块就足够了。

具体方法是对gzip的源码做修改,进行遍历。因时间关系,未做成通用工程,仅快速修改了部分代码。大致的修改点为:

一,找到损坏点:

在unzip.c中,
error("invalid compressed data--fORMat violated");
这一行前,获取当前解码字节位置即可。

二、遍历找到损坏点:

inflate.c文件中,改

if (nl > 286 || nd > 30)
#endifreturn 1;


为:

if (nl > 286 || nd > 30||nl <257 || nd <1)#endifreturn 1;


2、inflate.c文件中,在int inflate_block(e)函数中
在如下代码前

bb = b; bk = k;


加入代码:

if ((t != 2) || (*e != 0)) return 2;


3、inflate.c文件中,在int inflate_block(e)函数尾部
把if (t == 0) 与if (t == 1)的情况都直接返回错误值2。
 
4、inflate.c文件中,函数int inflate()中,改

if ((r = inflate_block(&e)) != 0) return r; end


为:

unsigned t;            reGISter ulg b;        register unsigned k;   while (inptr <= insize) {     unsigned int tptr = inptr;     unsigned int tbk = bk;     unsigned long tbb = bb;     unsigned int twp = wp;     long long tstart = *(long long*)(inbuf + tptr);     if ((r = inflate_block(&e)) != 0)     {         inptr = tptr;         bb = tbb;         bk = tbk;         wp = twp;         b = bb;         k = bk;         NEEDBITS(1)         DUMPBITS(1)     }     else     {         printf("get by www.datahf.net!"); //也可输出tstart,bb,bk 值,转载时请保留版权信息:www.datahf.net张宇     } }


此4步完成后,试着调试这个错误的.gz文件,当然,也可以在代码中解释完头部结构后加一个seek,直接seek到损坏位置。
通常情况下,输出printf(“get by www.datahf.net!”)这行代码时,已经找到了正确的起始位。
找到起始位后,也可以构造或拷贝一个正常的gzip文件头,再拼接好找到的位流,即可解压了。(如果位流不是字节对齐的,可能要全部做位移)。拼接后很多压缩文件就可以打开甚至于解压了,不过,有可能会报错,主要是尾部的校验和大小错,其实可以忽略。
如果拼接好了linux下,不能直接用“gzip –d”解压,因其crc有错误,会导致解压到99%后报错,然后把文件删除,换成管道命令即可。

读到这里,这篇“gzip压缩文件底层结构及文件损坏的修复方法是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: gzip压缩文件底层结构及文件损坏的修复方法是什么

本文链接: https://www.lsjlt.com/news/239104.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • gzip压缩文件底层结构及文件损坏的修复方法是什么
    本文小编为大家详细介绍“gzip压缩文件底层结构及文件损坏的修复方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“gzip压缩文件底层结构及文件损坏的修复方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-06-04
  • Win7系统下RAR压缩文件损坏怎么修复
      压缩文件可以让我们更快的传送,或者是减少占用磁盘空间。不过有时我们会遇到一些压缩文件损坏,从而无法正常解压。该怎么修复这些损坏的压缩文件呢?   1、首先打开WinRAR软件,在主窗口中打开受损主窗口中打开受损压缩...
    99+
    2023-06-11
    Win7 RAR 压缩文件 损坏 系统
  • win7 64位系统RAR压缩文件损坏该怎么修复
      经常会将多个文件进行压缩打包,在win7 64位系统中,RAR压缩文件损坏了该怎么修复呢可能很多用户不知道,win7 64位系统对RAR压缩文件损坏有修复的功能,下面一起来看看吧。   1、首先打开WinRAR软件,...
    99+
    2023-06-10
    win7 RAR 压缩文件 系统 64位
  • Linux文件系统损坏原因及修复方法
    本篇内容主要讲解“Linux文件系统损坏原因及修复方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux文件系统损坏原因及修复方法”吧!有时候维护Linux服务器时会面临这样一种错误,即显...
    99+
    2023-06-13
  • Python文件的压缩与解压方法是什么
    本篇内容介绍了“Python文件的压缩与解压方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:Python在人工智能,后台服务等...
    99+
    2023-06-30
  • ubuntu压缩文件夹的方法是什么
    在Ubuntu中,可以使用以下方法来压缩文件夹: 使用zip命令:可以使用以下命令将文件夹压缩为一个zip文件: zip -r ...
    99+
    2024-04-02
  • ppt文件损坏修复无法读取的解决方法
    这篇文章将为大家详细讲解有关ppt文件损坏修复无法读取的解决方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。解决方法:首先点击顶部导航栏的“文件”选项卡,在下拉列表里选择“选项”;然后找到“信任中心”,...
    99+
    2023-06-14
  • python读取压缩文件的方法是什么
    Python中读取压缩文件的方法通常是使用相关的库来解压缩文件,然后再读取文件内容。常用的库有zipfile和tarfile。 使...
    99+
    2024-03-06
    python
  • sql在线压缩文件的方法是什么
    SQL数据库不支持直接压缩和解压文件,因为其主要职责是存储和管理数据。然而,你可以使用一些其他方法来在SQL中实现压缩和解压文件的功...
    99+
    2024-04-09
    sql
  • windows中psd文件压缩的方法是什么
    这篇文章主要介绍“windows中psd文件压缩的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows中psd文件压缩的方法是什么”文章能帮助大家...
    99+
    2023-01-29
    windows
  • Win8文件损坏无法自动修复的尝试解决方法
    一、检查映像是否可修复 1.扫描映像来检查损坏。在管理员命令提示符下键入以下命令: Dism /Online /Cleanup-Image /ScanHealth 这条命令将扫描全部系统文件并和官方系统文件对比,扫描计算...
    99+
    2023-06-04
    Win8 文件损坏 自动修复 解决 尝试 文件 方法
  • 将文件压缩成PNG图像存储方法是什么
    本篇内容介绍了“将文件压缩成PNG图像存储方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!这样可以...
    99+
    2024-04-02
  • python解压zip文件的方法是什么
    Python中解压zip文件有以下几种方法:1. 使用`zipfile`模块:该模块提供了处理zip文件的功能。可以使用`zipfi...
    99+
    2023-09-15
    python
  • win11开机文件修复的方法是什么
    要修复Windows 11的开机文件,可以尝试以下方法:1. 使用系统修复工具:Windows 11内置了一些系统修复工具,可以尝试...
    99+
    2023-09-07
    win11
  • windows7彻底删除文件的方法是什么
    Windows 7有几种方法可以彻底删除文件:1. 使用Shift键+Delete键:选中要删除的文件,然后按住Shift键,同时按...
    99+
    2023-09-20
    windows7
  • sqlite数据库文件修复的方法是什么
    要修复SQLite数据库文件,可以尝试以下方法: 使用SQLite官方提供的工具进行修复。SQLite官方提供了一个名为sqlit...
    99+
    2024-04-09
    sqlite
  • 云服务器解压文件的方法是什么
    云服务器解压文件的方法通常有以下几种:1. 使用命令行解压:在云服务器的终端或SSH连接中,可以使用压缩文件格式对应的解压命令进行解...
    99+
    2023-09-25
    云服务器
  • config.php文件修改的方法是什么
    本文小编为大家详细介绍“config.php文件修改的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“config.php文件修改的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、修改前备份...
    99+
    2023-07-05
  • Linux复制文件的方法是什么
    这篇“Linux复制文件的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux复制文件的方法是什么”文章吧。L...
    99+
    2023-06-28
  • ​Android文件系统的结构及目录用途是什么
    Android文件系统的结构是由多个目录组成的,每个目录有不同的用途。以下是Android文件系统的一些重要目录及其用途: /s...
    99+
    2023-10-23
    ​Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作