HackChang

[CodeEngn] Advance RCE L01 문제 풀이 본문

W4RG4M3/R3V3RS1NG

[CodeEngn] Advance RCE L01 문제 풀이

HackChang 2020. 1. 10. 23:09

L01 문제

Basic을 모두 클리어하고, 다음 난이도인 Advance 문제를 풀이해보도록 하겠다.

 

Advance RCE L01

 

이 프로그램은 몇 밀리세컨드 후에 종료 되는가


정답인증은 MD5 해쉬값(대문자) 변환 후 인증하시오

 

 

습관처럼 PEID에 파일을 올려보았다.

 

UPX로 패킹된 것을 볼 수 있었고, 언패킹을 진행했다.

 

PEID에 다시 올려 언패킹이 된 것을 확인할 수 있다.

 

올리디버거에 올려서 분석해보도록 하겠다.

 

Basic의 문제중에 비슷한 문제가 존재했기 때문에 함수를 검색해본다.

아마도 timeGetTime 함수가 있지 않을까 예상된다.

 

예상과 같이 timeGetTime 함수가 존재하는 것을 볼 수 있었고,

함수를 눌러 자세히 보도록 하겠다.

 

해당 함수를 호출하는 모든 부분에 BP를 걸고, F9를 눌러 실행시켜봤다.

 

Basic 문제와 같이 안티디버깅이 적용되어 있었고, 똑같이 우회하였다. 

방법은 Basic에서 소개했기 때문에 따로 소개하지 않겠다.

(안티디버깅 우회)

 

실행을 시키면 해당 부분에서 브레이크가 걸리는 것을 볼 수 있다.

F8을 눌러 한줄씩 실행하다보면 JNB점프문에서 점프하게된다.

JNB  : 왼쪽 인자의 값이 오른쪽 인자의 값보다 크거나 같으면 점프

 

점프한 부분에서 CMP EAX,DWORD PTR DS:[EBX+4] 이 부분에서 시간을 비교하는 것을 알 수 있었고,

 

아래의 덤프창에 ebx+4로 이동하여 비교하는 부분을 알 수 있었다.

7b 33 00 00을 리틀엔디언으로 바꾸게 되면 33 7b이므로,

10진수로 전환하면 13,179가 나온다.

이를 MD5로 해쉬화를 진행했다.

 

인증방식처럼 대문자로 바꾸어 인증하면 클리어가 된다.

 

Comments