我正在尝试暴力破解受3个字符的密码保护的RAR存档:
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“的多重打开。因为我尝试将生成的单词存储在txt文件中,程序在不到5秒的时间内完成。
有什么想法可以提高性能吗?
发布于 2010-01-28 00:12:07
您可以使用(或学习) rarcrack。它是用C语言编写的,在Linux (有很多变化的Windows)上编译没有问题。
一般来说,为每个单独测试的密码打开一个进程是非常昂贵的。您应该尝试自己打开存档,然后对所有密码进行测试。无论如何,您需要测试rar.exe的返回值,以确定提取是否成功。
为了获得最佳性能,您应该用C(或类似语言)编写程序。有一个名为"libunrar“的Linux包可以帮助您打开RAR文件。
发布于 2010-01-28 00:09:14
您可以考虑使用一些stdlib模块:
>>> 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()它可能不一定提高性能,但它确实使您的代码更整洁。
发布于 2010-01-28 00:19:06
密码的生成很简单,这就是为什么创建26^3 = 17576个密码只需要5秒的原因。最耗费时间的是打开和尝试解密存档-而您无法控制这一点。
在加速这方面你无能为力--在最初的几次尝试之后,rar二进制文件和输入文件将被缓存到内存中:只要让它在需要的时候整夜或在周末运行即可。
https://stackoverflow.com/questions/2148393
复制相似问题