news 2026/8/19 16:43:29

忘记ZIP密码别硬猜,bkcrack破解指南:4步用已知明文找回文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
忘记ZIP密码别硬猜,bkcrack破解指南:4步用已知明文找回文件

忘记ZIP密码别硬猜,bkcrack破解指南:4步用已知明文找回文件

【免费下载链接】bkcrackCrack legacy zip encryption with Biham and Kocher's known plaintext attack.项目地址: https://gitcode.com/gh_mirrors/bk/bkcrack

压缩包设了密码,密码却被你忘得一干二净——这种懊恼,经历过的人都知道有多憋屈。如果你的压缩包恰好用的是传统ZIP加密(ZipCrypto),那么bkcrack就是那款专门破解这类加密的开源命令行工具:它利用 Biham 和 Kocher 提出的已知明文攻击,在不需要原始密码的情况下,把加密内部状态直接反推出来。这篇文章不堆代码、不讲高深数学,只带你走完一条完整可复现的破解流程,看完就能上手。

深夜,被一把看不见的锁锁住的压缩包

先讲个场景,你多半会觉得眼熟。

你从旧硬盘里翻出一个五年前打包的工作资料压缩包,双击,弹窗要求输入密码。你试了纪念日、试了宠物名字、试了当年最常用的那串字母数字组合……密码错误。再试,还是错误。你甚至翻出了当年的邮件和聊天记录,依然对不上号。眼看文件就在那里,却像隔着一扇上了锁的门,钥匙早丢了。

大多数人到这里会选择放弃,或者找一个号称"万能破解"的软件,结果要么收费、要么无效、要么偷偷捆绑流氓程序。其实还有第三条路:绕过密码,直接对付加密本身。bkcrack 干的就是这件事,而且它免费、开源、跨平台,连图形界面都不需要。

先确认:你面对的是ZipCrypto还是AES?

在动手之前,得先搞清楚一件事:ZIP 加密并不只有一种,bkcrack 只认其中一种。

加密方式时代强度bkcrack 是否适用
传统 ZipCrypto(传统PKWARE加密)上世纪90年代偏弱,存在已知漏洞✅ 适用
AES 加密现代标准❌ 不适用

ZipCrypto 是很多老压缩软件和"默认加密选项"使用的算法,也是大量存量压缩包的加密来源。判断方法很简单:让 bkcrack 把压缩包内容列出来看一眼,加密方式一栏会直接标注 ZipCrypto。

bkcrack凭什么能攻破ZipCrypto?

知其然,最好也知其所以然。ZipCrypto 本质上是一个流密码:你用密码初始化内部状态,机器随后不断吐出一串伪随机字节,与文件内容逐字节异或,得到密文。可以把它想象成一台有三只齿轮的盖章机——三只齿轮的初始咬合位置由密码决定,每处理一个字节,齿轮就转一格。

这套机制听起来挺严谨,却被两位研究者(Biham 和 Kocher)在1994年的论文里找到了软肋:已知明文攻击

打个比方,就像你从一摞文件里捡到一张盖过章的白纸,纸上的印痕清晰可辨。你不需要知道印章上刻的每一个字,只要有一段足够清晰的印痕,就能反推出印章的完整图案。对应到 ZipCrypto 上:你不需要知道整个文件内容,只要知道其中至少12个字节的原文(其中8字节必须连续),就能把三只齿轮的初始位置倒推出来。

这三组数字一经恢复,就相当于拿到了整把锁的备用钥匙:不但能解开压缩包里所有用同一密码加密的文件,还能顺手把密码换掉,甚至反推出原始密码。这就是 bkcrack 的核心逻辑——它不猜密码,它直接重建"钥匙"。

bkcrack安装步骤:两条路,三分钟搞定

拿到工具的方式有两种,按自己的习惯选一条就行。

路线一:下载预编译包。官方发布页会提供 Ubuntu、macOS 和 Windows 三个平台的现成可执行文件,解压即用,适合不想碰编译的人。Windows 用户如果运行时提示缺少 DLL,装一下微软的 Visual C++ 运行库即可。

路线二:从源码编译。想看看内部实现、或者想要最新代码,就克隆仓库后交给 CMake:

git clone https://gitcode.com/gh_mirrors/bk/bkcrack cd bkcrack cmake -S . -B build -DCMAKE_INSTALL_PREFIX=install cmake --build build --config Release cmake --build build --config Release --target install

编译完成后,可执行文件会出现在install目录里。到这一步,工具就算备好了。💡 顺手把命令加入 PATH,后面用起来会顺手很多。

核心流程:4步走完一次破解

接下来进入正题。整个破解过程可以拆成四个动作,每一步都附上"为什么要这么做"。

第1步:让bkcrack帮你"看"压缩包

先用查看模式确认包内情况:

bkcrack -L 加密包.zip

输出会列出每个条目的加密方式、压缩方式、CRC32、原始大小和打包后大小。你的目光应该优先锁定"加密方式为 ZipCrypto、压缩方式为 Store"的条目——未压缩的文件是最好下手的目标,因为它的密文和原文几乎一一对应,攻击最快、最稳。如果包里只有 Deflate 压缩的条目,后面会讲到,难度会陡增。

第2步:凑出12字节已知明文

这是整个流程里最考验"侦察能力"的一步。已知明文从哪来?常见来源有三个:

  • 文件格式特征:很多格式有固定开头,比如 PDF 以%PDF-起头,某些脚本、配置、日志文件的开头你也能凭经验猜个八九不离十;
  • 同款文件:如果你能上网找到同名的原版文件(比如某个开源软件的组件),下载下来直接当明文用;
  • 自己的备份:同一份内容你以前可能导出过未加密的版本。

把猜到的明文写进一个文件,注意别多加换行符:

echo -n '%PDF-1.4' > plain.txt

这里还有个小福利:当密文直接从压缩包加载时,bkcrack 会自动把加密头末尾的校验字节并入已知明文——等于白送你一个字节,而且这个字节几乎可以确定是对的。

第3步:发起攻击,等那三组数字

明文就位,就可以开跑了:

bkcrack -C 加密包.zip -c 目标文件.pdf -p plain.txt

终端里会先经历一段 "Z reduction"(用已知明文快速筛掉大量错误候选),随后进入正式攻击。连续明文越多,这一阶段越快。顺利的话,输出里会冒出类似这样的三组十六进制数:

Keys: 8f3a9c21 7b4d5e60 1a2b3c4d

🎉 恭喜,这三组数字就是加密的内部状态,也就是我们说的"备用钥匙"。如果你在运行中手动中断了攻击,输出会提示一个--continue-attack参数,加上它就能从断点继续,不用从头再来。

第4步:用密钥收尾,三种姿势任选

拿到密钥之后,你至少有三种收尾方式,按需选用:

姿势A:直接去掉密码。生成一个内容相同、但没有加密的新压缩包:

bkcrack -C 加密包.zip -k 8f3a9c21 7b4d5e60 1a2b3c4d -D 无密码.zip

姿势B:换成你知道的新密码。适合还想继续用密码保护、只是要换一个自己记得住的:

bkcrack -C 加密包.zip -k 8f3a9c21 7b4d5e60 1a2b3c4d -U 新密码包.zip 我的新密码

姿势C:逐个解密文件。想保留原包结构,就一条条解密:

bkcrack -C 加密包.zip -c 目标文件.pdf -k 8f3a9c21 7b4d5e60 1a2b3c4d -d 解密后.pdf

如果解出来的内容仍是乱码,别慌——那多半是 Deflate 压缩层还没拆掉。项目自带的 tools/inflate.py 脚本就是干这个的:

python3 tools/inflate.py < 解密后.bin > 最终文件.pdf

顺带一提:如果你好奇原始密码到底是什么,也可以用密钥去"倒查":

bkcrack -k 8f3a9c21 7b4d5e60 1a2b3c4d --bruteforce ?p --length 8..10

?p表示可打印 ASCII 字符集,8..10是长度范围。字符集越小、长度越短,跑得越快——但反过来,猜错了范围就永远找不到,所以这步要对自己的记忆做合理预估。

