CTF | wargame

codegate 2017 / RamG-thunder (우회 리버싱)

nopdata 2017. 3. 10. 19:49


PE파일 하나가 주어진다 실행하면 아래와 같은 메뉴가 나온다.


[ 실행 화면 ]
실행을 시키면 0 ~ 3까지 메뉴가 출력되는데 그 이외에 4를 입력하면 히든 메뉴로 넘어갈 수 있고, 히든메뉴의 let's play hidden flag search game!을 선택하면 5개의 스테이지를 우회하라는 메시지가 나온다.
1, 5번 스테이지는 key를 입력받고, 2,3,4번 스테이지는 자동으로 넘어가게 되어 있다.

stage1이 시작되면 프로그램 내에 저장되어있던 데이터를 로드한다 이 데이터는 마지막에 파일로 추출이 된다.
stage1의 key값은 input 값의 연산을 걸친 결과가 MVYLXYVA..가 되어야 한다. 앞에서 5자리만 맞추면 되기 때문에 MVYLX만 추면 되며 연산은 MVYLX <-> ymaya이므로 yamya을 입력해주면 된다.
key 확인 후 stage2로 넘어가는 과정에 디버깅 탐지 루틴이 있는데 우회를 해 주어야 한다.

[ stage 1 ]


stage2는 stage4와 같으며 GetAdaptersInfo는 네트워크 정보를 가져오는 함수인데 이 값은 디버깅 상의 비교 부분에서 직접 바꾸어 주었다.

[ stage 2 ]


stage3는 RegOpenKeyExW, RegQueryValueExW를 이용해 레지스트리 HKEY_CURRENT\Hellow\hellow_FishWorld 값이 존재하는지 여부를 판별한다.
Hellow 키가 없으면 fish로, hellow_FishWorld값이 없으면 wor로, 모두 만족하면 hel로 분기하며, 모든 조건을 만족시켜 주어야 하기 때문에 레지스트리 생성을 해 주면 된다.

[ stage 3]


stage4는 stage2와 동일하다.

[ stage 4 ]


stage5 시작전 디버깅 탐지는 우회 해주어야 하고 stage5는 stage1과 같이 key값을 찾으면 된다. 사용 함수가 같으므로 같은 방법으로 찾아주면 된다.

[ stage 5 ]

stage 1 ~ 5의 조건들을 모두 만족시켜주면 나타나는 데이터는 png파일이며 이 안에 키 값이 존재한다.

[ flag ]