본문 바로가기

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

[ CodeEngn ] Basic RCE 5 문제 풀이

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

 

CodeEngn.com [코드엔진]

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

ch.codeengn.com

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

실행 파일 하나 보인다.

일단 더블 클릭해서 실행해 보자

보면 이름/시리얼 키를 입력하는게 보인다. 

'Register now !'를 누르게 되면 "잘못된 시리얼, 다시 시도하십시오!" 라고 뜬다.

 

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

 

그러면 저번 문제와는 다르게 'PUSHAD' 를 볼 수 있다.

즉 UPX 패킹이 되어 있을 확률이 높다는 뜻이다.

 

PEiD 도구를 이용해 확인해 보자

UPX로 패킹 되어 있는 걸 확인할 수 있다.

그러면 UPX 패커로 풀어주자

그러면 File size가 증가한 것을 확인할 수 있다.

 

그리고 다시 'OllyDbg'로 열어보면

'PUSHAD'가 아닌 'PUSH'로 바뀐 것을 확인할 수 있다.

 

저번 시간에는 함수 찾는 거였다면 이번에는 문자를 찾아보자

어셈블리코드 우클릭 -> Search for -> All referenced text strings

이렇게 나오는 걸 확인할 수 있다

 

바로 보자마자 실패 문구, 성공 문구 등을 확인할 수 있었다.

정답이 나온 것 같지만 풀이를 계속해보도록 합시다.

 

우선 실패 문구를 더블클릭하여 들어가 줍시다.

 

그리고 위로 올라다가 보면

 

여기가 우리가 입력한 이름과 'Registered User'가 맞는지 확인하는 것 같습니다.

 

정확하게 보기 위해 실행 해보겠습니다.

 

<F9>를 누르고 이름을 아무거나 입력해 봅시다.

확인 결과 ZF가 0인 걸 알 수 있었고 밑 JNZ를 만나 시리얼 키를 확인하지 않고 바로 점프하는 걸 확인할 수 있었습니다.

왜? 이미 이름 부분에서 틀렸기 때문이지

 

그러면 시리얼 키를 확인하지 않기 때문에 실패 문구를 확인할 수 있다.

 

다시 이름을 입력하는 곳으로 돌아가서 보면

이름은 'Registered User'인 걸 확인할 수 있었다. (대소문자 주의!)

그러면 이름을 입력하고 'Register now!'를 눌러보자

그러면 아까와 다르게 ZF가 1인 걸 확인할 수 있다.

따라서 점프를 하지 않는다.

계속 실행하다 보면 시리얼 키가 맞는지 확인하는 코드를 볼 수 있다.

우리가 입력한 시리얼이 맞지 않기 때문에 ZF가 0인 걸 확인할 수 있었다.

따라서 점프하므로 실패 문구를 확인할 수 있었다.

 

그러면 아까 이름을 알아냈듯이 시리얼 키도 알아내서 정답을 입력해 보자

정답을 입력하고 'Register now!'를 눌러보자

그러면 우리가 입력한 'Registered User' 이름을 확인 결과 똑같다.

따라서 ZF가 1인 걸 알 수 있기 때문에 점프하지 않는다.

이제 시리얼 키를 또 확인 해야한다.

우리가 입력한 'GFX-754-IER-954'를 확인 결과 똑같다.

따라서 ZF가 1인걸 알 수 있다.

따라서 점프 하지 않는다.

그러면 성공 문구가 나오면서 종료된다.