Skip to content

Misc 城邦:压缩术

题考查压缩包暴力破解、伪加密、明文攻击等压缩包相关知识点。

本题为压缩包隐写常见考点,在写这题之前,可以查阅关于压缩包与隐写的相关知识点。

我们先读题目描述,题目描述中说 请挑战者们通过6位密码门开始挑战吧!(要想使用压缩术,请先念咒语"abcd...xyz0123...789"),可以得知第一关是密码暴力破解,且是只由数字和小写字母组成的 6 位密码。

我们可以使用相关工具,如 ARCHPRPassware kit 等,也可以自己写脚本。

这里我使用的是 ARCHPR,选择密码暴力范围。

压缩包文件结构

点击开始,我们就得到了第一关压缩包加密的密码:ns2025

压缩包加密标志位

解压后得到 tips.txtbkcrack.zip (这里框住,后面要考)

tips.txt 中提到(下一扇门明明没有密码,为什么还是要输入密码呢?)我们可以得知第二关为伪加密。

在此之前,我们可以了解一下 zip 文件的文件结构。

ZIP 文件头 (Local file header)

字段名称长度(byte)说明
Local file header signature4文件头标识,固定值 50 4B 03 04
Version needed to extract2解压文件所需的 ZIP 最低版本
General purpose bit flag2通用位标志,通常只需要考虑当 bit 0 为 1 时表示文件被加密
Compression method2压缩方式,当值为 0x0000 时表示无压缩
Last mod file time2文件最后修改时间,以 standard MS-DOS 格式编码
Last mod file date2文件最后修改日期
CRC-324未压缩数据的 CRC32
Compressed size4压缩后的大小,单位为 byte
Uncompressed size4未压缩的大小
File name length2文件名长度
Extra field length2扩展区域长度
File nameN文件名
Extra fieldN扩展区域

核心目录 (Central directory)

字段名称长度(byte)说明
Central directory file header signature4中心目录文件头标识,固定值 50 4B 01 02
Version made by2压缩所用的 ZIP 版本
Version needed to extract2解压文件所需的 ZIP 最低版本
General purpose bit flag2通用位标志,通常只需要考虑当 bit 0 为 1 时表示文件被加密
Compression method2压缩方式,当值为 0x0000 时表示无压缩
Last mod file time2文件最后修改时间
Last mod file date2文件最后修改日期
CRC-324未压缩数据的 CRC32
Compressed size4压缩后的大小
Uncompressed size4未压缩的大小
File name length2文件名长度
Extra field length2扩展区域长度
File comment length2文件注释长度
Disk number start2文件开始位置所在的磁盘编号
Internal file attributes2内部文件属性
External file attributes4外部文件属性
Relative offset of local header4本地文件头的相对偏移
File nameN文件名
Extra fieldN扩展区域
File commentN文件注释

按照上述的文件结构,我们可以得知在General purpose bit flag其二进制的最低位为 1,表示文件被标记为加密, 要解决伪加密问题,只需将该标志位修改为 00 00,即关闭加密标志。

修改加密标志位

09 00 改为 00 00

解压得到 key 和 flag.zip

改完后保存,这事我们就可以发现压缩包就没有显示加密了,我们继续解压缩,得到了 key.txtflag.zip

flag.zip 里面同样有 key.txt,结合之前的 bkcrack 的名字,我们不难猜出第三关是压缩包明文攻击。

为了验证是否可以进行明文攻击,我们将 key.txt 进行与 flag.zip 相同方式的压缩,可以发现他们的 CRC32 校验值一样,则可以进行明文攻击。

CRC32 校验一致

接下来我们使用 bkcrack 对 flag.zip 进行明文攻击,在此之前我们先了解一下相关参数。

参数解释:

plaintext
-C 加密压缩包
-c 提取的密文部分
-p 提取的明文部分

bkcrack 明文攻击

然后我们可以用 key 删除密码,在同一目录下生成一个具有相同内容但不加密的 flag2.zip

打开 flag2.zip

打开 flag2.zip 即可得到 FLAG。