Питон: Rar Brute Forcer - PullRequest
       2

Питон: Rar Brute Forcer

4 голосов
/ 27 января 2010

Я пытаюсь перебором архива 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 ]

7 голосов
/ 27 января 2010

Вы можете использовать (или учиться) rarcrack . Он написан на C и без проблем компилируется в Linux (Windows с большим количеством изменений).

В общем, открытие процесса для каждого проверенного пароля очень дорого. Вы должны попытаться открыть архив самостоятельно, а затем проверить все пароли. В любом случае вам нужно проверить возвращаемое значение rar.exe, чтобы выяснить, удалось ли извлечь.

Для лучшей производительности вы должны написать программу на С (или аналогичную). Существует пакет Linux под названием «libunrar», который может помочь вам открыть файлы RAR.

5 голосов
/ 27 января 2010

вы можете рассмотреть возможность использования некоторых модулей 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()

Это не обязательно повышает производительность, но делает ваш код чище.

3 голосов
/ 27 января 2010

Генерация паролей тривиальна, поэтому на создание 26 ^ 3 = 17576 паролей уходит всего 5 секунд. Больше всего времени занимает открытие и попытка расшифровать архив - и вы не можете это контролировать.

Вы не можете ничего с этим поделать - двоичный файл rar и входной файл будут кэшироваться в памяти после первых нескольких попыток: просто дайте ему поработать в течение ночи или в выходные дни, если потребуется. 1003 *

0 голосов
/ 27 января 2010

Возможно, вам не удастся сократить время, необходимое для попытки расшифровки архива, но, предполагая, что пароль не является полностью случайным (что может быть), вы можете получить правильный пароль больше быстро, если вы заказываете буквы в порядке уменьшения вероятности использования .

Например, в Linux Journal столбец сценария оболочки проанализировал несколько больших текстов, чтобы определить, что e, t, a, o, n, i, s, r, h и d были наиболее распространенными буквами в этих текстах (и предположительно это близко к английскому языку в целом). Так что изменив вторую строку на: Alphabets = "ETAONIBSRHDCFGJKLMPQUVWXYZ" может привести к тому, что ваш алгоритм получит пароль за меньшее количество итераций.

Редактировать: Вторые мысли Если пароль, как кто-то указал, «cat», исходный порядок потребует 3 прохода через внешний цикл, тогда как новая версия потребует 11 проходов, так что в этом случае он не решит его быстрее. Поэтому, возможно, вам нужно оптимизировать список для внешнего цикла, пытаясь предсказать наиболее вероятную первую букву.

0 голосов
/ 27 января 2010

Как насчет генерации паролей сначала, а затем распараллелить вызов процесса rar.exe (который кажется узким местом)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...