28번 문제
문제 :
down 링크를 누르면, So_Simple.zip 파일이 받아진다.
압축 폴더 안에는 3개의 파일이 들어 있다.
암축을 해제하려고 하면, 암호가 필요하다.
Am_I_key... 내가 키? Thanks to 'heizelnet' 입력해보았는데 아니다.
문제를 보면 brute force 공격은 할 필요없다고 되어있다. (사실 숫자는 5자리까지 해보았는데 아님)
간단한 거 같은데 뭘까...
[ 인고의 시간 ]
이것저것 시도해 보았는데 안됐다.
그래서 해당 문제 풀이 앞에만 슬쩍 봤다...
zip 파일 구조를 알아야 하는 문제였다!
그래서 구글링을 통해서 ZIP 파일 구조에 대해서 공부를 했다. 해당 내용을 정리한 건 바로 전 글에 작성했다.
- 링크 : 2022.06.17 - [포렌식] - [파일 구조] ZIP 파일 헤더 구조
ZIP 파일 헤더에 대해서 간단하게 요약하자면,
ZIP 파일은 기본적으로 PK(리틀엔디안 50 4B 03 04)로 시작하는 File Signature를 가지고 있다.
그 Zip파일로 압축된 파일/폴더에 대한 Local File Header들과 그 헤더들의 정보가 들어 있는 Central Directory File Header와 End of Central Diretory record로 구성이 되어 있다.
아래가 그 모양이다.
Local file Header 1 |
File data1 |
Data description 1 |
Local file Header 2 |
File data 2 |
Data description 2 |
... |
Local file Header n |
File data n |
Data description n |
Archive decryption Header |
Archive extra data Record |
Central Directory |
Local file headers 부분에서 signature는 PK(0x04034b50)이고.
우리가 중요하게 봐야할 게 Flags이다.
So_Simple.zip 파일에서 해당 값이 09 08 이다.
PK 파일은 리틀엔티안이니까 08 09이고 bit로 변환하면 00001000 00001001이다.
해당 비트가 설정 되어 있는 값을 확인하면, 암호화된 파일(encrypted file), data descriptor, 언어 인코딩(language encoding)이다.
Bits 00 : encrypted file
Bits 01 : compression option
Bits 02 : compression option
Bits 03 : data descriptor
Bits 04 : enhanced deflation
Bits 05 : compressed patched data
Bits 06 : strong encryption
Bits 07-0x10 : unused
Bits 11 : language encoding
Bits 12 : reserved
Bits 13 : mask header values
Bits 14-15 : reserved
우리는 암화화된 ZIP 파일을 깨는 게 목적이니까 해당 bit 설정을 없애준다.
00001000 00001001 (08 09) → 00001000 00001000 (08 08)
원래는 리틀앤디안이여서 순서를 바꿔줘야 하는데 08 08으로 똑같으니까 08 08이다.
이제 HxD에서 해당 값을 찾아서 변경해준다.
해당 값을 변경하고 압축을 해제하면, 비번없이 풀린다!
Am_I_key2, Am_I_key3은 답이 아니고
Am_I_key에 들어있는 There_is_key 안에 답이 있다!
위의 키 값도 Base64로 인코딩 되어 있어서 디코딩을 해서 제출하면...
성공!