首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python: Rar Brute Forcer

Python: Rar Brute Forcer
EN

Stack Overflow用户
提问于 2010-01-28 00:04:12
回答 5查看 7.3K关注 0票数 4

我正在尝试暴力破解受3个字符的密码保护的RAR存档:

代码语言:javascript
运行
复制
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秒的时间内完成。

有什么想法可以提高性能吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-01-28 00:12:07

您可以使用(或学习) rarcrack。它是用C语言编写的,在Linux (有很多变化的Windows)上编译没有问题。

一般来说,为每个单独测试的密码打开一个进程是非常昂贵的。您应该尝试自己打开存档,然后对所有密码进行测试。无论如何,您需要测试rar.exe的返回值,以确定提取是否成功。

为了获得最佳性能,您应该用C(或类似语言)编写程序。有一个名为"libunrar“的Linux包可以帮助您打开RAR文件。

票数 9
EN

Stack Overflow用户

发布于 2010-01-28 00:09:14

您可以考虑使用一些stdlib模块:

代码语言:javascript
运行
复制
>>> 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()

它可能不一定提高性能,但它确实使您的代码更整洁。

票数 6
EN

Stack Overflow用户

发布于 2010-01-28 00:19:06

密码的生成很简单,这就是为什么创建26^3 = 17576个密码只需要5秒的原因。最耗费时间的是打开和尝试解密存档-而您无法控制这一点。

在加速这方面你无能为力--在最初的几次尝试之后,rar二进制文件和输入文件将被缓存到内存中:只要让它在需要的时候整夜或在周末运行即可。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2148393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档