상세 컨텐츠

본문 제목

[Write-up] CodeEngn Advance RCE 15

Reversing Write-Up/03.CodeEngn Advance

by RACC8N 2020. 2. 11. 22:48

본문

문제 : Name : 'CodeEngn.com' 일때 Serial은 무엇인가

 

풀이 : 

Unlock Code를 입력해야만 Name과  Serial을 입력할 수 있다.

 

디버거를 실행시켰을때 OEP를 쉽게 찾을 수 없었다. 함수 목록을 확인해 보자.

 

입력한 문자열을 얻어오는 함수 GetDigItemTextA 함수를 찾았으며 401095로 가면 볼 수있다.

 

바로 주소로 가봤지만 원하는 함수는 보이지 않았다.

 

디버거를 붙여서 F9를  두 번 정도 눌러 실행시킨 후 해당 위치를 가보니 원하는 함수를 얻을 수 있었다.

 

프로그램이 실행되면 그 이벤트로인해 위치에 접근할 수 있는것 같다.

 

cmp eax, 0x7 명령어를 보니 Unlock Code는 8자리 이상이어야 한다.

 

Unlock Code 개수를 8이상으로 맞춰주고 밑으로 내려가면 call 4011E8 함수를 만날 수 있다.

 

4011E8로 가보면 함수의 시작 프롤로그가 있지않고 이상한 명령어가 있다.

 

계속 실행시키면 정상적으로 동작하지않아 프로그램은 죽게된다.

 

Unlock Code 부분부터 다시 분석 해보자.

 

call 4012CD 함수 먼저 보겠다. 

 

연산을 통해 0x403318에 값을 쓰게 된다.  이 경우 0x50이 들어가있다.

 

다음은 call 4012E7함수를 분석해보자.

 

이 함수는 7B번 연산을 하게된다. 4011C1부터  + 1~7B까지  0x403318에 있는 값 0x50과 xor 하게된다. 

 

따라서 아까 프로그램을 죽게했던 함수 4011E8역시 이 함수로인해 조작이 가능하다.

 

함수의 시작 프롤로그인 push ebp 값 (55)를 만들어보자.

 

초기의 4011E8의 값은 70이다. 따라서 70과 XOR 했을 때 55가 되는 값은 0x25이다.

 

403318 값을 0x25로 바꾼 후 call 4012E7함수를 실행시킨 결과, 4011E8에 정상적으로 함수 시작 부분이 생겼다.

 

call 4011E8를 정상적으로 호출할 수 있었고, 호출결과 밑에 CodeEngn.com에대한 Serial값이 생성되었다.

 

관련글 더보기

댓글 영역