Модуль zipfile, дающий ненадежные результаты - PullRequest
2 голосов
/ 12 января 2011

Я применил словарную атаку на зашифрованные zip-файлы, используя библиотеку zipfile. Когда я начинал использовать БОЛЬШИЕ словари, иногда получал ложноположительные результаты, то есть пароль мог быть «шерстяным», а «12630» считался правильным. В этом случае расшифрованный файл, очевидно, содержал бред.

Это не ошибка в моем коде, но в том, как библиотека zipfile проверяет правильность введенного пароля. Мне удалось уменьшить количество ложных срабатываний, проверив размер расшифрованного файла и, если он равен 0, считать его ложным и продолжать поиск. Но моя проблема остается, потому что, когда файл содержит тарабарщину, его размер> 0. Итак, мой вопрос, есть ли способ определить, правильно ли расшифрован файл или содержит ли он тарабарщину?

PS. Да, я знаю, что расшифровка zip-файлов с помощью zipfile идет медленно, но, как я уже говорил ранее, я делаю это, чтобы получить контроль над Python.

Вот мой код:

import zipfile
import os



zfile=raw_input("Please input zip's file name\n")
diction=raw_input("Please input dictionary\n")
found = False
zipf = zipfile.ZipFile( zfile, 'r' )
f = open(diction, 'r')

for line in f:
    pswd = line
    pswd = pswd[:-1]
    zipf.setpassword(pswd)   
    try:
        zipf.extractall()
        if (os.path.getsize(zfile[:-4]) != 0):
            found = True 
            break
    except RuntimeError:
        continue
    except Exception:
        continue
zipf.close()  

Это - отчет об ошибке, который я отправил в трекер ошибок Python. Как вы можете видеть, они не считают это «ошибкой» библиотеки, поэтому я прошу альтернативные варианты проверки правильности расшифровки файла.

PS. Для всех, кто заботится, по приведенной выше ссылке, они сказали мне, что это проблема формата файла zip и что ничего не поделаешь. Так что я думаю, вопрос вроде как ответ.

1 Ответ

3 голосов
/ 12 января 2011

С это отчет об ошибке zipfile

"Схема проверки пароля использует однобайтовую проверку на соответствие заголовку zip для согласованности. Таким образом, существует вероятность (около) 1/256 ложных срабатываний, то есть ошибочных паролей, ошибочно определенных как хорошие; затем класс ZipFile продолжает разархивирование, и вот где все заканчивается неудачей (потому что «расшифрованный» поток действительно является ненужным). "

Выдается ли какое-либо исключение? Пожалуйста, оставьте свой код.

...