2016-07-21 7 views
0

Так что я написал эту программу, чтобы BruteForce почтовый файл в Python:Bruteforcing зип файл дает странные результаты

def Main(): 
    parser = argparse.ArgumentParser() 
    parser.add_argument("zfile", help = "The encrypted zip file you wish to crack") 
    parser.add_argument("length", help="Define the max length of password combinations you want to bruteforce") 
    args = parser.parse_args() 

    zFile = zipfile.ZipFile(args.zfile) 
    keywords = [''.join(i) for i in itertools.product(ascii_lowercase, repeat = int(args.length))] 

    for i in keywords: 
     print "[*] Testing password: "+i 
     try: 
      zFile.extractall(pwd = str(i)) 
      print "[+] Password Found: "+i 
      break 
     except: 
      pass  

if __name__ == '__main__': 
    Main() 

Но это необычно ведет себя .... У меня есть архив, в котором установлен пароль «собака», и когда я запускаю программу, он находит целую кучу паролей, которые якобы «работают», но на самом деле не работают. Если я вручную введу эти пароли в zip-файл, он извлечет поврежденный файл. Программа говорит, что пароли, такие как «aqw», будут работать, и их было немало. Самая странная часть заключалась в том, что программа не выйдет из цикла for после того, как она сообщит, что один из этих неработающих паролей будет работать.

Я понятия не имею, что происходит!

+0

У меня есть два вопроса об этом предложении: «Если я ввожу вручную такие пароли в zip-файл, он извлекает поврежденный файл». (1) что вы подразумеваете, введя пароль в zip-файл? Я бы подумал, что пароль вводится в программу, а не в zip-файл; программа извлекает данные из файла. Какой программой ты пользуешься? (2) Что такое «это», которое извлекает поврежденный файл? Ваша программа, указанная в списке, ничего не печатает, когда пробный пароль выходит из строя. Вы уверены, что это когда-нибудь случится? –

+0

Хорошо, позвольте мне перефразировать все это. У меня есть архив, и когда я пытаюсь распаковать его с помощью Stuffit Expander, он запрашивает у меня пароль. Я знаю, что пароль «собака». Однако, когда я запускаю свой скрипт, он выводит несколько других паролей, таких как «aqw» или «how» (например, программа будет печатать «[+] Password Found: how»), заявив, что они будут работать, когда я попытаюсь разверните zip-файл. Когда я ввожу эти пароли в Stuffit Expander, они фактически извлекут zip-файл, но извлеченный файл будет поврежден. Извините, я сделал эту массивную опечатку –

+0

, спасибо, имеет смысл сейчас. Я не уверен, что у вас проблема с Python, поскольку Stuffit Expander и Python совместимы: ни один из них не дает вам неверный результат пароля, когда он должен. Я посмотрел на zipfile.py-код (стандартная библиотека Python), и он использует что-то, называемое _ZipDecrypter, написанное на чистом Python. Когда он терпит неудачу, вы получаете RuntimeException («Плохой пароль для файла»), но он не очень сложный. Возможно, просмотр источника библиотеки даст вам ключ. Странная проблема. –

ответ

1

Это происходит потому, что формат файла ZIP использует очень грубый метод определения того, введен ли введенный пароль на самом деле правильно или неверно.

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

Когда вы найдете такое потенциальное совпадение, идея состоит в том, чтобы полностью расшифровать архив, используя этот пароль. После того, как он будет полностью дешифрован, программа должна сравнить CRC дешифрованных данных с сохраненным CRC и проверить, действительно ли пароль был прав.

Это единственный способ узнать наверняка, что матч найден.