Python: Rar暴力破解工具
我正在尝试用暴力破解的方法来破解一个被密码保护的RAR压缩文件,密码是3个字符:
import os
Alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for a in range(0,26):
for b in range(0,26):
for c in range(0,26):
Brute = Alphabets[a] + Alphabets[b] + Alphabets[c]
os.popen4("Rar.exe x -p" + Brute + " Protected.rar")
# raw_input()
raw_input("Done !")
这段代码运行得不错,但有一个问题:速度太慢了!!
我觉得慢的原因是因为使用了“popen4”这个方法来多次打开文件。因为我试着把生成的密码存到一个文本文件里,结果程序在5秒钟内就完成了。
有没有什么办法可以提高速度呢?
5 个回答
4
生成密码其实很简单,所以只需要5秒钟就能创建出26^3 = 17576个密码。最耗时间的部分是打开和尝试解密这个压缩文件,而这部分你是无法控制的。
要加快这个过程其实没什么办法——在前几次尝试后,rar程序和输入文件会被缓存到内存中。你可以选择让它在晚上或者周末运行,随便它去吧。
6
你可以考虑使用一些标准库的模块:
>>> import string
>>> import itertools
>>> from subprocess import Popen, PIPE
>>> for i in itertools.product(string.ascii_uppercase, repeat=3):
pr = Popen(['rar.exe', 'x', '-p', ''.join(i), 'protected.rar'], stdin=PIPE, stdout=PIPE)
pr.communicate()
这样做可能不一定会提高性能,但会让你的代码看起来更整洁。
9
你可以使用(或者学习一下)rarcrack。这个工具是用C语言写的,在Linux上可以顺利编译(在Windows上需要做很多修改)。
一般来说,每次测试一个密码都打开一个新进程是非常耗费资源的。你应该尝试自己打开压缩文件,然后再用所有的密码进行测试。无论如何,你需要检查rar.exe的返回值,以确定解压是否成功。
为了获得最佳性能,你应该用C语言(或类似的语言)来编写程序。有一个叫“libunrar”的Linux包,可能会对你打开RAR文件有帮助。