old

Sharif 2016 / forensic 200 Pretty Slim (zip 파일 복구, kgb 압축)

nopdata 2017. 3. 30. 00:03
Keyword : zip 파일 복구

파일이 하나 주어진다.

hxd로 열어보면 위 같이 나오는데 51 4b 03 04 시그니쳐로 시작하는 프로그램은 없다. 단, 밑 부분을 보면 zip파일의 압축 시그니쳐인 PK(50 4b)를 확인할 수 있다.
즉, zip파일 이지만 일부가 깨져 있다는 것을 알 수 있다.

시작부의 QK는 PK로 변환하고 나머지 부분도 파일 헤더에 맞게 해주면 된다.
zip 파일 구조의 경우 Local File header와 Central File header, End File header가 존재하는데 위에서 보면 End File header가 존재하지 않는다. 이를 고려하여 다시 작성을 해 주면된다.
write up에서는 그 과정을 툴을 이용하여 풀었다. zipRepair라는 프로그램이다.

압축을 풀면 flaggggg라는 파일 하나가 주어진다.

hxd로 열어보면 위와 같은데 KGB in Kremlin28로 시작한다. kremlin은 러시아의 구조물이고 kgb는 러시아의 특수부대로 알고 있다.
여기서 중요한건 kgb인데 kgb도 압축 알고리즘의 일종이다. 메인 제작자의 사이트는 닫혀있지만 압축률이 꽤 좋다고 한다.

다음은 파일을 kgb로 압축을 하고 hxd로 열었을 때의 구조이다.

순서대로 시그니쳐 KGB_arch, 압축 버전 -3, 해제 후 파일크기 7, 구분자 \t을 의미한다.
그 다음으로 온 asdfasdfasdf는 압축 해제 후 파일의 이름이 된다.

위에서 보면 KGB in Kremlin28후에 바로오는 값은 \x09 즉, \t이 되며 그 다음으로 flagggggg라는 문자열이 온다. 따라서 kgb압축 형태에 맞추어 주면 된다.
문제는 압축 해제 후 파일의 크기를 알 수 없다는 점인데, 형태에 맞추어 보면 일단 3자리 라는 것을 알 수 있다.
그래서 그냥 크기값을 크게 주게 되면 압축을 해제하고 부족한 나머지는 쓰레기 값으로 추가되게 된다.

위에 맞추어서 형태를 kgb로 바꾸고 압축을 풀면 png이미지 파일 하나가 주어지게 된다.
qr코드 사진이 나오고 그를 확인하면 답을 얻을 수 있다.


Answer : SharifCTF{77245d65f9e5849b8355960947517625}