문제입니다.

실행화면입니다.

확인을 누르면 계속 MessageBox가 뜨며 숫자가 1씩 증가하며 출력됩니다.

UPX로 패킹이 되어있습니다.

언패킹을 진행하고 다시 PEID로 살펴보겠습니다.

알 수 없다고 뜹니다.

이제 분석을 해보겠습니다.

먼저 안티디버깅 함수가 있는지 확인해 보았습니다.

IsDebuggerPresent 함수가 보입니다.

들어가 보겠습니다.

40E969부분을 JE 로 바꾸어 우회하겠습니다.

F8을 눌러 MessageBox가 출력되는 곳마다 타고 들어가보았습니다.

순서 : 40aef0 -> 40bcc0 -> 45e071

찾았습니다.

이때 스택상황을 보면 아래와 같습니다.

ebp에는 245f960가 들어있고 이 주소에는 숫자 2가 들어있을 것입니다.

문자 '2'가 들어있는 것을 확인할 수 있습니다.

즉, 이 위치는 증가한 값이 저장되는 위치가 되겠습니다.

그럼 MessageBox을 nop(0x90)을 만들면 MessageBox 출력없이 245f960 위치에 증가된 값을 지속적으로 쓸것이므로 nop을 만들어 보겠습니다.

45E07D에 브레이크 포인트를 건 이유는 반복문을 다 돌고나면 EBP와 EBP가 가르킨 주소가 다른 값으로 덮어쓰기 때문에 브레이크 포인트를 걸고 F9를 눌러가면서 테스트를 해야합니다.

세팅을 하고 실행을 해보니

EBP가 1FF960이 되었습니다.

EBP의 주소는 프로그램 실행시 마다 변동이 있었습니다.

dump창을 통해 확인해본 결과 값이 잘 들어갔습니다.

계속해서 진행하면 790번을 초과하면 프로그램 종료코드로 이동됩니다.

위는 dump창 화면입니다.

남은 군생활은 790일이 되고 MD5 대문자로 인증하라고 하였으므로

이를 대문자로!

인증을 하면!

Advance RCE L06 성공!

'WAR GAME > CodeEngn(Advance)' 카테고리의 다른 글

Advance RCE L08  (0) 2020.04.29
Advance RCE L07  (0) 2020.04.29
Advance RCE L05  (0) 2020.04.29
Advance RCE L04  (0) 2020.04.29
Advance RCE L03  (0) 2020.04.29

+ Recent posts