ZIP 明文攻击工具
文章目录
【注】本文最后更新于 April 11, 2019,文中内容可能已经过时。
这个国庆假期抽了点风……
写了一个假期的代码……
简介
前两天自己也不记得受了啥刺激写了个 ren3.
写完以后大概是处于亢奋状态, 突然又想开坑, 然后又花了四天完成了
- rbkcrack fork 了 bkcrack, 然后用 Rust 重(zhao)写(chao), 再然后用
zip-rs·改
替换掉手写的 parser, 实现了对 ZIP64 的一定程度上的兼容, 再顺便加上解压. 实测成功破解了 20+GB 的zip文件. - p7zip 稍微改了一下计算秘钥的部分, 允许使用
-p[key1_key2_key3]
这种格式来直接指定三个 key. (世界上最遥远的距离, 不是生与死, 而是我都拿到 keys 了, 却找不到工具解压……)
示例
就拿以前测试时出的一道题为例, 下载地址文末
两个flag, 一个在flag.txt里, 一个在big_file开头
big_file里的那个我自己也弄不出来, 就又加了一个flag.txt
给了两个已知明文
hashcat是一开始随手加进来的, libc是后来为了测试工具随手加进来的
所以这里没有坑
PS. 17位大小写数字混合密码, 不用试图爆破…
cipher.zip 里有4个文件, big_file 和 flag.txt 是等待破解的.
其中 big_file 压缩前大小高达 4.8 GiB, 使得这个 ZIP 文件包含了 ZIP64 格式.
这个地方没有说这个文件是 ZIP64 格式, 而是说它包含了 ZIP64 格式. 因为一个 ZIP 文件理论上是可以包含多种压缩算法&格式(好像是这样的), 所以我们可以选择其中的原始 ZIP 格式进行破解.
然而面对这样的一个文件 pkcrack 和 AZPR 都会给出 unknown signature
一类的报错. 直接把路堵死了…
其实 pkcrack 把报错代码注释掉就能跑了
这个地方我们使用 rbkcrack.
它的前身 bkcrack 其实也能爆破, 不过作者手写的 parser 完全没有考虑 ZIP64 格式, 在面对复杂文件时可能会跪…
题目给了两个明文, libc 那个比较大, 爆破起来比较快. 于是执行如下命令开始攻击
|
|
只花费了五秒钟就得到了keys.
2019.04.11 更新:
rbkcrack 0.2.0 增加了自动根据 CRC32 寻找合适文件的功能, 于是上面的代码可以简写成
rbkcrack -C cipher.zip -P plain2.zip -a
PS. 这个功能最大的用处其实是对付某些 GBK 编码的 zip 文件…
PS. 重写完 bkcrack 后我拿一个文件测试了一下, 发现 Rust 版竟然比 C++ 版还快了 15%…… (改用 sort_unstabe 以后快了 25%……)
2019.04.11 更新:
现在一样快了
|
|
得到 keys 以后直接使用如下代码可以从 cipher.zip 中解压 flag.txt. (这个地方没有加 -u 开关, 因为 flag.txt 的压缩方式是 store)
|
|
然后得到了第一个 flag: flag{Th3Re_1s_Ano1h3r_f1ag_in_big_file}
big_file 是实打实的压缩过的, 需要加上 -u 开关提取. 由于文件非常大, 而且我们只要前面的一部分, 所以当看到 big_file 大小差不多了就可以 Ctrl+C 了.
|
|
head 一下然后就得到了第二个 flag: flag{Th1s_i3_A_tE5t}
最后强行给 p7zip 一个出场机会, 虽然做题的时候不大可能用到, 但是真要用来干大事儿还是它靠谱.
|
|
下载地址: fucking_problem.zip