2016-11-12 8 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의 상위 워드/바이트해야한다 바이트/상위 바이트 순서. 의 버전 2.0 이전의 PKZIP는 2 바이트 CRC 검사를 사용했습니다. 2.0 이후 버전에서 1 바이트 CRC 검사는 입니다. 이 암호를 사용하여 암호가 맞는지 여부를 테스트 할 수 있습니다.

원래는 1.0 사양에서 2 바이트 였지만 2.0 사양과 관련 PKZIP 버전에서는 검사 값이 1 바이트로 변경되어 더 많은 작업을 수행하는 것과 같은 암호 검색을 수행했습니다 어려운. 결과적으로 256 개의 무작위 암호 중 하나가 첫 번째 검사를 통과 한 다음 잘못 해독 된 잘못된 압축 데이터를 압축 해제하려고 시도합니다.

그래서 "허용 된"암호가 두 개 이상 있습니다. 그러나 암호가 올바르지 않았 음을 감지하기 위해 압축 해제 된 데이터의 바이트 수가 많지 않습니다.

+0

RSA에서 패딩 오라클 공격처럼 보입니다! – Mr2uang