news 2026/8/19 14:59:48

ZIP密码破解实操指南:三步用 bkcrack 找回遗忘的密码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ZIP密码破解实操指南:三步用 bkcrack 找回遗忘的密码

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.svgStore(未压缩)存储——这简直是为你量身定做的攻击靶子。

第二步:准备已知明文

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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 14:49:51

AI Agent协作界面设计:从黑盒到透明可控的终端式交互

1. 从“黑盒子”到“透明伙伴”&#xff1a;为什么我们需要重新思考人机协作界面 最近几年&#xff0c;AI Agent&#xff08;智能体&#xff09;的概念火得一塌糊涂&#xff0c;从能帮你写代码的GitHub Copilot&#xff0c;到能自主完成复杂任务的AutoGPT&#xff0c;再到各种宣…

作者头像 李华
网站建设 2026/8/19 14:49:00

FreeRTOS信号量原理深度解析:从队列实现到实战应用

1. 从“抢厕所”到“信号灯”&#xff1a;信号量在FreeRTOS中的本质 如果你刚开始接触FreeRTOS&#xff0c;学完了任务创建、调度和队列&#xff0c;感觉一切尽在掌握&#xff0c;那么“信号量”这个概念可能会让你第一次感受到一丝抽象和困惑。它不像队列那样直观地传递数据&a…

作者头像 李华
网站建设 2026/8/19 14:48:55

隐私优先的生理期追踪应用开发:Flutter本地化架构与预测算法实践

1. 项目缘起&#xff1a;为什么我们需要一个更“懂你”的生理期追踪工具&#xff1f;在数字健康领域&#xff0c;生理期追踪应用早已不是什么新鲜事物。市面上从功能简单的日历记录&#xff0c;到集成了AI预测、社区交流、健康咨询的“全家桶”式应用&#xff0c;选择多到让人眼…

作者头像 李华