본문 바로가기

CodeEngn

[CodeEngn] Basic RCE L10

<문제>

 

<풀이>

문제 파일을 다운로드하고, 7-Zip File Maneger로 압축을 푼다.

 

10.exe를 실행해본다.

값을 입력받는 메시지박스가 뜨는데 값을 입력할 수는 없다.

Exit을 클릭하니 프로그램이 종료되었다.

 

 

문제에서 OEP를 찾으라고 요구하는 것으로 보아 파일이 패킹되어 있을 수도 있을 것 같다.

PE 파일을 정적 분석할 때 사용하는 툴인 PEiD를 이용해 10.exe를 열어본다.

ASPack으로 패킹되어있는 것을 확인할 수 있다.

 

 

다양한 패킹을 언패킹할 수 있는 툴인 VMUnpacker를 이용해 언패킹한다.

vmunpacker-leost118.zip
1.08MB

 

위의 압축폴더를 다운로드하고 압축을 푼 뒤,

VMUnpacker.exe를 실행한다.

... 을 클릭하여 언패킹할 파일을 찾는다.

 

Unpack을 클릭하면 Unpacked successfully! 가 뜨고

언패킹된 파일의 경로를 출력한다.

 

 

 

언패킹된 파일인 10_unpacked.exe를 디버거로 연다.

우선 프로그램의 시작위치를 확인한다.

00445834가 문제에서 요구하는 OEP이다.

 

 

F8을 눌러가며 한 줄 씩 실행한다.

00445887 위치의 CALL 명령어를 실행하면 다른 영역으로 들어간다.

이 부분에 breakpoint를 걸어두고 디버깅을 계속한다.

 

 

00445887 에서 호출한 영역으로 들어가서

계속 한 줄 씩 실행하다가 RETN 명령어를 만난다.

이 부분을 실행하면 또 다른 영역으로 들어가므로 이 부분에도 breakpoint를 걸었다.

 

RETN 명령어가 가리키는 코드 영역에서

Registered ... well done! 이라는 문구를 찾을 수 있다.

문제에서 말하는 등록성공 부분이다.

해당 문구가 있는 부분의 주소는 0044550C이다.

 

이 코드의 위쪽으로 올라가서 명령어 줄의 실행 흐름을 JMP류 명령어를 중심으로 살펴본다.

'등록성공'이 있는 0044550C를 건너뛰고 0044552B로 JMP하는 명령어를 찾았다.

이 부분에서 JMP하면 '등록성공'이 뜨지 않고 JMP하면 '등록성공'이 뜨므로 이 곳이 문제에서 찾던 분기점이다.

해당 명령어의 OP CODE는 75 55이다.

 

 

<정답제출>

코드엔진의 Auth페이지에 Key 값으로 004458347555를 입력하면 Success!!가 뜬다.

'CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L12  (0) 2023.11.09
[CodeEngn] Basic RCE L11  (0) 2023.11.07
[CodeEngn] Basic RCE L09  (0) 2023.11.04
[CodeEngn] Basic RCE L08  (0) 2023.11.02
[CodeEngn] Basic RCE L07  (0) 2023.11.02