misc-压缩包分析

根据压缩包文件的内容和结构存在着多种破解方式,如暴力破解,字典攻击与明文攻击等方法
前言
这里会提供一些来自buuctf的案例,但这章比较简单,题目就自行前往靶场去试试吧,就不再写WP了
工具介绍
提供的工具若未破解或链接已挂,请自行搜索破解版使用
010Editor 16进制编辑器
ARCHPR 多种压缩格式密码爆破
Ziperello ZIP格式的密码爆破
CRC32-Tools CRC32碰撞脚本工具
常见压缩包格式
ZIP文件格式与RAR文件格式,是比较常见的压缩包格式
ZIP文件格式
ZIP文件一般包含:压缩源文件数据区、压缩源文件目录区、压缩源文件目录结束标志。
需要记住的压缩源文件数据区的文件字节和压缩源文件目录区的文件字节如下
压缩源文件数据区含义及其字节
含义 | 字节数 |
---|---|
文件头标记 | 4bytes(504b0304) |
解压文件所需版本 | 2bytes |
通用位标记 | 2bytes |
压缩方式 | 2bytes |
最后修改文件时间 | 2bytes |
最后修改文件日期 | 2bytes |
CRC-32 | 4bytes |
压缩源文件目录区含义及其字节
含义 | 字节数 |
---|---|
文件头标记 | 4bytes(504b0102) |
压缩使用的版本 | 2bytes |
解压文件所需版本 | 2bytes |
通用位标记 | 2bytes |
压缩方式 | 2bytes |
最后修改文件时间 | 2bytes |
最后修改文件日期 | 2bytes |
CRC-32 | 4bytes |
区别:
RAR可以兼容ZIP,能够压缩或解压缩ZIP文件,但是ZIP无法完成对RAR文件的解压缩,且RAR当压缩包破损但恢复记录足够多时,可以对损坏的压缩包进行恢复
常见压缩包破解方法
伪加密破解
一般指ZIP伪加密
加密手段分为:未加密、真加密和伪加密
未加密,即压缩源文件数据区的通用位标记为0000
,压缩源文件目录区的通用位标记也为0000
伪加密,即压缩源文件数据区的通用位标记为任意值,压缩源文件目录区的通用位标记为0900
或0100
这种奇数
真加密,即压缩源文件数据区的通用位标记为0900
,压缩源文件目录区的通用位标记也为0900
判断是否为伪加密,将压缩源文件目录区的通用位标记改为偶数即可,改完后能够解压文件并不需要密码就是伪加密。
或者将压缩包放在linux系统,伪加密是可以直接打开的。
暴力破解
通过枚举的方式将所有可能的情况都进行一遍尝试
工具内容较多,这里只演示其中一小部分
范围中可以指定每位的具体字符是什么
长度中可以指定口令长度
也可以指定自己的字典
以及后面会遇到的明文恢复
下面是一个恢复成功的例子
字典破解
若题目中给我了一些对密码的提示,可以用自己建立的字典进行破解
这里用是superdic 生成字典
假设场景:密码长度为7,且前3位为abc(先生成再修改)
选择每一位需要的字符
选择每一个密码前插入字符串
选择保存路径和密码长度
这里应该选择4位,因为我们生成了4位,然后在这些的前面加上abc,而不是直接生成了abc一起的7位
开始生成字典,会弹出生成的字典大小(太大不建议直接生成)
然后用该字典破解压缩包
掩码破解
知道了密码的其中几位,可以构造将某几位写上,其他几位以掩码的形式生成字典并进行破解
明文攻击
若能得到压缩包中的一个被加密的文件,通过相同的压缩方式将压缩后的与有密码的压缩文件进行对比,找出两个文件的不同点,就能得到我们的key了。
或一直某单一文件的至少12字节的内容也可以进行明文攻击。
明文对应文件的加密算法必须是ZipCrypto Store或者是ZipCrypto Deflate算法
这里没有具体题目案例,我套用的网图作演示
拿到加密秘钥就可以破解了
CRC32碰撞
CRC32,即循环冗余检验,每一个CRC32都对应不同的内容,若是知道CRC32就可以反推枚举文件内容了,但如果文件内容过大,这种方法就失效了
可以使用开源小工具CRC32-Tools (目前基本只支持1-4Bytes的文件)
1 | python CRC32-Tools.py -4 atta.zip |
也可以自己编写小脚本
1 | import binascii |
- Title: misc-压缩包分析
- Author: ZJ
- Created at : 2024-09-23 00:00:00
- Updated at : 2025-01-17 14:17:41
- Link: https://blog.overlordzj.cn/2024/09/23/ctf/data/misc/压缩包分析/
- License: This work is licensed under CC BY-NC-SA 4.0.