## 개요
오늘은 윈도우 zip 파일을 압축 해제할 때 비밀번호를 알아내는, 혹은 비밀번호 없이도 내부의 압축된 파일을 확인할 수 있는 도구를 소개할 예정이다. 다른 논문을 읽다가 알아낸 건데, 여러 상황에서 유용하게 쓰일 여지가 있어 좀더 깊게 알아볼 예정이다.
## Download Link
[bkcrack](https://github.com/kimci86/bkcrack)
## 원리
## 사용법
먼저 대략적인 기능을 알아보자. bkcrack은 다음과 같은 3가지 주요 가능을 가지고 있다.
1. 암호화된 파일의 복호화
2. ZIP 파일의 비밀번호 해제/변경
3. 비밀번호 복원
### 설치
```
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=install
cmake --build build --config Release
cmake --build build --config Release --target install
```
### 명령어
```bash
bkcrack -L sample.zip // 압축 파일 리스트
bkcrack -C enc.zip -c cipher -P plain.zip -p plain
/*
알려진 평문을 plain, 알려진 평문을 압축한 것을 plain.zip으로 입력하면 된다.
당연하게도 암호화된 압축 파일은 enc.zip이다.
*/
bkcrack -c cipherfile -p plainfile -o offset
/*
평문 파일의 특정 오프셋 지정
*/
bkcrack -c cipherfile -k 12345678 23456789 34567890 -d decipheredfile
/*
공격이 성공한 경우 도출되는 키 값으로 복호화
*/
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -D decrypted.zip
/*
설정되어 있는 비밀번호 제거
*/
bkcrack -k 1ded830c 24454157 7213b8c5 -r 10 ?p
/*
비밀번호 복원
*/
```
## 결론
앞서 원리를 다루면서 설명했듯, bkcrack은 KPA(Known Plaintex Attack) 을 활용한 공격 방식이기 때문에, 암호화된 파일에 대응하는 평문 조각을 알고 있어야하고 이때 평문 조각은 최소 12바이트 이상이어야 한다. 또, ZipCrypto 암호화 방식의 취약점을 이용하기 때문에 압축 방식은 ZipCrypto 방식으로 이루어져 있는 경우에만 가능하다.
결론적으로 시간복잡도를 줄여주는 방식이기 때문에 바로 크랙이 되는것은 아니다. 적당한 시간이 걸리는데 (`n^(l-6)`) 그래도 시간이 꽤 걸리는 편이다.
보통 암호화된 압축파일을 분석할 때는 여러 경우가 있다.
- 문서파일(.docx, .hwp)
- 펌웨어
- 백업(복원) 이미지
위와 같은 경우에는 변경되지 않은 정보를 알려진 평문으로 이용해서 입력값으로 준다면 암호화된 파일을 복원할 수 있기에 유용할 것이다.