RITSEC_CTF_FreeZe

2018-11-26

RITSEC CTF 2018에 나온 리버싱 문제 Freeze에 관하여 작성합니다.

개요

RITSEC CTF 기간에 1~2시간 동안 문제를 분석해보았지만, 별 다른 접근법이 생각이 나지 않아 포기 했던 문제.

외국 애들이 쓴 Write-up이 올라오자 마자 직접 확인해보며, 공부 했습니다.

핵심은 결국 “어떤 실행 파일인가?” 와 “어떤 디컴파일러 도구를 사용해야 하는가? “

도구

이 문제를 푸는데에는 총 3가지 도구를 활용합니다.

3개 중 1개는 사실 별 필요 없는 도구이지만, 다른 CTF Write up에서도 간간히 쓰이는 것이 보여, 공부할 겸 사용하였습니다.

  • binwalk = 바이너리, 펌웨어 추출 및 분석 툴
  • pyi-archive_viewer = 파이썬으로 만들어진 파일의 디컴파일러 및 분석 도구
  • uncompyle6 = pyc 파일을 -> py 파일로 바꿔주는 도구

풀기

대회 기간 당시, 문제 페이지에 들어가면 아래 사진과 같습니다.

두개의 파일 존재 (main과 libpython~)

두개의 파일을 같은 공간에 두고, 실행! ==> 숫자가 나옵니다 ( 실행을 계속 하다 보면, 숫자가 커진다는 것을 알 수 있고, 시간과 관련되어 있다는 것을 알수 있습니다.)

파이썬 라이브러리와 같이 실행한다는 점에서 main은 파이썬으로 제작되었다는 것을 알 수 있습니다.

이를 확인 하기 위해 “binwalk”를 사용합니다. (파이썬으로 제작되었다는 것이 너무 확실하기 때문에… 사실 쓰지 않아도 됩니다.)

binwalk를 사용하면…

binwalk 명령어에 e 옵션을 사용하여, 특정 파일의 내부 안에 있는 것들을 모두 추출합니다.

.extraced 형식의 폴더에 추출된 파일이 모두 담겨져 있습니다.(zlib = 압축 관련 파일 , 나머지 = 데이터 더미)

strings 명령어를 통해 4FABF와 같은 데이터 더미들을 살펴보면… 여러가지를 보실 수 있습니다.

코드도 보이고, 파이썬을 썼다는 흔적도 보입니다.

(플래그 관련된 것도 보이지만, 직접적으로 보이지는 않기 때문에 여기서는 알 수 없습니다.)

이제 다른 도구인 pyi-archive_viewr를 사용할 때입니다.

archive_viewr는 파이썬으로 이루어진 실행 파일의 구조 파악 및 내부 구조 파일을 추출하는데 사용이 됩니다. (Pyinstaller 설치하면 저절로 설치 됩니다.)

viewr를 통해 main을 보시면, 위의 그림과 같이 6개의 내부 구조가 보이게 될 것입니다.

이중 딱봐도 핵심인 것 처럼 보이는 main을 추출하면 됩니다. (.pyc 파일로 추출하여야 합니다. main -> main2.pyc 처럼)

엔터를 치시면, 사용법이 나오니 그대로 진행하시면 됩니다. 다만 추출한 파일을 조금 수정 하실 필요가 있습니다.

pyc로 추출하였지만, 완전한 pyc 파일이 아닙니다. 헤더 부분이 손상? 일수도? 아니면 원래 없던 거일수도? … (뒤에 uncompyle6 도구를 사용하여야 하는데, 헤더가 잘못되었다고 뜹니다.)

pyc 파일의 가장 앞부분에 \x03\xF3\x0D\x0A\x00\x00\x00\x00 를 추가!!!! 시켜 주시면 됩니다.(기존 hex값을 바꾸는것이 아니라, \x03\xF3\x0D\x0A\x00\x00\x00\x00 값을 추가 시키는 것입니다.)

new2.pyc가 정상적인 헤더를 가지는 pyc라고 한다면, uncompyle6 명령어를 사용하면, 이제 우리가 흔히 보는 파이썬 코드를 보실 수 있습니다.

그러면 이 파이썬 코드를 flag를 볼 수 있도록 고쳐서 그냥 실행시키면 됩니다.

위의 코드에서는 == -> !=로 수정한것입니다.

결론

여러 도구들을 알게되서, 공부가 되었다.