본문 바로가기
Rev/Write-up

RedpwnCTF 2020 - i-wanna-find-the-flag

by zooonique 2021. 3. 9.
반응형

이 문제는 exe파일을 분석하는 방법론을 어느정도 가르쳐준 문제라고 생각한다. 

 

사실 리버싱을 하지만, 정확하게 PE파일이 어떻게 메모리를 로드하고 실행되는지 제대로 모르는데 이 반성의 기회를 살려서 공부를 해야겠다... (+악성코드 분석도)

 

다시 풀이로 돌아와서 프로그램을 실행시키면, 다음의 화면이 뜬다.

 

Shift키를 누르면 실행이 되고, 게임을 저장하거나 할 수도 있다. 

 

 

인게임화면이다. 이 화면에서 점프를 하여 저 구름? 안으로 들어가면 슈팅게임? 같은것을 할 수 있다.

 

 

근데 이거 뭐 깨는 법을 모르겠다. 이걸 깨야되는 건지도 모르겠고... 치트엔진 문제인가 생각했는데 그것도 아닌 것 같다.

 

IDA를 통해 분석을 시작해본다.

 

일단 WinMain함수부터 살펴보자.

 

 

GetVersion 함수로 OS의 버전을 받아오고,

 

GetModuleHandleW 함수로 특정 모듈에 대한 모듈 핸들을 검색한다. 모듈은 호출프로게스에 의해 로드되어 있어야 한다. 인자로 들어가는 모듈은 dll이나 exe이다. 매개변수가 NULL일 경우에는 호출 프로세스(*.exe)를 생성하는데 사용된 파일의 핸들을 반환한다.

함수가 성공적으로 실행을 완료하면 특정 모듈의 핸들을 반환한다. 

 

GetProcAddress 함수는 GetModuleHandleW에서 얻은 dll의 핸들값(v6)을 받아온다. "HeapSetInformaion"은 찾고자하는 함수의 이름으로 주소값을 반환한다. 

 

그 후 흐름대로 Init 함수를 분석해보면, GetResource, FindResourceA, LoadResource를 활용하여 리소스영역에서 데이터를 불러오는 것을 확인할 수 있다.

 

여기서는 사실 팁을 얻었는데, 리소스영역에서 데이터를 가져오는 경우를 잘 살펴보는 것이 중요하다고 한다. 악성코드 분석을 할때도!

 

어쨌든 팁을 받은 부분은 CABINET 부분이다.

 

사실 저 부분이 왜 의심스러운지 눈치채는것은 힘들었다. 하지만, 앞으로 어떤 프로그램을 분석할 때 리소스영역에서 데이터를 불러오고 해당 데이터들이 너무 크다면?! 의심해보자! 라는 교훈을 얻을 수 있었다.

 

풀이로 돌아와서, 리소스영역에서 데이터를 가져오는것이 의심스러운 것을 확인했으니

리소스해커라는 툴을 활용하여 리소스 영역을 살펴보기로한다.

 

CABINET

 

RUNPROGRAM

 

CABINET이 정말 크기가 크다. 

 

이것을 보니, ac_파일의 파일 시그니처인 것을 알 수 있다. 

 

ac_파일이 뭔지 몰라서 찾아봤다. GNU Autoconf가 제작 한 자동 설정 스크립트이다. 여러 종류의 Posix와 유사한 시스템에 맞게 소프트웨어 소스 코드 패키지를 자동으로 구성합니다. 프로그램이 특정 시스템을 실행하는 데 필요할 수 있는 각 기능에 대한 소프트웨어 패키지를 테스트하여 작성된다. 그런 다음 Autoconf는 패키지에 필요한 시스템 기능 목록 작성한다.

 

Autoconf도 뭔지 몰라서 찾아봤다. Autoconf는 쉘 스크립트를 만드는 도구이다. 이 도구를 사용하여 자동으로 소프트웨어 소스 코드 꾸러미를 구성하여 여러 종류의 유닉스 계열 시스템에 적요할 수 있다.

 

POSIX는 Portable Operating System Interface의 약자로 이식 가능 운영 체제 인터페이스이다. 즉 서로 다른 UNIX OS의 공통 API를 정리하여 이식성이 높은 유닉스 응용 프로그램을 개발하기 위한 목적으로 IEEE가 책정한 애플리케이션 인터페이스 규격이다.

 

이 CABINET 리소스파일을 추출하여, ac_파일로 저장하고 내용을 확인해봤다.

 

 

압축을 풀릴까 했는데, 진짜 풀렸다. ac_파일은 압축을 풀 수 있는건가?

 

 

나는 YoYoYo_Engine.exe를 분석해야 했는데, 힌트를 보니 data.win을 분석해야했다.

 

 

win은 foxpro 창 설정이다. foxpro 창 정의 및 상태를 포함한다. 창 설정 백업에 사용된다. RESTORE WINDOW 명령을 사용하여 복원 할 수 있다. FREE DOWNLOAD File Viewer Plus에서 300개가 넘는 파일 형식을 연다. WIN파일을 여는 프로그램.

이게 무슨 말이지?

 

구글링해보니까 YoYo Games의 GameMaker Studio 프레임 워크로 만든 *.win 아카이브에서 파일을 추출하기 위한 스크립트가 있다고 한다. 그건 잘 모르겠고, 승현이가 가르쳐준 툴을 사용하자.

 

https://github.com/fjay69/UndertaleTools

 

fjay69/UndertaleTools

GameMaker data.win unpacker/packer. Contribute to fjay69/UndertaleTools development by creating an account on GitHub.

github.com

 

위 파일들로 data.win파일을 분석해보니까 게임에 필요한 데이터파일들이 이 안에 다 있는 것 같다.

 

그리고 플래그도 있다.

 

반응형

'Rev > Write-up' 카테고리의 다른 글

justCTF - debug me if you can  (0) 2021.03.10
Tenable CTF 2021 - Play Me  (0) 2021.02.24
Tenable CTF 2021 - Forwards from Grandma  (0) 2021.02.23
Trollcat CTF - Solver  (0) 2021.02.17
RaziCTF2020 - Protected Conditions  (0) 2021.01.29