稳定版本: v2.2.0 · 下载完整 ZIP 包 · 更新日志
ZipCracker 是 Hx0 战队开发的一款面向 ZIP 压缩包的综合破解与恢复工具,非常适用于新手拿来解决 CTF 常见 ZIP 题型,也适用于经授权的安全测试和自有加密备份恢复场景。它将伪加密识别与修复、字典爆破、掩码猜解、短明文 CRC32 枚举、已知明文攻击、套娃 ZIP 逐层恢复等常见手段整合为一条完整流程,支持超大字典快速加载、多线程高并发调度,并在命中后自动解压,帮助用户更高效地完成 ZIP 分析与恢复。
v2.2.0 更新: 新增 -r 套娃解压;完整提取成功后才清理中间包;输出同名旧文件先备份;修复 Windows 中文输出、内置字典查找和 CRC32 恢复结果判断等问题。原有命令继续可用。
ZipCracker上手简单,简单的说主要能力包括:
- 伪加密识别与修复
- 常规字典爆破
- 自定义字典或字典目录
- 掩码爆破
- 短明文 CRC32 枚举恢复
- 已知明文攻击(
-kpa) - 套娃解压(
-r,递归处理嵌套压缩包) - 破解成功后自动解压
如果你只是第一次使用,这份 README 看下面 3 个部分就够了:
首次使用最常见的命令:
# 1. 伪加密识别与修复
python3 ZipCracker.py test01.zip
# 2. 默认字典爆破
python3 ZipCracker.py test02.zip
# 3. 已知明文攻击
python3 ZipCracker.py test05.zip -kpa test05_plain.txt
# 4. 套娃解压(递归处理嵌套压缩包)
python3 ZipCracker.py outer.zip -r
# 5. 超大字典推荐写法
ZIPCRACKER_SKIP_DICT_COUNT=1 python3 ZipCracker.py target.zip huge_dict.txt下载并解压完整 ZIP 包后,在其中的 ZipCracker-v2.2.0 目录运行。outer.zip、target.zip 和 huge_dict.txt 为示例路径,请替换成自己的文件;test01.zip~test06.zip 是随包提供的样例,其中 test06.zip 是套娃解压样例(见套娃解压)。
| 项目 | 说明 |
|---|---|
| Python | 最低 Python 3.7,推荐 Python 3.10+ |
| 操作系统 | Linux / macOS / Windows |
| 必需依赖 | Python 标准库 |
| 可选依赖 | pyzipper,用于 AES ZIP |
| 可选依赖 | bkcrack,用于更快的已知明文恢复 |
如果第一次运行就报:
TypeError: 'type' object is not subscriptable
通常表示你的 Python 太旧。先看版本:
python --version建议直接升级到 Python 3.10+。
pyzipper 用于处理 AES ZIP。
脚本行为:
- 如果已安装,会自动启用 AES 支持
- 如果未安装,脚本会提示你是否安装
- 输入
n可以跳过 - 中文模式下一键安装会优先使用清华源,失败后自动回退官方源
手动安装:
python3 -m pip install pyzipper -i https://pypi.tuna.tsinghua.edu.cn/simple如果目标 ZIP 使用 AES,脚本会额外提醒你两件事:
- AES 本来就比传统 ZipCrypto 更慢
- 如果跳过安装,传统 ZipCrypto 仍可处理;真正的 AES 加密包会保留原包并停止无效尝试,安装后可重新运行
bkcrack 主要用于 -kpa 已知明文攻击时的无字典恢复。
脚本行为:
- 如果检测到
bkcrack,会优先尝试更快的恢复方式 - 如果未检测到,会按系统给出安装方式
- 输入
n可以跳过,脚本会继续走字典或掩码流程 - 如果你用了
--bkcrack,那就必须安装,否则会直接退出
Windows 下如果提示运行库问题,程序会直接打印:
- Microsoft 官方说明页
Latest supported VC++ Redistributable - 对应架构的直链下载地址
python3 ZipCracker.py test01.zip
python3 ZipCracker.py test02.zip默认会依次尝试:
password_list.txt- 1 到 6 位纯数字密码
字典优先使用当前工作目录中的 password_list.txt;没有时使用脚本旁随包提供的内置字典,因此从其他目录启动也可正常找到它。显式指定字典文件或字典目录时,按你指定的路径处理。
如果你只是直接运行:
python3 ZipCracker.py your.zip而前面的常规路径都失败了,程序还会额外检查压缩包里是否存在更像 png / zip / exe / pcapng 模板明文攻击的条目。
如果检测到这类候选,并且模板置信度足够高,程序会询问你是否自动切到模板 KPA 模式继续尝试。
如:
python3 ZipCracker.py test06_image.zip
单个字典文件:
python3 ZipCracker.py test02.zip YourDict.txt
字典目录:
python3 ZipCracker.py test02.zip YourDictDirectory
对 ZIP 中长度为 1~6 字节的条目,可按归档记录的 CRC32 对可打印字符内容进行原像枚举;交互终端会先询问是否执行。仅在找到匹配候选时计为恢复成功;全部文件条目恢复成功后,结果会写入输出目录。CRC32 匹配可能存在碰撞,候选内容不一定是唯一原文。
python3 ZipCracker.py test03.zip
python3 ZipCracker.py test04.zip -m '?uali?s?d?d?d'掩码占位符:
| 占位符 | 含义 |
|---|---|
?d |
数字 0-9 |
?l |
小写字母 a-z |
?u |
大写字母 A-Z |
?s |
特殊字符 |
?? |
问号 ? 本身 |
自动优先尝试 bkcrack,失败后继续字典/掩码:
python3 ZipCracker.py test05.zip -kpa test05_plain.txt
如果你手里拿到的是“无密码的对照 ZIP”,也可以直接这样:
python3 ZipCracker.py C.zip -kpa M.zip
说明:
-kpa后面既可以是普通明文文件,也可以是无密码 ZIP- 如果传入的是 ZIP,程序会优先寻找与目标条目同名的文件
- 如果传入的是普通文件,程序也会优先按同名文件自动匹配 ZIP 内条目
- 如果明文 ZIP 里只有一个普通文件,也会自动使用它
重要说明:
- ZIP 的已知明文攻击中,“明文”指 ZipCrypto 加密前的数据流,不一定是解压后的原始文件。
- 如果目标条目是
ZIP_STORED,原始文件通常可以直接作为-kpa输入。 - 如果目标条目是
ZIP_DEFLATED/ZIP_BZIP2/ZIP_LZMA,被加密的通常是压缩后的数据流,直接传入未压缩原文件可能会出现ciphertext is smaller than plaintext。 --kpa-offset只能表示已知字节在加密前数据流里的起始偏移,不能把未压缩原文件自动对应到压缩后数据。- 更完整的双语说明见
docs/KPA_KNOWN_PLAINTEXT_NOTE.md。
指定 ZIP 内条目:
python3 ZipCracker.py test05.zip -kpa test05_plain.txt -c test05_plain.txt如果你手里只有“部分明文”,可以加偏移和附加字节:
python3 ZipCracker.py secret.zip -kpa part.bin --kpa-offset 78 -x 0 4d5a说明:
--kpa-offset表示这段明文在目标文件里的起始偏移-x表示额外已知字节,写法是-x 偏移 十六进制-x可以重复写多次- 也支持简写成
-x 0:4d5a
如果你只有常见文件头,可以直接用模板:
python3 ZipCracker.py target.zip --kpa-template png -c image.png
python3 ZipCracker.py target.zip --kpa-template exe -c app.exe
python3 ZipCracker.py target.zip --kpa-template pcapng -c capture.pcapng
python3 ZipCracker.py target.zip --kpa-template zip -c inside.zip可用模板:
pngzipexepcapng
只允许走 bkcrack:
python3 ZipCracker.py test05.zip -kpa test05_plain.txt --bkcrack区别很简单:
-kpa:bkcrack失败后还能继续其他方法-kpa --bkcrack:只跑bkcrack,失败就结束
python3 ZipCracker.py test02.zip -o output_dir默认输出目录为 unzipped_files。所有解压流程都会先将内容完整提取到临时目录并验证,再交付到指定输出路径。目录里无关的文件会保留;同名旧文件先备份到输出目录旁的 目录名_backup_随机串,然后更新结果。输入 ZIP 位于输出目录内时,结果使用独立的 包名_extracted 子目录,保护输入包。路径越界和符号链接条目会被拒绝。
有的题目是压缩包套压缩包,一层套一层动辄上百层。加上 -r / --recursive 后,ZipCracker 会在当前压缩包完整解压成功后,只扫描本次产生的嵌套 ZIP,并复用字典/掩码设置逐层处理:
python3 ZipCracker.py outer.zip -r行为说明:
- 未加密的层会直接解压并继续向下扫描
- 每一层解压到输出目录下独立的
nested_序号_包名目录,避免同名覆盖,也避免上千层链路在 Windows 上触发超长路径问题 - 只有完整解压成功的中间压缩包才会自动删除;最外层输入包始终保留。想保留所有中间包请加
--keep-nested-zips - 深度、包数量、累计解压字节数均有上限,达到限制时保留未处理包;内层未完成时退出码为
1,全部完成为0 - 嵌套层不重复询问 CRC32 枚举或安装依赖;最外层仍保留交互流程。KPA 明文/模板参数仅作用于最外层,内层复用字典/掩码
- 损坏包、部分条目解压失败或密码不一致的包会保留,并在结束时统一列出
随包提供的 test06.zip 就是一个五层套娃样例,各层分别走内置字典(最外层、第 2 层)、伪加密修复(第 1 层)、1-6 位纯数字字典(第 3 层)和直接解压(第 4 层)四条不同路径,可用来验证整条递归流程:
python3 ZipCracker.py test06.zip -r
可选参数:
| 参数 | 说明 |
|---|---|
-r, --recursive |
启用套娃解压 |
--max-depth N |
最大内层深度,默认 2048;最外层为深度 0 |
--max-archives N |
包数量上限,包含最外层,默认 4096 |
--max-total-size SIZE |
累计解压上限,默认 1GiB;支持字节数、KiB、MiB、GiB |
--keep-nested-zips |
保留已处理成功的中间压缩包 |
例如,处理更大的多层归档:
python3 ZipCracker.py outer.zip my_dict.txt -r --max-total-size 8GiB --max-archives 10000累计解压量包含各层产生的中间 ZIP,以及失败尝试已写入的字节;删除中间包不会返还预算。上述资源限制仅作用于套娃模式,原有单包用法不受该默认上限影响。
输出目录与备份规则见指定输出目录。
在脚本、流水线或输入被重定向时,程序会跳过 CRC32 枚举和手动安装询问,继续可用的恢复流程;是否自动安装依赖也可通过文末的环境变量配置。超过 1000 亿组合的掩码需要在交互终端确认,非交互环境会停止并提示缩小范围。
0:所请求的处理成功;套娃模式下所有发现的内层包均处理完成1:处理失败,或套娃模式仍有未恢复、损坏或因资源限制而跳过的包130:用户中断操作
当前版本:2.2.0。变化见 CHANGELOG.md。旧命令、两种语言入口及可选依赖方式保持兼容。
python3 -m unittest discover -s tests -v测试仅生成临时样例。安装 pyzipper、Info-ZIP 的 zip 和 bkcrack 后可运行对应集成测试;未安装时仅跳过对应项目。
ZipCracker 可以处理很大的字典,不会一次性把整份字典读进内存。
如果字典很大,比如 10GB+,推荐直接跳过预统计:
ZIPCRACKER_SKIP_DICT_COUNT=1 python3 ZipCracker.py your.zip your_big_dict.txtWindows PowerShell 写法(对当前 PowerShell 会话生效):
$env:ZIPCRACKER_SKIP_DICT_COUNT = "1"
python ZipCracker.py your.zip your_big_dict.txt
这样做的好处:
- 启动更快
- 内存更稳
- 进度条会改成“流式进度”,按文件读取量显示
这是正常现象。
AES 的密码校验和解压本来就通常比传统 ZipCrypto 慢很多。
如果脚本检测到 AES,它会主动提示你“这会更慢”。
如果 ZIP 里有 AES 条目,而当前没装 pyzipper:
- 脚本会先提示你安装
- 你也可以输入
n跳过 - 如果确认是真正的 AES 加密,程序会保留原包、返回失败状态并停止无效遍历;安装依赖后重新运行即可
最稳妥的做法还是先安装:
python3 -m pip install pyzipper -i https://pypi.tuna.tsinghua.edu.cn/simple这通常不是单纯“GitHub 访问不了”,而是当前 Python 的 HTTPS 证书校验失败。
脚本现在会自动尝试:
- Python 默认下载
- Windows 下回退到
curl.exe - 再不行回退到 PowerShell
如果还失败,优先检查:
- 系统时间是否准确
- 是否有代理、网关、杀软拦截 HTTPS
- 浏览器是否能正常打开 GitHub release 页面
这个值换成十六进制是:
0xC0000005
表示 Windows Access Violation,也就是 bkcrack.exe 自己崩了。
这通常不是密码错误。建议优先尝试:
set BKCRACK_JOBS=1
python ZipCracker.py test05.zip -kpa test05_plain.txt同时也建议:
- 安装或修复 Microsoft Visual C++ Redistributable
- 临时关闭杀软或给
bkcrack.exe加白名单 - 如果仍崩溃,优先在 WSL / Linux 下使用
bkcrack
通常不是后台僵尸进程没退出,而是脚本还在继续尝试反推出原始 ZIP 密码。
如果你只关心解压结果,可以跳过:
ZIPCRACKER_SKIP_ORIG_PW_RECOVERY=1 python3 ZipCracker.py test05.zip -kpa test05_plain.txt默认模式下脚本会先统计总密码数。
如果你更在意启动速度,用这条:
ZIPCRACKER_SKIP_DICT_COUNT=1 python3 ZipCracker.py your.zip your_big_dict.txt一般用户最常用的是下面这几个:
| 变量名 | 作用 |
|---|---|
ZIPCRACKER_SKIP_DICT_COUNT=1 |
跳过超大字典预统计 |
ZIPCRACKER_SKIP_ORIG_PW_RECOVERY=1 |
KPA 解压后不再继续反推原始 ZIP 密码 |
ZIPCRACKER_AUTO_INSTALL_PYZIPPER=0 |
自动跳过 pyzipper 安装提示 |
ZIPCRACKER_AUTO_INSTALL_BKCRACK=0 |
自动跳过 bkcrack 安装提示 |
BKCRACK_JOBS=1 |
降低 bkcrack 线程数,适合 Windows 排障 |
感谢 @LANDY 对本项目的支持与建议。
ZipCracker 已上线 ClawHub 技能中心。在 OpenClaw 中可通过自然语言无缝调用本工具,自动拼接并执行解密 / 破解流程,让 CTF 与安全自查更高效。
技能主页: https://clawhub.ai/asaotomo/zipcracker
安装: 请先完成 ClawHub 客户端的安装与配置,然后在终端执行:
clawhub install zipcracker安装完成后,可直接对 AI 助手说例如:「帮我用 ZipCracker 破解这个压缩包,尝试一下掩码攻击,格式是四个数字」,由助手代为构建并执行对应命令。
请仅在合法授权的场景下使用本工具,例如:
- CTF / 靶场
- 自有数据恢复
- 经授权的安全测试
【打赏支持❤️】代码传情跨山海,点滴支持皆温暖✨
虽然代码完全开源,但每杯咖啡都能让我们走得更远 ☕️
【战队公众号】扫描关注战队公众号,获取最新动态
【战队知识星球】福利大放送
