본문 바로가기

CodeEngn

[CodeEngn]Advance RCE 02 Write Up

https://codeengn.com/challenge/rce_advance/

 

CodeEngn [코드엔진] 리버스엔지니어링 컨퍼런스

CodeEngn Challenge 리버스엔지니어링을 어느정도 접한 분들을 위한 중급 단계 Manager >> Auth | Checkin List | Hall of Fame Challenge >> Basic | Advance | Pro | Malware | Crypto | Mobile RCE Advance Level Description Author Download Adv

codeengn.com

 

문제 설명

문제에 대한 설명이다

딱히 설명이 되어있지 않아서 바로 파일을 다운로드하여 열어보았다

검은 화면만 뜨고 얼마 지나지 않아 종료되는 것을 확인하였다

일단 upx 패킹이 된 경우가 많았으니 습관처럼 detect it easy를 통해 확인을 해보았다

이번엔 따로 패킹이 되어있지 않아 바로 분석을 하면 될 것 같다

올리디버거로 열어서 F9을 눌러보니 바로 프로그램이 종료되는 것을 발견하였다

이로 인해 F9가 아닌 F8을 통해 실행을 해도 어떠한 함수에서

종료되는 곳이 존재하는지 자꾸 종료되어 인내심을 가지고 F7을 활용해보기로 하였다

F8을 눌렀을때 저 함수를 실행하니 종료되어 F7을 통해 들어가봤더니

이러한 모습이 보였고, 같은 실수를 반복하지 않기 위해 call 부분이 보이면

일단 breakpoint로 표시를 하였다

( 혹여나 종료되더라도 F9을 통해 빠르게 반복하기 편리하다 ) 

이와 같은 과정을 반복하다보면, 

이 부분이 나오게 되는데 cmp ax, 1171 명령어로 인해 반복을 하게 되므로 

eax를 1171로 설정하여 우회하면, 밑과 같은 화면이 나온다

이후에도 F8을 눌러서 실행하다보면 

이번에는 cmp ebx, eax 문구로 인해 반복하게 되므로 이번에는

레지스터 조작 외 다른 방법 중 하나인 F4 명령어를 통해 밑 주소로 이동하자

그러면 지금과 같은 화면을 만날 수 있다

Error

그러나 call eax 부분에서 이러한 오류가 발생하였다

그래서 다른 방법으로 시도해보고자 문자열을 먼저 찾아보기로 하였다 

정상적으로 실행되었다면 보였을 것으로 추정되는 문자열이 발견되었다

그래서 Enter Password 부분에 breakpoint를 걸고 실행해보았더니 

아까와 같은 이유인지 eax의 값이 0으로 설정되어 저 부분에서 실행이 되지 못하는 것을 확인하였다

혹시나 싶어 아까 임의로 레지스터를 조작한 부분을 우회하기 위해 jnz 명령어를 je로 바꾼뒤

저장하여 실행하였더니

정상적으로 화면이 출력되는 것을 보았다

더보기

 첫 실행 시 정상적으로 화면이 뜨지 않는 부분은 문제 풀이 후 구글링을 통해 찾아보니 dll 파일을 불러오면서 나타나는 오류인듯 하다 윈도우 버전에 따라 작동방식의 차이가 존재하므로 다른 패치 없이 실행을 하여 확인하고 싶다면 가상환경 ( Window 7 이하 ) 을 이용하거나 하위 버전의 윈도우를 사용하면 큰 문제 없이 실행이 된다

드디어 원래의 목표였던 password 입력 문자열까지 찾아왔다 call 004018440 함수를 실행하였더니

Enter Password: 문자열이 보이는 것으로 보아 print 함수로 추정하고 밑 함수를 실행하였다

F8을 눌러도 실행이 되지 않아 프로그램 실행창에 아무 문자열이나 입력하였더니

다음과정으로 넘어가는 것을 확인하였다 ( scanf 함수로 추정 ) 

그 후에 어떠한 반복문을 만나게 되는데 밑의 xor 문구를 클릭하여 F4를 통해 빠져나가도록 하자

그 후 call edx에 의해 프로그램이 종료되는 것을 확인하여 breakpoint를 걸어주고

F7을 통해 분석해보도록 하자 

그러면 이렇게 비교하는 부분이 나오게 된다 이를 통해 password를 확인하는 듯 하다 

각 숫자를 아스키코드로 변경하여 확인하면, CRAAACKED! 가 나온다

프로그램을 실행하여 이 답을 입력하였더니

정답이다!

'CodeEngn' 카테고리의 다른 글

[CodeEngn]Advance RCE 06 Write Up  (5) 2024.10.31
[CodeEngn]Advance RCE 05 Write Up  (8) 2024.10.30
[CodeEngn]Advance RCE 04 Write Up  (0) 2024.09.11
[CodeEngn]Advance RCE 03 Write Up  (1) 2024.09.11
[CodeEngn]Advance RCE 01 Write Up  (2) 2024.09.07