HackCTF Forensics Writeup (Secret Document)

문제

image

flag라는 이름을 가진 압축파일을 준다.


풀이

image

 

다음과 같이 Flag.zip을 압축 해제하려고 하자 비밀번호를 입력하라고 한다. 따라서 BruteForce어택을 백그라운드에 실행해놓고 다른 방법이 더 있나 찾아보기로 하였다.

 

image

 

그러던 중 파일 건너뛰기를 하고 압축을 해제했더니 암호가 걸린 flag.txt를 제외한 hint1.txt와 hint2.txt는 압축이 정상적으로 해제되었다. 이 힌트를 읽어보자.

 

image

 

우선 첫번째 힌트이다. Brute-Force NOOOOOOOOOOOOOO!라며 무작위 대입 공격을 사용하는 것이 아님을 알려준다. 나처럼 백그라운드에 돌려두었다면 곱게 켜서 다시 종료시켜주자.

 

image

그리고 두번째 힌트는 과연 패스워드가 존재한다고 생각하냐? 라며 패스워드로 푸는 것이 아니라는 힌트를 준다.

그럼 이제 압축파일의 파일 구조를 찾아보자.

 

압축파일의 암호화 기법은 Central Directory 구조의 Flags 필드를 공부해야한다. ( 그냥 압축파일에 대해 싹 다 공부하자 이김에 ) Central Directory 구조의 Flags 필드는 총 16개의 플래그 값을 가지고 있으며 Bit 00 번째 값이 암호화 된 파일을 나타낸다고 한다.

 

image

 

010editor는 파일 포맷을 기본적으로 지원해주기 때문에 볼때 한결 편하다.

대충 보라색 부분부터 Central Directory 영역이라고 보면 되며, 드래그 한 09 08 부분이 Flags 필드이다.

이 09 08 은 비트로 표현하기 위해 리틀언디언 방식으로 표현하면 08 09 이다. 또한 08 09 를 비트로 나타내면

 

image

 

1000 0000 1001 이며 암호화 부분인 00 번째 bit가 1로 활성화 되어 있는것을 알 수 있다.

 

image

 

따라서 2^0 = 1이니 1을 빼준 값을 보면 암호화 비트가 풀어진 바이트를 얻을 수 있다. 이는 헥스값으로 0808이다.

비트로는 1000 0000 1000 이다.

 

image

 

따라서 헥스값을 0808로 바꾸어 주거나 밑에 010editor에서 지원하는 기능 중 하나인 Inspector 에서 Short 부분을 2056으로 바꾸어주면 된다.

 

이렇게 한 뒤 저장하고 압축을 해제하면

 

image

 

flag.txt를 포함하여 압축이 해제되는 것을 볼 수 있다.

 

image

Flag!!