压缩包破解

手上有个rar的压缩包,已经有10多年了一直没有解开,我记得还是2层加密的,而且密码好像是40位以上的,最近空下来了想着看看是否可以解开,不过最后还是一样无法解开。

原生密码破解

网上有很多这样的工具,比如 https://hzgzs.lanzoui.com/s/yasuopj

不过这些第三方的都非常可疑,至少下载下来发现很多都要主动去连外部一些 域名和ip, 具体传什么也不知道,所以大家小心使用,我一般都放入到虚拟机里搞。

数据字典

因为大概知道密码的一些关键字,于是想着先生成一个字典再去搞。Kali下常见的是Crunch,简单试用了一下,发现不是很符合自己需求。因为它是默认把后面字符串里的每个字符都拉出来进行拼接的。 如果你通过-q 进行导入的话,那就没法生成固定长度的字符串,而是所有字符串全部随机拼接起来,长度都是相同的。这个后面可以看看源码修改一下。

1
2
3
4
crunch <min> <max> [options]

min 设定最小字符串长度(必选)
max 设定最大字符串长度(必选)

查了半天发现没有合适的,这个就用python自己实现生成一下也行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from itertools import permutations 
import string

//读入字典文件,按行写你记得的关键字
with open("dict.txt", "r") as tf:
lst = tf.read().split("\n")

combinations_lst = []

//这里用到了permutations方法,具体几个方法有什么区别,可以参考下表。这里我用了4个元素来进行拼接,也可以前面加个for循环进行多个元素拼接
//也可以多个list进行拼接
for combination in permutations(lst, 4):
passwdstring = ''.join(combination)
combinations_lst.append(passwdstring)


f=open("password.txt","w")

//获得list后按行写入到文件里
for line in combinations_lst:
f.write(line+'\n')

f.close()
Examples Results
product('ABCD', repeat=2) AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
permutations('ABCD', 2) AB AC AD BA BC BD CA CB CD DA DB DC
combinations('ABCD', 2) AB AC AD BC BD CD
combinations_with_replacement('ABCD', 2) AA AB AC AD BB BC BD CC CD DD

破解工具

生成出来后就找个工具遍历破解就行了。有一个rarcrack,这个工具它默认字典就是代码里写了的,默认就是数字字符什么的。

https://github.com/ziman/rarcrack/blob/master/rarcrack.c

所以想调用字典就直接用unrar就行,或者改一下raracrack的代码,让它读入字典文件就行。

不过有个fcrackzip是可以自己指定字典的,但是又只能解压zip和7z格式。

hash破解

后来查了一下,现在又都开始搞hash破解,这个其实就是获取加密文件的密码的hash值然后撞hash值进行破解。

获取文件hash值

这里首先是用到JohnTheRipper

https://github.com/openwall/john/tags

使用zip2john就是为了获取zip包的hash值。 当然其实JohnTheRipper本身也可以破解,只是跟hashcat这种使用GPU计算的要差一点。

1
2
3
4
5
6
7
8
9
10
11
wget https://github.com/openwall/john/archive/refs/tags/1.9.0-Jumbo-1.tar.gz
cd john-1.9.0-Jumbo-1/src
./configure
make -s clean && make -sj4
cd ../run
#手动创建一个zip文件timo.zip, 记得输入密码后回车,如果是rar包的话下面就用rar2john
echo timo > timo.txt
zip -e --password=timo timo.zip timo.txt
./zip2john timo.zip | cut -d ":" -f 2 > timo.zip.hash
ver 1.0 efh 5455 efh 7875 timo.zip/timo.txt PKZIP Encr: 2b chk, TS_chk, cmplen=17, decmplen=5, crc=CEE1CF9E

针对hash值破解

后面就是hashcat出马了

https://hashcat.net/hashcat/

1
2
3
4
wget https://hashcat.net/files/hashcat-6.2.5.7z
7z x hashcat-6.2.5.7z
cd hashcat-6.2.5/
./hashcat.bin -m 17210 -a 3 timo.zip.hash --increment '?l?l?l?l'

hashcat还是比较复杂的,参数这些特别多。 还有涉及到opencl, cuda, amd的rocm等等。 需要好好玩一下。

特别注意是一定要指定对对应的hash模式,这个非常重要的。 这里的-m 就是指定对应的模式

https://hashcat.net/wiki/doku.php?id=example_hashes

-a 就是指定破解方式

Mode
0 Straight 单个字典破解
1 Combination 使用多个字典进行破解
3 Brute-force 这里其实就是Mask Attack,也就是掩码破解
6 Hybrid Wordlist + Mask 字典+掩码破解
7 Hybrid Mask + Wordlist 掩码+字典破解
9 Association 联合方式

这里发现自己在虚拟机里,还搞不了这个,只能先退出来直接在ubuntu上搞.

我自己安装的cuda版本是12.3

nvidia-smi

nvcc

下面这个是就是正式执行的结果,总共就花了几秒就完成了。

crack-start

仅仅4秒就完成了。不过这个是知道长度和字符串类型的情况下。

crack-end

虽然测试通过了,但是我的那个rar文件应该还是没救了,那个是40位以上,包含数字大小写字母和符号的。就等以后量子计算机吧。