CN112214462A - 压缩文件的多层解压缩方法、电子设备及存储介质 - Google Patents
压缩文件的多层解压缩方法、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112214462A CN112214462A CN202011141972.4A CN202011141972A CN112214462A CN 112214462 A CN112214462 A CN 112214462A CN 202011141972 A CN202011141972 A CN 202011141972A CN 112214462 A CN112214462 A CN 112214462A
- Authority
- CN
- China
- Prior art keywords
- file
- data
- data packet
- zip
- length
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
- G06F16/164—File meta data generation
- G06F16/166—File name conversion
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请公开了一种压缩文件的实时多层解压缩方法、电子设备及存储介质,该实时多层解压缩方法包括:接收压缩文件的数据包,实时判断所述数据包是否为ZIP文件,如果是则使用ZIP状态机进一步解压缩所述数据包,生成若干一级子文件;依次判断每个一级子文件是否为ZIP文件,如果是则使用ZIP状态机进一步解压缩所述一级子文件,生成若干二级子文件;重复上述判断和解压缩过程,直至所有数据包和子文件均不是ZIP文件为止。本申请实施例提供的压缩文件的多层解压缩方法,支持对单个数据包的实时多层解压缩,不进行文件内容缓存,节约了存储空间;通过多层解压缩实现对每一层子文件的解析,可有效识别出压缩包炸弹。
Description
技术领域
本申请涉及网络安全技术领域,具体涉及一种压缩文件的多层解压缩方法、电子设备及存储介质。
背景技术
在网络安全领域,病毒文件为了躲避防火墙的检测会进行一定的伪装,其中压缩就是一种比较常见的方式,特别是经过多层压缩的病毒文件。压缩文件是经过压缩软件压缩的文件,其原理是通过对文件中重复字节建立相同字节的字典文件,并用一个代码表示,达到缩小文件的目的。病毒文件可以和正常文件混合压缩,并且压缩多层,由于病毒库不可能覆盖所有压缩形式的病毒特征,当防火墙不具备多层解压功能时,将导致病毒文件在网络中传播,威胁整个网络系统的安全。
现有技术中对上述问题的解决方式是通过DPI(深度报文检测)引擎对网络数据包进行解析,通过文件识别功能识别出压缩文件并对文件进行缓存,当文件缓存结束后再进行解压缩。
然而,现有技术的解决方式,对文件内容进行缓存对内存资源消耗严重;在实时流量中对文件缓存后再解压缩,当文件过大时解压缩过程可能耗时较长,导致断流或者文件重传问题,对防火墙功能影响较大。为了避免这种副作用通常防火墙会对解压缩文件大小进行限制,当文件超过一定长度后就不再进行解压缩,导致压缩文件解压不全,影响安全设备对病毒的检测能力。
发明内容
本申请的目的是提供一种压缩文件的多层解压缩方法、电子设备及存储介质。为了对披露的实施例的一些方面有一个基本的理解,下面给出了简单的概括。该概括部分不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围。其唯一目的是用简单的形式呈现一些概念,以此作为后面的详细说明的序言。
根据本申请实施例的一个方面,提供一种压缩文件的多层解压缩方法,包括:
接收压缩文件的数据包,实时判断所述数据包是否为ZIP文件,如果是则使用ZIP状态机进一步解压缩所述数据包,生成若干一级子文件;
依次判断每个一级子文件是否为ZIP文件,如果是则使用ZIP状态机进一步解压缩所述一级子文件,生成若干二级子文件;
重复上述判断和解压缩过程,直至所有数据包和子文件均不是ZIP文件为止。
进一步地,所述方法还包括:若所述数据包或所述子文件不是ZIP文件,则对所述数据包或所述子文件进行深度报文检测。
进一步地,所述方法还包括:将所述使用ZIP状态机进一步解压缩所得到的解压缩信息存储在预先创建的文件信息结构中;
其中,所述文件信息结构包括多个层,所述多个层用于互相隔离地存放各级子文件的解压缩信息。
进一步地,所述方法还包括:
当一个所述子文件解压不出新的子文件时,清空所述文件信息结构。
进一步地,在所述实时判断每个数据包是否为ZIP文件之前,所述方法还包括:
实时判断所述数据包是否是所述压缩文件的第一个数据包;
若是,则进入所述实时判断每个数据包是否为ZIP文件的步骤;
否则,将当前接收到的数据包加入到当前对上一个数据包的解压缩的过程中一并进行处理。
进一步地,所述使用ZIP状态机进一步解压缩所述数据包的过程,包括:
进入文件头处理状态;
处于文件头处理状态时,判断所述数据包的待处理数据长度是否大于或等于ZIP头长度,若是则进入扩展区处理状态;否则等下个数据包进入所述文件头处理状态时一并处理;
处于扩展区处理状态时,根据压缩长度和解压后长度计算压缩比,当压缩比和解压后长度均超过预设阈值时,确定所述压缩文件为压缩包炸弹;
判断待处理数据是否大于或等于文件名长度与扩展区长度之和,若否则退出,若是则判断解压后长度与压缩长度是否均为0;若均为0则确定是空文件或者文件目录,否则进入数据处理状态;
处于数据处理状态时,利用DEFLATE算法处理所述数据包的数据部分;当解压数据长度与文件头的压缩长度相等时,进入文件魔术字查找状态;
处于文件魔术字查找状态时,查找下一个文件头标识,若查找到则对下一个文件进行解压缩,否则进入文件处理结束状态。
进一步地,所述利用DEFLATE算法处理所述数据包的数据部分,包括:
设置DEFLATE算法结构体参数;
当所述DEFLATE算法结构体参数中的输出缓冲区起始地址满时,记录未解压数据起始位置,暂停解压,处理解压出的数据;
处理完解压出的数据后,从所述未解压数据起始位置继续解压;
如果解压出的数据的长度为0,则停止解压缩,继续上一层文件的处理,当上一层文件解压出数据后,再继续当前层解压缩处理。
进一步地,所述DEFLATE算法结构体参数包括待解压数据起始地址、待解压数据长度、输出缓冲区起始地址和输出缓冲区长度。
进一步地,所述输出缓冲区起始地址所指向的缓冲区为每CPU变量。
根据本申请实施例的另一个方面,提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序,以实现上述的压缩文件的实时多层解压缩方法。
根据本申请实施例的另一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行,以实现上述的压缩文件的实时多层解压缩方法。
本申请实施例的其中一个方面提供的技术方案可以包括以下有益效果:
本申请实施例提供的压缩文件的多层解压缩方法,支持对单个数据包的实时多层解压缩,不进行文件内容缓存,节约了存储空间;通过多层解压缩实现对每一层子文件的解析,可有效识别出压缩包炸弹。
本申请的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者,部分特征和优点可以从说明书中推知或毫无疑义地确定,或者通过实施本申请实施例了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了ZIP文件格式;
图2示出了多个文件压缩到一起的格式;
图3示出了ZIP文件解压缩后的格式;
图4示出了本申请一个实施例的压缩文件的实时多层解压缩方法流程图;
图5示出了本申请一个实施例中的数据包经过多次解压缩产生若干层子文件的示意图;
图6示出了本申请实施例中的文件信息结构;
图7示出了图4所示实施例的步骤S10的流程图;
图8示出了本申请一实施方式中对数据包进行多层解压缩的流程图;
图9示出了本申请一实施方式中对文件进行解压缩的流程图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,下面结合附图和具体实施例对本申请做进一步说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本申请所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
ZIP是一种数据压缩和文档储存的文件格式。ZIP文件格式如图1所示。
A区域部分为ZIP文件头包括文件头标识(0x50 0x4B 0x03 0x04),压缩后大小、压缩前大小、文件名长度、扩展区长度等,B区域部分为目录区,C区域部分以0x50 0x4B 0x050x06为起始标记目录区结束,中间部分出去文件名和扩展区数据剩下的为压缩文件数据部分。
多个文件压缩到一起的格式如图2所示。可以理解为多个文件分别压缩,并用文件标识符标记文件的开始。文件数据(File data)解压缩后可能为ZIP文件也可能为其他类型文件,如果为ZIP文件,则格式如图3所示。
网络中的文件可能分包,由于AC算法有跨包匹配的能力,可实现对解压后分段数据的扫描。DEFLATE算法是同时使用LZ77算法和哈夫曼编码的一个无损数据压缩算法。LZ77算法是采用字典做数据压缩的无损压缩算法。哈夫曼编码是一种编码方法,该方法完全依赖字符出现概率来构造异字头的平均长度最短的码子,也称为最佳编码或霍夫曼编码。
参考图4所示,本申请的一个实施例提供了一种压缩文件的实时多层解压缩方法,包括:
S10、接收压缩文件的数据包,实时判断该数据包是否为ZIP文件,如果是则使用ZIP状态机进一步解压缩该数据包,生成若干一级子文件。
具体地,每接收到压缩文件的一个数据包,就实时对接收到的该数据包进行识别,识别所接收到的数据包的类型,如果类型为ZIP文件,则使用ZIP状态机进一步解压缩该数据包,生成若干一级子文件F1。在该步骤中不需要对单个数据包进行文件内容缓存,而是直接对单个数据包进行解压缩处理,节省了存储空间。
S20、依次判断每个一级子文件是否为ZIP文件,如果是则使用ZIP状态机进一步解压缩该一级子文件,生成若干二级子文件。
ZIP类型的一级子文件F1进一步解压缩生成若干二级子文件F2。
S30、重复上述判断和解压缩过程,直至所有数据包和子文件均不是ZIP文件为止。
例如,对于其中一个一级子文件F1,进行一次识别解压缩处理后,若得到新的子文件,则称为二级子文件F2;对二级子文件F2继续进行识别解压缩处理……对每一代的每一个子文件进行识别解压缩的处理,直到任何一个子文件都不能再解压出新的ZIP类型子文件为止。通过上述步骤能够实现对单个数据包的实时多层解压缩。
如图5所示,数据包解压缩得到若干一级子文件F1,每一个一级子文件F1经过解压缩后得到的若干子文件称为二级子文件F2,每一个二级子文件F2经过解压缩后得到的若干子文件称为三级子文件F3,依次类推。一个n级子文件(可以表示为Fn)与数据包之间经过了n次解压缩操作,所有n-1级子文件(可以表示为Fn-1)均称为任一n级子文件的上一层(或上层)子文件,所有n+1级子文件(可以表示为Fn+1)均称为任一n级子文件的下一层(或下层)子文件。
在某些实施方式中,该方法还包括:
S40、若该数据包或该子文件不是ZIP文件,则对该数据包或该子文件进行深度报文检测。
在某些实施方式中,该方法还包括:
S50、将使用ZIP状态机进一步解压缩所得到的解压缩信息存储在预先创建的文件信息结构中;
其中,文件信息结构包括多个层,该多个层用于互相隔离地存放各级子文件的解压缩信息。
如图6所示,预先创建的文件信息结构包括多个层,该多个层用于互相隔离地存放各级子文件的解压缩信息。
在某些实施方式中,该方法还包括:当一个子文件解压不出新的子文件时,清空文件信息结构。
在某些实施方式中,如图7所示,在步骤S10中,在实时判断每个数据包是否为ZIP文件之前,该方法还包括:
S101、实时判断该数据包是否是压缩文件的第一个数据包;
S102、若是压缩文件的第一个数据包,则进入实时判断每个数据包是否为ZIP文件的步骤;
S103、若不是压缩文件的第一个数据包,将当前接收到的数据包加入到当前对上一个数据包的解压缩的过程中一并进行处理。
在某些实施方式中,文件信息结构保存文件识别状态机执行所需要的信息,其中Subfile information指向下层文件信息结构,下层文件信息结构中Subfile information指向下下层文件信息结构等等。文件信息结构中的指针的值若为空,则该文件信息结构所对应的数据包为第一个数据包。判断数据包是否是压缩文件的第一个数据包,即通过判断文件信息结构中的指针的值是否为空来实现。
为了实现多层解压缩,本实施例对不同层文件信息和不同层压缩文件解压缩信息进行隔离,并且解压后同一层的不同文件共用一个文件信息结构,文件信息结构如图6所示。多层解压缩时对不同层的文件进行隔离,当一层处理错误时不会影响上一层压缩文件的处理,容错性强。
如图6所示,Uncompress information指向解压缩结构,如果当前文件不是ZIP文件则该字段为空。File recognize state为文件识别状态机状态,用于控制文件识别状态机执行。
File id为文件ID,用于标识当前处理文件的类型,比如docx、png、exe、zip等。
解压缩信息结构用于保存解压缩状态机执行解压缩操作所需要的信息,其中Uncompress state为解压缩状态,控制解压缩状态机的执行。
Uncompress len记录当前解压文件解压缩后长度,从ZIP文件头获取。
Compress len记录当前压缩文件数据部分长度。
z_stream为DEFLATE算法结构。
在某些实施方式中,如图8所示,数据包进入解压缩系统后,首先从系统上下文获取之前创建的文件信息结构,如果获取不到之前创建的文件信息结构则需要创建文件信息结构,然后进入文件识别系统进行文件类型识别,如果之前已经识别出文件类型则进行进一步确认,否则进行文件识别。
在某些实施方式中,文件识别处理后,如果是ZIP文件,则进入ZIP解压缩状态机,否则把文件内容送入DPI(深度报文检测)引擎进行威胁检测。
在某些实施方式中,ZIP状态机处理后,如果没有解压缩数据输出,说明文件解压缩处理结束或者输入的数据长度不够,处理结束;如果输入的数据长度不够,则此时的解压缩状态已经在ZIP状态机中记录,后续数据包可继续走ZIP解压缩处理;如果文件处理结束,下个数据包为新文件首数据包,则按照新文件处理。
在某些实施方式中,如果有解压缩数据输出,说明有子文件需要处理,则进入子文件处理模块,子文件处理模块处理后,判断子文件是否处理结束,若处理结束则清理文件信息结构和解压缩信息,以方便同层的其他文件的处理;子文件解压结束,可能还有下一个待解压的文件数据,即该数据包横跨两个以上的文件,所以判断未处理数据长度是否大于0,如果大于0,则继续进入解压缩状态机,继续新文件处理;未结束则退出系统,下次数据包过来继续解压缩处理。
子文件处理就是一个递归过程,处理方法和上面描述一致。
ZIP状态机对文件或数据包的解压缩的过程包括:文件头处理状态header_state、扩展区处理状态extern_state、数据处理状态data_state和文件魔术字查找状态magic_state。
在某些实施方式中,使用ZIP状态机进一步解压缩数据包的过程,包括:
(1)进入文件头处理状态。
(2)处于文件头处理状态时,判断该数据包的待处理数据长度是否大于或等于ZIP头长度,若是则进入扩展区处理状态;否则等下个数据包进入文件头处理状态时一并处理。
(3)处于扩展区处理状态时,根据压缩长度和解压后长度计算压缩比,当压缩比和解压后长度均超过预设阈值时,确定该压缩文件为压缩包炸弹。能够有效准确地识别压缩包炸弹。
(4)判断待处理数据是否大于或等于文件名长度与扩展区长度之和,若否则退出,若是则判断解压后长度与压缩长度是否均为0;若均为0则说明是空文件或者文件目录,否则进入数据处理状态。
(5)处于数据处理状态时,利用DEFLATE算法处理数据部分;当解压数据长度与文件头的压缩长度相等时,进入文件魔术字查找状态。
(6)处于文件魔术字查找状态时,查找下一个文件头标识,若查找到则对下一个文件(例如下一数据包)进行解压缩,否则进入文件处理结束状态。
在某些实施方式中,利用DEFLATE算法处理数据部分,包括:
(5-1)、设置DEFLATE算法结构体参数。
(5-2)、当DEFLATE算法结构体参数中的输出缓冲区起始地址满时,记录未解压数据起始位置,暂停解压,处理解压出的数据。
(5-3)、处理完解压出的数据后,从未解压数据起始位置继续解压。
(5-4)、如果解压出的数据的长度为0,则停止解压缩,继续上一层的处理,当上一层解压出数据后,再继续当前层解压缩处理。
在某些实施方式中,DEFLATE算法结构体参数包括待解压数据起始地址、待解压数据长度、输出缓冲区起始地址和输出缓冲区长度。
在某些实施方式中,如图9所示,ZIP状态机解压缩文件的过程中,如果是压缩文件首包(即压缩文件的第一个数据包),则初始化解压缩状态机结构,并设置解压缩状态为文件头处理状态header_state,否则查询解压缩状态,根据当前状态机状态进入不同的流程处理。
进入header_state时,首先判断待处理数据长度是否满足大于或等于ZIP头长度(30字节),若不满足则缓存当前数据(最多缓存30字节),下个数据包(即压缩文件的下一个数据包)进入该状态继续处理;若满足则设置状态机状态为扩展区处理状态extern_state。
处于header_state时,解析出头部压缩长度、解压后长度、文件名称长度、扩展区长度等信息,根据压缩长度和解压长度计算压缩比,当压缩比和解压长度过大(例如压缩比大于20、解压长度大于200M)时,认为该压缩文件为压缩包炸弹。压缩包炸弹,英文名称为Arc.Bomb,是一款压缩包病毒,通常只有几十KB压缩包,但解压出来有几百MB,解压过程好像炸弹爆炸一样。
进入extern_state时,判断待处理数据是否满足大于或等于文件名长度和扩展区长度之和,若不满足则退出状态机,若满足则判断解压长度和压缩长度是否为0,为0则说明是空文件或者文件目录,否则设置状态机状态为数据处理状态data_state。该过程可根据需要提取文件名和扩展区信息。
处于data_state时,设置DEFLATE算法结构体参数z_stream,该参数中包括:next_in为待解压数据起始地址、avail_in为待解压数据长度、next_out为输出缓冲区起始地址、avail_out为输出缓冲区长度。next_out的大小可根据系统资源情况进行分配,整个解压缩过程不受next_out空间大小限制。当next_out满时,记录未解压数据起始位置,退出ZIP解压状态机。如果解压后的数据为ZIP文件则在文件处理状态机中继续进行下层文件解压缩,如果不是压缩文件则进行DPI引擎扫描,解压输出内容处理完后,继续从上次未解压缩数据的开始位置,继续解压,实现对输出缓冲区的循环使用。
next_out指向的缓冲区为每CPU变量,防止多核并发,且每同一层文件共用,因为解压缩过程每个文件顺序进行,也不会发生文件间混用。根据CPU核数分配若干块内存,每块内存和CPU ID一一对应,“每CPU变量”是指指向某块内存的指针。
如果解压输出长度为0,则说明输出长度不够,输入内容也已经缓存到DEFLATE算法结构中,跳出解压缩状态机,继续上层处理,当上层解压出数据后,继续当前层解压缩处理。
当解压数据长度和文件头的压缩长度相等时,说明当前文件解压结束,设置状态机状态为文件魔术字查找状态magic_state。
进入magic_state,查找下一个文件头标识(0x50 0x4b 0x03 0x04),查找到则重新初始化解压缩状态机,进行下一个文件解压缩,否则设置状态机状态为文件处理结束状态finish_state。
进入finish_state,完成对整个压缩文件的处理。
本申请实施例实现基于流的ZIP压缩文件的多层解压缩,目的是在尽可能节省内存资源的情况下,解压出的原始文件并进行威胁检测,同时可有效检测ZIP压缩包炸弹。
本申请的实施例提供的压缩文件的实时多层解压缩方法,基于DEFLATE底层算法,对ZIP文件数据部分的数据段进行分段解压缩,同时结合ZIP文件解析状态机和文件识别状态机实现对分段的ZIP压缩文件的多层解压缩。
本申请的实施例提供的压缩文件的实时多层解压缩方法,能够达到的有益技术效果包括:1)实现基于流(流即网络中传输的数据流,包括多个依次传输的数据包)的实时多层解压缩,当压缩文件被分片发送到网络设备时,不进行文件内容缓存,直接对单个包进行解压缩处理,节约了存储空间;2)支持对单个数据包进行多层解压缩;3)解压缩缓冲区可以根据设备内存资源情况动态分配,多层解压缩功能不受解压缩输出缓冲区大小影响;4)通过多层解压缩实现对每一层子文件的解析,可有效识别出压缩包炸弹;5)多层解压缩时对不同层的文件进行隔离,当一层处理错误时不会影响上一层压缩文件的处理,容错性强。
需要说明的是:
术语“模块”并非意图受限于特定物理形式。取决于具体应用,模块可以实现为硬件、固件、软件和/或其组合。此外,不同的模块可以共享公共组件或甚至由相同组件实现。不同模块之间可以存在或不存在清楚的界限。
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本申请也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本申请的内容,并且上面对特定语言所做的描述是为了披露本申请的最佳实施方式。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本申请的示例性实施例的描述中,本申请的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本申请要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本申请的单独实施例。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述实施例仅表达了本申请的实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (11)
1.一种压缩文件的实时多层解压缩方法,其特征在于,包括:
接收压缩文件的数据包,实时判断所述数据包是否为ZIP文件,如果是则使用ZIP状态机进一步解压缩所述数据包,生成若干一级子文件;
依次判断每个一级子文件是否为ZIP文件,如果是则使用ZIP状态机进一步解压缩所述一级子文件,生成若干二级子文件;
重复上述判断和解压缩过程,直至所有数据包和子文件均不是ZIP文件为止。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:若所述数据包或所述子文件不是ZIP文件,则对所述数据包或所述子文件进行深度报文检测。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:将所述使用ZIP状态机进一步解压缩所得到的解压缩信息存储在预先创建的文件信息结构中;
其中,所述文件信息结构包括多个层,所述多个层用于互相隔离地存放各级子文件的解压缩信息。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
当一个所述子文件解压不出新的子文件时,清空所述文件信息结构。
5.根据权利要求1所述的方法,其特征在于,在所述实时判断每个数据包是否为ZIP文件之前,所述方法还包括:
实时判断所述数据包是否是所述压缩文件的第一个数据包;
若是,则进入所述实时判断每个数据包是否为ZIP文件的步骤;
否则,将当前接收到的数据包加入到当前对上一个数据包的解压缩的过程中一并进行处理。
6.根据权利要求1所述的方法,其特征在于,所述使用ZIP状态机进一步解压缩所述数据包的过程,包括:
进入文件头处理状态;
处于文件头处理状态时,判断所述数据包的待处理数据长度是否大于或等于ZIP头长度,若是则进入扩展区处理状态;否则等下个数据包进入所述文件头处理状态时一并处理;
处于扩展区处理状态时,根据压缩长度和解压后长度计算压缩比,当压缩比和解压后长度均超过预设阈值时,确定所述压缩文件为压缩包炸弹;
判断待处理数据是否大于或等于文件名长度与扩展区长度之和,若否则退出,若是则判断解压后长度与压缩长度是否均为0;若均为0则确定是空文件或者文件目录,否则进入数据处理状态;
处于数据处理状态时,利用DEFLATE算法处理所述数据包的数据部分;当解压数据长度与文件头的压缩长度相等时,进入文件魔术字查找状态;
处于文件魔术字查找状态时,查找下一个文件头标识,若查找到则对下一个文件进行解压缩,否则进入文件处理结束状态。
7.根据权利要求6所述的方法,其特征在于,所述利用DEFLATE算法处理所述数据包的数据部分,包括:
设置DEFLATE算法结构体参数;
当所述DEFLATE算法结构体参数中的输出缓冲区起始地址满时,记录未解压数据起始位置,暂停解压,处理解压出的数据;
处理完解压出的数据后,从所述未解压数据起始位置继续解压;
如果解压出的数据的长度为0,则停止解压缩,继续上一层文件的处理,当上一层文件解压出数据后,再继续当前层解压缩处理。
8.根据权利要求7所述的方法,其特征在于,所述DEFLATE算法结构体参数包括待解压数据起始地址、待解压数据长度、输出缓冲区起始地址和输出缓冲区长度。
9.根据权利要求8所述的方法,其特征在于,所述输出缓冲区起始地址所指向的缓冲区为每CPU变量。
10.一种电子设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序,以实现如权利要求1-9中任一所述的压缩文件的实时多层解压缩方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行,以实现如权利要求1-9中任一所述的压缩文件的实时多层解压缩方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011141972.4A CN112214462B (zh) | 2020-10-22 | 2020-10-22 | 压缩文件的多层解压缩方法、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011141972.4A CN112214462B (zh) | 2020-10-22 | 2020-10-22 | 压缩文件的多层解压缩方法、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112214462A true CN112214462A (zh) | 2021-01-12 |
CN112214462B CN112214462B (zh) | 2023-04-28 |
Family
ID=74054952
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011141972.4A Active CN112214462B (zh) | 2020-10-22 | 2020-10-22 | 压缩文件的多层解压缩方法、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112214462B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113111040A (zh) * | 2021-04-21 | 2021-07-13 | 平安普惠企业管理有限公司 | 一种文件解压方法及装置 |
CN113204526A (zh) * | 2021-05-08 | 2021-08-03 | 北京亿赛通网络安全技术有限公司 | 一种通用流文件处理框架 |
CN113553307A (zh) * | 2021-07-19 | 2021-10-26 | 北京天空卫士网络安全技术有限公司 | 一种处理文件的方法和装置 |
CN113794676A (zh) * | 2021-07-26 | 2021-12-14 | 奇安信科技集团股份有限公司 | 文件过滤方法、装置、电子设备、程序产品及存储介质 |
CN114172968A (zh) * | 2021-10-26 | 2022-03-11 | 阿里云计算有限公司 | 数据解压缩方法、装置、电子设备、介质及程序产品 |
CN115118793A (zh) * | 2022-06-14 | 2022-09-27 | 北京经纬恒润科技股份有限公司 | 一种blf文件解析容错方法、装置及计算机设备 |
CN116361786A (zh) * | 2023-05-31 | 2023-06-30 | 中国矿业大学(北京) | 一种解压炸弹的检测防御方法、系统、介质及电子设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7643505B1 (en) * | 2006-11-30 | 2010-01-05 | Qlogic, Corporation | Method and system for real time compression and decompression |
CN102334124A (zh) * | 2011-08-15 | 2012-01-25 | 华为终端有限公司 | 文件的保护方法及装置 |
US20130254197A1 (en) * | 2012-03-20 | 2013-09-26 | Yissum Research Development Company Of The Hebrew University Of Jerusalem Ltd. | Method and system for decompression-free inspection of shared dictionary compressed traffic over http |
CN108090115A (zh) * | 2017-11-03 | 2018-05-29 | 中国科学院信息工程研究所 | 一种针对Gzip压缩数据的过滤方法及系统 |
CN108229164A (zh) * | 2016-12-21 | 2018-06-29 | 武汉安天信息技术有限责任公司 | 解压炸弹的判断方法及装置 |
CN108270783A (zh) * | 2018-01-15 | 2018-07-10 | 新华三信息安全技术有限公司 | 一种数据处理方法及装置 |
US20190034091A1 (en) * | 2016-01-29 | 2019-01-31 | Zeropoint Technologies Ab | Methods, Devices and Systems for Compressing and Decompressing Data |
CN110851871A (zh) * | 2019-11-15 | 2020-02-28 | 北京明朝万达科技股份有限公司 | 一种文件解压方法、装置、电子设备及存储介质 |
-
2020
- 2020-10-22 CN CN202011141972.4A patent/CN112214462B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7643505B1 (en) * | 2006-11-30 | 2010-01-05 | Qlogic, Corporation | Method and system for real time compression and decompression |
CN102334124A (zh) * | 2011-08-15 | 2012-01-25 | 华为终端有限公司 | 文件的保护方法及装置 |
US20130254197A1 (en) * | 2012-03-20 | 2013-09-26 | Yissum Research Development Company Of The Hebrew University Of Jerusalem Ltd. | Method and system for decompression-free inspection of shared dictionary compressed traffic over http |
US20190034091A1 (en) * | 2016-01-29 | 2019-01-31 | Zeropoint Technologies Ab | Methods, Devices and Systems for Compressing and Decompressing Data |
CN108229164A (zh) * | 2016-12-21 | 2018-06-29 | 武汉安天信息技术有限责任公司 | 解压炸弹的判断方法及装置 |
CN108090115A (zh) * | 2017-11-03 | 2018-05-29 | 中国科学院信息工程研究所 | 一种针对Gzip压缩数据的过滤方法及系统 |
CN108270783A (zh) * | 2018-01-15 | 2018-07-10 | 新华三信息安全技术有限公司 | 一种数据处理方法及装置 |
CN110851871A (zh) * | 2019-11-15 | 2020-02-28 | 北京明朝万达科技股份有限公司 | 一种文件解压方法、装置、电子设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
MUNOZ, I ET AL.: "Zip your data - Using the Zip classes in the J# class libraries to compress files and data with C#", MSDN MAGAZINE * |
朱爱兵: "Linux+Apache+Php环境下实现Zip、Rar文件解压缩", 电脑知识与技术 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113111040A (zh) * | 2021-04-21 | 2021-07-13 | 平安普惠企业管理有限公司 | 一种文件解压方法及装置 |
CN113111040B (zh) * | 2021-04-21 | 2024-04-30 | 郑旭纯 | 一种文件解压方法及装置 |
CN113204526A (zh) * | 2021-05-08 | 2021-08-03 | 北京亿赛通网络安全技术有限公司 | 一种通用流文件处理框架 |
CN113204526B (zh) * | 2021-05-08 | 2024-03-12 | 北京亿赛通网络安全技术有限公司 | 一种通用流文件处理框架 |
CN113553307A (zh) * | 2021-07-19 | 2021-10-26 | 北京天空卫士网络安全技术有限公司 | 一种处理文件的方法和装置 |
CN113553307B (zh) * | 2021-07-19 | 2024-09-27 | 北京天空卫士网络安全技术有限公司 | 一种处理文件的方法和装置 |
CN113794676A (zh) * | 2021-07-26 | 2021-12-14 | 奇安信科技集团股份有限公司 | 文件过滤方法、装置、电子设备、程序产品及存储介质 |
CN114172968A (zh) * | 2021-10-26 | 2022-03-11 | 阿里云计算有限公司 | 数据解压缩方法、装置、电子设备、介质及程序产品 |
CN115118793A (zh) * | 2022-06-14 | 2022-09-27 | 北京经纬恒润科技股份有限公司 | 一种blf文件解析容错方法、装置及计算机设备 |
CN115118793B (zh) * | 2022-06-14 | 2023-07-07 | 北京经纬恒润科技股份有限公司 | 一种blf文件解析容错方法、装置及计算机设备 |
CN116361786A (zh) * | 2023-05-31 | 2023-06-30 | 中国矿业大学(北京) | 一种解压炸弹的检测防御方法、系统、介质及电子设备 |
CN116361786B (zh) * | 2023-05-31 | 2023-08-15 | 中国矿业大学(北京) | 一种解压炸弹的检测防御方法、系统、介质及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112214462B (zh) | 2023-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112214462B (zh) | 压缩文件的多层解压缩方法、电子设备及存储介质 | |
US5659737A (en) | Methods and apparatus for data compression that preserves order by using failure greater than and failure less than tokens | |
US6597812B1 (en) | System and method for lossless data compression and decompression | |
US7188227B2 (en) | Adaptive memory compression | |
US10812630B2 (en) | Merging techniques in data compression accelerator of a data processing unit | |
US8279096B2 (en) | Parallel compression for dictionary-based sequential coders | |
US8698657B2 (en) | Methods and systems for compressing and decompressing data | |
JP2713369B2 (ja) | データ圧縮装置及び方法 | |
US20180167481A1 (en) | Compressibility estimation for lossless data compression | |
US20240134523A1 (en) | Data compression method and apparatus, computing device, and storage system | |
EP2034738B1 (en) | Data compression apparatus and method | |
US10244250B2 (en) | Variable-rate texture compression using fixed-rate codes | |
CN109075798B (zh) | 可变大小符号基于熵的数据压缩 | |
JP2008065834A (ja) | フュージョンメモリ装置及び方法 | |
KR20120134916A (ko) | 저장 장치 및 저장 장치를 위한 데이터 처리 장치 | |
US8593308B1 (en) | Method of accelerating dynamic Huffman decompaction within the inflate algorithm | |
US20190052553A1 (en) | Architectures and methods for deep packet inspection using alphabet and bitmap-based compression | |
CN108287877B (zh) | 一种rib渲染压缩文件fpga压缩/解压缩系统及硬件解压方法 | |
US20140289208A1 (en) | Data compression apparatus, data compression method, data decompression apparatus, and data decompression method | |
CN116015311A (zh) | 基于滑动字典实现的Lz4文本压缩方法 | |
US9106252B2 (en) | Selective recompression of a string compressed by a plurality of diverse lossless compression techniques | |
US11301238B2 (en) | Firmware updating method and firmware updating system | |
CN114125071A (zh) | 数据压缩传输方法及装置 | |
US11562241B2 (en) | Data output method, data acquisition method, device, and electronic apparatus | |
JPH10329371A (ja) | プリンタメモリブースト |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |