본문 바로가기

Reversing/CodeEngn

[CodeEngn] Basic RCE L06풀이

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을 현업 실무자들과 함께 운영하고 있는 비영리 커뮤니티입니다.

ch.codeengn.com


그림 1

이 문제에서는 친절하게 UNPACK 하라고 되어있고, 05번과 똑같이 시리얼 값을 찾으라고 하고 있다.

OEP 값은 디버거로 실행시키면 가장 처음에 멈춰있는 주소일 테니, 우리는 시리얼 값만 구하면 된다.

 

FLAG는 OEP+Serial이라고 한다.

 

일단 peinfo에 넣어보았더니 upx 언패킹을 진행해야 한다고 한다.

 

그림 2

5번과 똑같이 upx 툴을 사용하여 cmd 창에서 언패킹을 수행해주었다.

 

그림 3

일단 파일을 실행시키면 어떤 값을 입력하라고 되어있다.

 

그림 4

 

X32 디버거로 분석해보았다.

 

그림 5

실행을 시켜보니 위의 그림처럼 해당 부분에 멈춰 있다.

즉, OEP 값이 00401360임을 알 수 있다. 이제 시리얼 값만 찾으면 된다.

 

문자열검색을 해보았더니, GOO JOB이라고 되어있고, 맨 위에 알 수 없는 문자열이 있다.

사실 누가 봐도 저 이상한 값이 시리얼 키이긴 하다,,,

일단 해당 위치로 이동해보았다.

 

그림 6
그림 7

422A30이라는 위치에 위에서 본 이상한 값이 들어가 있고, 바로 401290이라는 함수를 호출한다.

그 후에 eax와 eax를 비교하여 같지 않으면 error, wrong serial로 점프한다.

 

여기에서 디버깅을 해보았는데, 1234567890이라는 의미 없는 문자열을 입력하고 문자열 검색을 해보니 두 곳에 저장되는 것을 확인할 수 있었고, 두 값을 비교하는 것이라고 추측할 수 있었다.

 

그림 8
그림 9

 

그럼 시리얼 값이 “AD46DFS547”임을 알았고, 위에서 OEP 값이 00401360이므로

 

[ 00401360AD46DFS547 ]가 FLAG가 된다.

'Reversing > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L08풀이  (0) 2021.08.18
[CodeEngn] Basic RCE L07풀이  (0) 2021.08.18
[CodeEngn] Basic RCE L05 풀이  (0) 2021.08.01
[CodeEngn] Basic RCE L04풀이  (0) 2021.08.01
[CodeEngn] Basic RCE L03풀이  (0) 2021.08.01