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对照,以此达到暴力猜解的目的。但通常只适用于较小文本文件。
Comments NOTHING