创建: 2023-12-22 20:00
更新: 2024-01-06 13:33
https://scz.617.cn/misc/202312222000.txt
简单地讲,用ZipCrypto加密保护的ZIP,若其中某个文件原始内容已知,可通过CRC碰撞技术还原该ZIP解压密码中间状态,以三组4字节Key的形式呈现。可在不知ZIP原始解压密码的情况下,用这三组Key解密ZIP、设置新Key、设置新密码。
https://github.com/kimci86/bkcrack
bkcrack是相应工具,有源码,也有预编译好的PE,是个Windows工具,理论上可以移植到Linux,我没试过。
虽然AZPR/ARCHPR支持「ZIP已知明文攻击」,但破解速率远不如bkcrack,限制也较多,并不推荐。要干这事,首推bkcrack。
zcrack.7z中有如下内容:
readme.txt // 使用说明,可删除
zcrack_1.exe // 主程序1,挂密码字典
zcrack_1.sha256 // 主程序1的SHA256,可删除
zcrack_2.exe // 主程序2,挂Key字典
zcrack_2.sha256 // 主程序2的SHA256,可删除
Cryptodome\ // 依赖库,可用自己的
password.txt // 小字典,可用自己的
password_2.txt // 大字典,可用自己的
password_3.txt // 其他字典
key.txt // Key字典
some_0.zip // 测试用例,可删除
some_1.zip // 测试用例,可删除
some_2.zip // 测试用例,可删除
更新了一个工具zcrack_2.exe。
Usage: zcrack_2.exe <zipfile> <keyfile> [m]
zcrack_2.exe some.zip key.txt
zcrack_2.exe some.zip key.txt m
zcrack_2.exe命令行参数依次指定待穷举ZIP文件、Key字典;若尾部指定m,实时显示穷举进度,快速变化的数字是Key字典的行号,可以不指定m。若成功找到三组Key,显示:
(count, key)
key就是三组Key,bkcrack用三组Key可以设置新解压密码,count是Key字典行号。
zcrack_1.exe没啥意思,当时没测过AZPR/ARCHPR,冒昧自己实现了一版,纯属吃饱了撑得,zcrack_2.exe有点用。某些读秀ZIP靠CRC碰撞获取三组Key,但未能还原原始解压密码,比如长度太长、密码中有汉字等等,而这些Key实际等价于解压密码,大概率有其他读秀ZIP使用同样的Key或解压密码(只是未知);每次精心构造已知明文,不如弄个Key字典先跑一遍,无命中时再进行CRC碰撞攻击。正是基于这种思路,开发zcrack_2.exe,这是bkcrack和AZPR/ARCHPR所不具备的特色功能。Key字典目前只有几条,但我们可以分布式收集整理扩容,将那些碰撞成功但无法还原原始密码的Key都加进来,不就是新的Key字典了吗,欢迎分享你手上的Key。
key.txt格式要求同password.txt,内容有别,每行是三组Key,形如:
d5d71a3a 2716780e 761e2128
7fe76133 e7b6388d dc335ebb
b6a65138 7a4de6d5 1398a16d
fca6433b 210e18f6 2ac8bb32
a6c00649 9aa0871b 264405f1
78086274 76a801ca 12b71604
43725bc0 285f4ac7 515f5c92
a28e1ec6 0d5a5657 3f26c8b0
c0a0e369 bc34ab45 2ee23d62
这些Key主要是某位TG网友分享的,有两个是自己跑的,书不是我要的,只是当成测试用例。若谁跑出这些Key的原始密码,请及时分享,可从Key字典移除,并添加至密码字典。只用Key字典也无所谓,就多一个bkcrack设置新密码的手续而已。
有Key之后用bkcrack设置新密码(newpass)的示例:
bkcrack.exe -C 14616368.zip -k a28e1ec6 0d5a5657 3f26c8b0 -U 14616368_newpass.zip newpass
虽然不知14616368.zip原始解压密码,但解压14616368_newpass.zip即可。
用py2exe打包的工具,VT标红也很常见,比如zcrack,所以敢不敢用全凭自己,愿以身试险者随意。
https://gofile.io/d/oqdEwOzcrack.7z
size 6885617
sha256 8b380c125e660f33692a8f8925a1c6d788ea6643e862c7df3ea3d85cb3202f5b
为防止VT误杀zcrack.7z,加个密码,即文件名本身「zcrack.7z」