新手最容易踩的坑与避坑建议 ⚠️

  • 拿 AES 加密的包来试。工具会明确告诉你这不是它能处理的类型,属于白忙一场。动手前先-L确认加密方式。
  • 明文不够12字节,或8个连续字节凑不齐。攻击根本跑不起来。实在凑不够时,可以用-x参数把散落在不同偏移处的已知字节补上(比如-x 25 4b4f表示偏移25处有字节 0x4B 0x4F),凑满12字节的总量要求。
  • 盯上了压缩过的条目。Deflate 压缩意味着密文对应的"原文"是压缩后的字节流,而不是你熟悉的文件内容。除非你能找到原文件并用同样的压缩级别复现它,否则很难下手。这就是为什么教程反复强调:优先选 Store 条目。
  • 明文的偏移没对上。如果已知明文不是文件开头,记得用-o指定偏移;如果明文包含加密头的一部分,偏移还可以是负数。对不上号时,攻击要么报错,要么算出一堆假密钥。
  • 密码找回阶段乱猜字符集。先用全字节集?b探一遍长度上限,再逐步收窄到?p?a,比一上来就猜"应该是字母数字"稳妥得多。项目自带的 example/tutorial.md 里就完整演示了这种"先宽后窄"的思路。

什么场景才适合动用它?

工具没有善恶,用的人有。请务必记住:bkcrack 只应该用来处理你自己拥有、或已获得明确授权的文件。典型正当场景包括:恢复自己遗忘密码的档案、帮家人找回旧资料、受企业委托评估内部文档的加密强度。未经授权破解他人文件,轻则侵权,重则违法——这不是免责声明式的套话,而是真实存在的法律风险。做安全审计时,先拿到书面授权再动手,对你和你的客户都是一种保护。

如果你对攻击算法的细节感兴趣,源码是最好的老师:攻击主逻辑在 src/Attack.cpp,ZIP 解析在 src/Zip.cpp,密钥状态机在 src/Keys.cpp,官方说明和限制清单分别见 doc/index.md 与 doc/limitations.md。

最后想对你说的

密码只是通往文件的一道门,而 bkcrack 让你在丢钥匙之后,还能照着一块印痕把门重新打开。下一次再对着密码输入框发呆时,不妨先冷静下来想一想:你手里有没有一段"已知"的内容?如果有,那扇门就还没关死。记得先确认加密类型,再凑齐12字节明文,然后按这4步走下去——你的文件,大概率能找回来。

【免费下载链接】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 16:41:18

Asterix 行动:面向加密货币用户的 AI 赋能复合型欺诈流水线研究

摘要 随着加密货币资产价值持续提升&#xff0c;针对加密资产持有者的定向网络欺诈逐步从广撒网式钓鱼转向多阶段、多渠道协同的工业化攻击模式。Asterix 行动是安全厂商 Rapid7 捕获的一套完整的活跃欺诈作战体系&#xff0c;该攻击链条整合目标筛选、账号有效性校验、邮件钓鱼…

作者头像 李华
网站建设 2026/8/19 16:38:26

Python从入门到精通 第四章(程序的控制结构)

一、逻辑运算 1、逻辑运算符回顾 运算符 逻辑表达式 描述 and x and y 只有x和y的值都为True&#xff0c;才会返回True&#xff0c;否则返回False or x or y 只要x或y的值为True&#xff0c;就会返回True&#xff0c;否则返回False not not x 如果x为True&#xff…

作者头像 李华
网站建设 2026/8/19 16:37:06

Qt实现UDP单播、组播和广播功能

一、UDP单播、广播和组播的说明 UDP是不可靠、无连接的&#xff0c;所以划分为发送方和接收方更好理解 1、单播 UDP是无连接的&#xff0c;进行单播通信时&#xff0c;必须要绑定接收方端口&#xff0c;发送方直接通过接收方的ip和绑定的端口进行通信。发送方可以绑定端口也…

作者头像 李华
网站建设 2026/8/19 16:29:26

C/C++开发工具CLion v2022.3全新发布——支持C++ 20

CLion是一款专为开发C及C所设计的跨平台IDE。它是以IntelliJ为基础设计的&#xff0c;包含了许多智能功能来提高开发人员的生产力。这种强大的IDE帮助开发人员在Linux、OS X和Windows上来开发C/C&#xff0c;同时它还使用智能编辑器来提高代码质量、自动代码重构并且深度整合CM…

作者头像 李华