<문제>
<풀이>
문제 파일을 다운로드하고, 7-Zip File Maneger로 압축을 푼다.
10.exe를 실행해본다.
값을 입력받는 메시지박스가 뜨는데 값을 입력할 수는 없다.
Exit을 클릭하니 프로그램이 종료되었다.
문제에서 OEP를 찾으라고 요구하는 것으로 보아 파일이 패킹되어 있을 수도 있을 것 같다.
PE 파일을 정적 분석할 때 사용하는 툴인 PEiD를 이용해 10.exe를 열어본다.
ASPack으로 패킹되어있는 것을 확인할 수 있다.
다양한 패킹을 언패킹할 수 있는 툴인 VMUnpacker를 이용해 언패킹한다.
위의 압축폴더를 다운로드하고 압축을 푼 뒤,
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 |