Misc篇-压缩包加密

发布于 2024-05-13  181 次阅读


ZIP、RAR格式简介

ZIP文件一般由三部分组成,数据区(Local file header , File data, Data descriptor), 核心目录区(Central directory)以及核心目录结束区 (End of central directory)

数据区与核心目录区均为每个文件一条记录,開有固定的签名开 头,数据区的签名为504B0304,核心目录区的签名为504B0102。核 心目录结束区在每个压缩文件中有且仅有一个,签名为504B0506。如 果压缩文件缺失核心目录结束区,那么使用压缩工具打开会提示“不 可预料的压缩文件末端'

RAR是一种专有存档文件格式,用于数据压缩与归档打包。它由俄罗斯软件工程师Eugene Roshal于 1993年开发。名称RAR代表Roshal Archive。RARv5.0的格式经过了较大的改动,目前RAR<=4与 RAR5格式均较为常用。

RAR<=4的签名为526172211A0700,而RAR5的签名为526172211A070100.RAR的格式组织以 块(Bock)为单位,包含签名块、压缩文件头块、文件块与结尾块。

一、暴力破解

暴力破解 是最直接、简单的攻击方式,适合密码较为简单或是已 知密码的格式或范围时使用,相关工具有Windows的ARCHPR或者Linux 的命令行工具fcrackzip。

ARCHPR

Ziperello

fcrackzip

USAGE: fcrackzip
        [-b|--brute-force]           use brute force algorithm
        [-D|--dictionary]             use a dictionary
        [-B|--benchmark]             execute a small benchmark
        [-c|--charset characterset]   use characters from charset
        [-h|--help]                   show this message
        [--version]                   show the version of this program
        [-V|--validate]               sanity-check the algorithm
        [-v|--verbose]               be more verbose
        [-p|--init-password string]   use string as initial password/file
        [-l|--length min-max]         check password with length min to max
        [-u|--use-unzip]             use unzip to weed out wrong passwords
        [-m|--method num]             use method number "num" (see below)
        [-2|--modulo r/m]             only calculcate 1/m of the password
        file...                   the zipfiles to crack

实例

暴力破解 hello.zip ,密码为数字 + 大小写字母,长度为 1-10

fcrackzip -b -c 'aA1' -l 1-10 -u hello.zip

暴力破解 ctf.zip ,密码为纯数字,长度为 3

fcrackzip -b -c'1' -l 3 -u ctf.zip 

用 rockyou.txt 作为字典爆破 flag.zip

fcrackzip  -D -p rockyou.txt -u flag.zip

二、ZIP伪加密

在ZIP文件中,文件头和每个文件的核心目录区都有通用标记位。

核心目录区的通用标记位距离核心目录区头504B0102的偏移为8字节, 其本身占2字节,最低位表示这个文件是否被加密(见图9-2-1),将 其改为0x01后,再次打开会提示输入密码如图。但此时文件 的内容并没有真的被加密,所以被称为 伪加密 ,只要将该标志位重新 改回0,即可正常打开。

除了修改通用标志位,用之前提到的Binwalk工具的“ binwalk -e ”命令也可以无视伪加密,从压缩包中提取文件。此外,在MacOS中 也可以直接打开伪加密的ZIP压缩包。

类似地,文件头处的通用标记位距离文件头 504B0304 的偏移为6字 节,其本身占2字节,最低位表示这个文件是否被加密。但该位被改为 0x01的伪加密压缩包不能通过Binwalk或MacOS直接提取,而需要手动 修改标志位。

已知明文攻击

我们为ZIP压缩文件所设定的密码,先被转换成了3个4字节的 key,再用这3个key加密所有文件。如果我们能通过某种方式拿到压缩 包中的一个文件,然后以同样的方式压缩,此时两个压缩包中相同的 那个文件的压缩后大小会相差12字节,用ARCHPR进行对比筛选后,就 可以获得key,继而根据这个key恢复出未加密的压缩包。对于较短的密码,我们可以等待ARCHPR进行恢复,但 我们更关注压缩包的内容,所以往往会选择不去爆破密码。这种攻击 方式便是 已知明文攻击

CRC32碰撞

CRC校验实用程序库 在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。在诸多检错手段中,CRC是最著名的一种。CRC的全称是循环冗余校验。

总之每个文件都有唯一的CRC32值,即便数据中一个bit发生变化,也会导致CRC32值不同。若是知道一段数据的长度和CRC32值,便可穷举数据,与其CRC32对照,以此达到暴力猜解的目的。但通常只适用于较小文本文件。

後悔しない
最后更新于 2024-06-09