ZIP密码破解实操指南:三步用 bkcrack 找回遗忘的密码
【免费下载链接】bkcrackCrack legacy zip encryption with Biham and Kocher's known plaintext attack.项目地址: https://gitcode.com/gh_mirrors/bk/bkcrack
你是否也有过这样的瞬间——翻出一个尘封多年的压缩包,里面装着当年的毕业设计、老照片或是离职交接的工作资料,输入密码时却怎么都对不上?面对打不开的 ZIP 文件,多数人的第一反应是放弃,或者花钱找"专业恢复"。而今天要介绍的bkcrack,正是为ZIP密码破解而生的开源命令行工具:它基于 Biham 与 Kocher 提出的已知明文攻击算法,专攻传统 ZipCrypto 加密,能高效恢复加密文件的访问权限。更妙的是,你甚至不需要知道原密码,只要对文件内容略知一二,就能"破门而入"。
忘密码的一瞬间,先别急着删文件
先讲个真实得不能再真实的场景:深夜加班,你急需打开一个月前压缩存档的合同扫描件,密码却像蒸发了一样。试了十几次组合,窗口弹出"密码错误",那一刻你连砸键盘的心都有。
别慌。bkcrack 就是为这种时刻准备的。它是一款免费开源、单文件即可运行的命令行程序,核心能力可以浓缩成三句话:
| 能力 | 说明 |
|---|---|
| 恢复内部密钥 | 给出密文和至少 12 字节已知明文,反推出加密状态 |
| 移除或修改密码 | 拿到密钥后,直接生成无密码或新密码的新压缩包 |
| 反推原密码 | 基于密钥暴力枚举,找回你忘记的那个原始口令 |
注意它的目标范围:只针对 ZIP 加密家族中的ZipCrypto(也叫传统 PKWARE 加密、旧式加密),这是 WinZip、7-Zip 等软件里最经典的加密方式,至今仍有海量压缩包在用。如果你的文件是 AES 加密的,那不在它的射程之内——这一点我们后面细说。
一句话总结:它不靠猜密码,而是靠"已知内容"抄近路。这感觉就像你忘了保险箱密码,但碰巧知道箱子里第一份文件的抬头写了什么,于是顺着这条线索撬开了整个保险箱。
三分钟安装教程:把 bkcrack 跑起来
既然工具这么能打,第一步当然是把它装到你的电脑上。安装方式有两种,任选其一。
方式一:直接用预编译版本(最快)
到项目的发布页面下载对应你操作系统(Windows / macOS / Ubuntu)的压缩包,解压后即可运行。Windows 用户如果提示缺少运行库,装一下微软的 Visual C++ 运行库就行。
方式二:从源码编译(最灵活)
先克隆仓库:
git clone https://gitcode.com/gh_mirrors/bk/bkcrack cd bkcrack然后执行三条 CMake 命令,编译产物会装进install目录:
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=install cmake --build build --config Release cmake --build build --config Release --target install装好后,运行bkcrack -h能看到帮助信息,说明一切就绪。整个过程比装一个普通软件还快,全程不需要管理员权限,也不依赖第三方库,清爽得很。
实战演示:破解官方示例 ZIP 全流程
光说不练假把式。项目仓库的example文件夹里自带一个加密示例secrets.zip,里面装着两张"秘密"文件,正好拿来完整走一遍破解流程。跟着敲,十分钟内你就能体验到"原来这么简单"的快乐。
第一步:查看压缩包结构
bkcrack -L example/secrets.zip输出如下:
Index Encryption Compression CRC32 Uncompressed Packed size Name ----- ---------- ----------- -------- ------------ ------------ ---------------- 0 ZipCrypto Deflate 7ca9f10a 54799 54700 advice.jpg 1 ZipCrypto Store a99f1d0d 1265 1277 spiral.svg两个文件都用了 ZipCrypto 加密,其中spiral.svg是Store(未压缩)存储——这简直是为你量身定做的攻击靶子。
第二步:准备已知明文
SVG 图像文件有个固定套路:开头必然是<?xml version="1.0"。这就是你的"已知明文",共 20 字节,远超 12 字节的最低要求。把它写进一个文件(-n防止 echo 追加换行符):
echo -n '<?xml version="1.0" ' > plain.txt第三步:发起攻击
bkcrack -C example/secrets.zip -c spiral.svg -p plain.txt稍等片刻,屏幕会刷出进度,然后弹出三组十六进制数:
Keys: c4490e28 b414a23d 91404b31这三组数就是加密内部状态,相当于保险箱的"万能钥匙"。拿到它,后面就全是收获环节了。
第四步:解锁文件(三种姿势任选)
生成一个去掉密码的新压缩包:
bkcrack -C example/secrets.zip -k c4490e28 b414a23d 91404b31 -D secrets_unlocked.zip或者改成你自己记得住的新密码:
bkcrack -C example/secrets.zip -k c4490e28 b414a23d 91404b31 -U secrets_new.zip easy还可以逐文件解密。advice.jpg是 Deflate 压缩的,解密后还需用项目自带的脚本解压:
bkcrack -C example/secrets.zip -c advice.jpg -k c4490e28 b414a23d 91404b31 -d advice.deflate python3 tools/inflate.py < advice.deflate > advice.jpg第五步(彩蛋):找回原密码
好奇自己当年到底设了什么密码?给定字符集和长度上限,bkcrack 能从密钥反推原始口令:
bkcrack -k c4490e28 b414a23d 91404b31 --bruteforce ?a --length 12示例文件的密码最终被还原为W4sF0rgotten——是不是很有"致敬"意味?整个过程行云流水,你甚至没碰过任何暴力猜密码的按钮。
原理篇:已知明文攻击为何如此神奇
看到这里你多半会好奇:凭什么 20 个字节就能撬开整个压缩包?这得从 ZipCrypto 的加密机制说起。
传统 ZIP 加密本质是"异或":用一个由密码生成的伪随机字节流(叫密钥流)逐字节和文件内容(叫明文)做异或运算,得到加密数据(叫密文)。而密钥流的生成器状态,只有三个 32 位整数。
问题就出在这。1994 年,密码学家 Biham 和 Kocher 发表论文指出:只要同时拿到一段密文和对应的明文,就可以反向推导出密钥流生成器的内部状态,进而解密全部数据。这就是"已知明文攻击"——你不需要知道密码,只需要"对账"一段已知内容。bkcrack 正是这篇论文的开源实现。
实操中有几个要点值得记住:
- 明文越多越快:至少 12 字节,其中 8 字节必须连续;已知明文越长,攻击耗时越短。
- 检查字节是免费赠品:ZIP 规范规定每个加密条目前有 12 字节加密头,其最后一个字节可由文件元数据推算出,bkcrack 从压缩包加载密文时会自动把它算进已知明文。
- 未压缩文件是首选:Store 文件的内容和密文一一对应,明文直接就是原文件本身;而 Deflate 压缩文件的明文是"压缩后的字节",你得先猜出压缩结果才能对账,难度陡增。
所以实战的第一原则永远是:挑压缩包里那个 Store 存储的文件下手。这就好比破门时专挑没上锁的窗户。
常见问题:新手最容易踩的五个坑
Q1:bkcrack 能破解所有 ZIP 加密吗?不能。它只针对传统 ZipCrypto(PKWARE 流密码)。WinZip、7-Zip 提供的 AES 加密(AES-128/256)不在攻击范围内,遇到 AES 加密请换思路。
Q2:至少需要多少已知明文?理论下限是 12 字节,其中 8 字节必须连续。如果你只确定 8~11 字节的连续内容,但零散知道其他位置的几个字节,可以用-x参数补充稀疏明文,凑足 12 字节总量。
Q3:我完全不知道文件内容怎么办?从文件类型猜。SVG/XML 开头是<?xml,PNG 有固定文件头,JPEG 以FFD8FF开头……这些"签名"都是现成的已知明文。另一个思路是找同源文件:比如压缩包里有个常见的.dll,去网上找到原版,再模拟它的压缩方式生成明文。
Q4:破解成功后就一定要知道原密码吗?完全不需要。拿到三组密钥后,你可以直接移除密码、改成新密码,或逐文件解密。原密码只是一个可选的"战利品",不是解锁的前提。
Q5:明文位置不在文件开头怎么办?用-o指定偏移量即可。如果明文包含加密头的一部分,偏移量还可以是负数。bkcrack 对这类情况支持得很周到。
进阶技巧与合规使用提醒
熟练之后,你可以玩得更花。比如:用密钥把压缩包改个新密码,解压编辑内容后再用--change-keys恢复原来的加密状态,实现"不知道密码也能改包内文件";或者把攻击逻辑写进脚本,批量检测公司内部文档的加密强度——这正是安全审计的常见姿势。
最后必须认真说几句。技术本身是中性的,但使用必须守住边界:
- 只对自己拥有所有权或已获明确授权的文件进行破解;
- 不要用 bkcrack 去破解他人资料、商业机密或任何你没有权限访问的数据;
- 在企业环境中使用前,先确认符合公司安全政策与当地数据保护法规。
说到底,bkcrack 最大的价值,是帮你在"忘了密码"这种狼狈时刻保住数据,而不是成为入侵他人隐私的工具。下一次再面对打不开的 ZIP 文件,先深呼吸,然后打开终端,用已知明文攻击和它好好"聊聊"。祝你成功解锁,找回属于你的那份记忆。
想深入了解?这里有几份值得收藏的文档:
- 官方文档:doc/index.md
- 实战教程(含本示例完整输出):example/tutorial.md
- 限制与不支持功能说明:doc/limitations.md
- 相关论文与扩展资源:doc/resources.md
【免费下载链接】bkcrackCrack legacy zip encryption with Biham and Kocher's known plaintext attack.项目地址: https://gitcode.com/gh_mirrors/bk/bkcrack
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考