본문 바로가기

【 리버싱 】/[ CodeEngn ] Basic RCE 문제 풀이

[ CodeEngn ] Basic RCE 4 문제 풀이

URL : https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

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

ch.codeengn.com

4번 문제이고 밑 파일을 다운로드해서  압축을 풀어주자

이 문제는 디비거를 탐지하는 함수 이름을 찾는 것이다.

 

일단 04.exe 파일 실행시켜 보자

그러면 '정상' 이라는 문자가 출력이 된다.

 

'OllyDbg' 도구를 이용해 04.exe 파일을 뜯어보자

자 그러면 바로 문제를 풀어보자

 

03 문제에서 함수를 찾는 거였다.

 

그럼 똑같이 함수를 찾아보자

03 문제 포스팅에서 함수를 쉽게 찾는 방법이 있었다.

어셈블리코드 창에다가 우클릭 -> Search for -> All intermodular calls 를 클릭 해준다.

찾아보니 'IsDebuggerPresent' 가 수상하다 

더블 클릭해서 들어가 보자

<F2>을 눌러 'break point'를 걸어주자

그리고 <F9>을 누르면 'break point'에 멈추게 된다

 

그리고 실행시키면

EAX 값이 1로 되는것을 확인 할 수 있다.

(EAX값이 왜 1로 되는지 자세히 보고 싶으면 'break point' 걸었던 곳에 <F7>을 눌러 내부로 들어가서 보면 된다.

그리고 실행 시키면 두 연산자를 비교 한다는 것을 알 수 있다.

따라서 JE를 만나 두 값이 같지 않으므로 점프하지 않기 때문에 '디버깅 당함'이라는 문자가 출력되는 걸 확인할 수 있었다.

 

그러면 EAX 값을 바꾸거나 JE코드 등 해결방법이 많다

 

그중에서 우린 EAX 값을 바꿔보자

처음 EAX 값을 확인해 보면 0 인걸 확인 할 수 있다.

'IsDebuggerPresent'로 넘어가면 1로 변경되었음을 알 수 있기에

1로 바뀐 EAX 값을 0으로 바꿔주면 쉽게 해결된다.

 

OK를 눌러 바꿔주고 

계속 실행시켜보면

값이 같으므로 점프한다는 걸 확인할 수 있다.

그러면 이렇게 '정상'이라는 문자가 출력된다.