Простой брутфорс не работает

Я пытаюсь написать очень простой метод грубой силы, чтобы попытаться взломать защищенный паролем zip-файл. Пароль к файлу "красный".

import zipfile;
zfile = zipfile.ZipFile('password_archive.zip')

words = open('/usr/share/dict/words')
for word in words.readlines():
    try:
        password = word.strip('/n')
        zfile.extractall(pwd=password)
        print "Password found: "+ password
        exit(0)
    except Exception, e:
        print e

Приставка:

('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
Password found: Abasgi

Не совсем уверен, что здесь происходит. Abasgi не является правильным паролем, но сценарий, похоже, не работает с неправильным паролем и, кажется, находит правильный. Я думаю, что установил переменную пароля в правильном месте цикла.


person vikingcode    schedule 20.07.2014    source источник
comment
google.com/search?q=password+hash+collision   -  person Pang    schedule 20.07.2014
comment
Это не коллизия хешей. Я не сравниваю слово dict с хешем. Вы не знаете, о чем говорите.   -  person vikingcode    schedule 20.07.2014


Ответы (1)


Вам нужно изменить:

password = word.strip('/n')

To:

password = word.strip("\n")

Но вы могли бы также просто:

password = word.strip()

См. полосу документации:

Возвращает копию строки с удаленными начальными и конечными символами. Если chars опущен или None, пробельные символы удаляются. Если задано, а не None, символы должны быть строкой; символы в строке будут удалены с обоих концов строки, для которой вызывается этот метод.

И убедитесь, что red есть в вашем списке слов, а Red есть в моем, поэтому мне пришлось добавить:

zfile.extractall(pwd=password.lower())

После этих изменений все работает отлично:

import zipfile
zfile = zipfile.ZipFile("file.zip")

words = open("/usr/share/dict/words")
for word in words.readlines():
     try:
        password = word.strip("\n")
        zfile.extractall(pwd=password.lower())
        print "Password found: "+ password
        exit(0)
     except Exception, e:
        pass
person Noelkd    schedule 20.07.2014