본문 바로가기

Reversing/CodeEngn

[CodeEngn] Advance RCE L09풀이

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

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

ch.codeengn.com


그림 1

문제에서 password를 물어보고 있고 name이라던가 serial 같은 값은 주어져 있지 않았다.


일단 실행시켜보니 아래와 같이 username과 password를 입력하라고 해서 둘 다 codeengn으로 넣어봤더니 옳지 않다고 한다.

그림 2

먼저 exeinfo로 파일을 확인해보았다.

그림 3

특별한 부분은 없어서 바로 x32디버거로 확인해보았다.


파일을 열고 바로 문자열 찾기를 하면 쓸모없는 부분까지 너무 많이 나와서 실행을 시킨 상태로 문자열 찾기를 다시 확인해주었더니 아래와 같이 성공 flag, 실패 flag, 입력란, DonaldDuck(??) 등이 나오는 것을 볼 수 있었다.

 

그림 4


일단 성공 flag 부분으로 이동해서 흐름을 확인해보았다.

 

그림 5

그림 5에서 흐름을 확인해보니 test와 cmp에서 모두 점프하지 않아야 성공문으로 갈 수 있다.

 

그림 6

일단 여기까지 확인하고 다시 파일을 실행시켜서 계속 진행 버튼을 눌렀더니 그림 6처럼 username와 password를 입력 받는 부분으로 이동하였고, F8을 눌러서 한 줄씩 진행하였더니 아래 그림과 같은 위치에서 username을 입력 받는 것을 알 수 있었다.

그리고 입력한 username 값은 69440C에 저장되고 있었다.

 

그림 7

그리고 더 내려가다 보면 함수 호출을 통해 password를 입력 받고

그 후에 6913FF 위치에서 691000 함수를 호출한 후에 실패 FLAG를 출력하고 있는 것을 확인할 수 있었다.

691000 함수에서 username과 password에 대한 비교문이 있을 것으로 예측이 되므로 해당 부분으로 이동해보았다.

 

이동해보니 아래의 그림 8 같은 부분을 볼 수 있는데 그냥 줄글로 보기에는 불편해서 분석할 때는 그래프 모드로 확인하였다.

그림 8

한 줄씩 확인하다 보니 앞에서 입력한 username(ABCDEFG)는 699440C에 저장되는 것이 맞고

이 값을 693218에 저장되어 있는 “DonaldDuck”이라는 문자열과 한 글자씩 비교하고 있다.

여기에서 username이 DonaldDuck이 되어야 한다는 것을 알 수 있었다.  

 

일단 username을 DonaldDuck으로 하고 password를 1234로 했더니 전에는 안보이던


“ I can’t believe you felt for that! xD “라는 문구가 보이는 것을 알 수 있다.

그림 9

그리고 캡처로 가지고 오지는 않았는데

691000 함수에서 내려가다 보면 계속 PUSH 하는 부분이 있는데, 그 부분이 위의

“ I can’t believe you felt for that! xD “ 를 가져오는 부분이고 한 글자씩 출력이 된다.

(보니까 실패 FLAG도 반복문을 돌면서 한 글자씩 가져온다. 복잡해 보이려고 그렇게 한 건가,,?)

 

일단 다시 691000 함수의 윗부분으로 돌아가서 확인해보니

내가 입력한 username은 eax에 담기고 DonaldDuck은 ecx에 담겨있다.

해당 부분을 비교하여 username을 확인한다.

 

그림 10

그리고 조금 더 내려가서 691043 위치를 보다 보니 그림 10처럼 69442C에 4D2라는 값이 들어있는데,

이걸 그냥 넘겨서 좀 헤맸다,,

이게 내가 입력한 password인 1234의 hex 값이고 이 값이 eax에 저장되고 있다.

 

그림 11

그리고 그 두 줄 아래에서 cmp를 통해 eax와 ecx를 비교하고 있는데 이때 ecx에 있는 값이 88228F라는 값이다.

해당 값이 DonaldDuck에 대한 password일 것이라고 추축하고 10진수로 변환해서 사이트에 flag를 입력하면 인증이 된다!

(참고로 실행파일에서 성공 flag를 보기 위해서는 위에서 본 성공 flag로 가는 두 개의 점프문을 변경해주어야 한다고 한다.)

그림 12

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

[CodeEngn] Advance RCE L10풀이  (0) 2021.11.13
[CodeEngn] Advance RCE L08풀이  (2) 2021.11.13
[CodeEngn] Advance RCE L07풀이  (0) 2021.11.13
[CodeEngn] Advance RCE L06풀이  (0) 2021.11.13
[CodeEngn] Advance RCE L05풀이  (0) 2021.11.13