본문 바로가기
Python/ETC

[Python] Zip 압축파일 비밀번호 뚫기

by 에파 2024. 8. 13.
728x90

이번 글에서는 파이썬을 사용하여 브루트포스 공격을 통해 가능한 모든 비밀번호 조합을 시도해서 암호화된 ZIP 파일을 푸는 코드를 구현해보겠습니다.

 

1. 브루트포스 공격이란?

브루트포스 공격은 가능한 모든 비밀번호 조합을 하나씩 시도하여 올바른 비밀번호를 찾아내는 방식입니다. 이 방법은 시간이 오래 걸릴 수 있지만, 확실한 방법입니다. 가능한 모든 조합을 시도하기 때문에 비밀번호가 길어질수록 시간이 많이 걸릴 수 있습니다. 아래에서 살펴 볼 코드의 경우, 최대 62개의 문자를 5자리까지 조합하기 때문에 최악의 경우 9억 번 정도의 시도를 해야 할 수 있습니다. 실제로 사용할 때는 가능한 비밀번호 길이나 문자 집합을 미리 알고 있는 경우 이 범위를 줄여서 빠르게 비밀번호를 찾아낼 수 있습니다.

 

2. 브루트포스 공격 구현 (Zip 압축파일 비밀번호 알아내는 코드)

'itertools.product'를 사용하여 가능한 모든 비밀번호 조합을 생성하고, 이를 이용해 ZIP 파일을 해제해 보겠습니다.

 

import zipfile
import itertools
import string

# ZIP 파일 경로
zip_file_path = 'protected.zip'

# 브루트포스 공격 설정
characters = string.ascii_lowercase + string.ascii_uppercase + string.digits  # 소문자, 대문자, 숫자
min_length = 1
max_length = 5

def extract_zip(zip_file, password):
    try:
        zip_file.extractall(pwd=password.encode('utf-8'))
        print(f"비밀번호를 찾았습니다: {password}")
        return True
    except:
        return False

# ZIP 파일 열기
with zipfile.ZipFile(zip_file_path) as zf:
    found = False
    for length in range(min_length, max_length + 1):
        for attempt in itertools.product(characters, repeat=length):
            password = ''.join(attempt)
            print(f"시도 중인 비밀번호: {password}")
            if extract_zip(zf, password):
                found = True
                break
        if found:
            break
    else:
        print("비밀번호를 찾지 못했습니다.")

댓글