2016-11-12 7 views
0

Я пытаюсь сделать это домашнее задание https://www.root-me.org/en/Challenges/Cryptanalysis/File-PKZIP Когда я пишу функцию, чтобы взломать ее.Почему pkzip принимает два пароля?

import subprocess from time import sleep 

file = open('/home/begood/Downloads/SecLists-master/Passwords/' 
      'rockyou-75.txt', 'r') lines = file.readlines() file.close() for line in lines: 
    command = 'unzip -P ' + line.strip() + ' /home/begood/Downloads/ch5.zip' 
    print command 
    p = subprocess.Popen(
     command, 
     stdout=subprocess.PIPE, shell=True).communicate()[0] 
    if 'replace' in p: 

     print 'y\n' 
    sleep(1) 

Это остановка в пароле = scooter:

unzip -P scooter /home/begood/Downloads/ch5.zip replace readme.txt?   [y]es, [n]o, [A]ll, [N]one, [r]ename: 

, но когда я использую его, чтобы распаковать сказал:

inflating: /home/begood/readme.txt 
    error: invalid compressed data to inflate 

И это реальный пароль: 14535. Почему pkzip принимает два пароля?

ответ

1

Я предполагаю, что используемое шифрование - это старое, очень слабое шифрование, которое было частью исходного формата PKZIP.

Этот метод шифрования содержит 12-байтовый солевой заголовок перед сжатыми данными. Из спецификации PKWARE:

После заголовка расшифрованные, последние 1 или 2 байта в буфере должен быть высоким порядок слов/байтами CRC для файла, расшифрован, хранится в Intel низко- байт/верхний порядок. Версии PKZIP до 2.0 использовали 2-байтный CRC-чек; 1 байтовая проверка CRC - , используемая для версий после 2.0. Это можно использовать для проверки правильности введенного пароля .

Это было первоначально два байта в 1.0 спецификации, но в спецификации 2.0, и в соответствующей версии PKZIP, значение проверки было изменено на один байт, чтобы сделать поиск пароля, как то, что вы делаете больше, сложно. В результате примерно один из каждых 256 случайных паролей приведет к передаче этой первой проверки, а затем приступить к попытке распаковать неправильно дешифрованные сжатые данные, только затем запускаясь в ошибку.

Таким образом, это далеко не более двух паролей, которые будут «приняты». Однако для определения того, что пароль был, тем не менее, неправильным, не потребуется очень много байтов декомпрессированных данных.

+0

Похоже, что атака Oracle в Oracle применяется в RSA! – Mr2uang

 Смежные вопросы

  • Нет связанных вопросов^_^