본문 바로가기

CodeEngn

[CodeEngn] Basic RCE L14

<문제>

 

 

<풀이>

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

 

 

14.exe를 실행해본다.

입력창이 있는 메시지박스가 뜬다.

 

 

문제에서 Name이 CodeEngn이라고 했으니 위쪽 입력란에 CodeEngn을 입력하고

Serial을 입력하는 것으로 보이는 아래 입력란에는 아무 값이나 입력해보았다.

 

오류 메시지가 출력된다.

 

 

본격적으로 리버싱을 시작하기 위해 디버거로 파일을 열어보기 전에 

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

UPX 패킹이 되어있는 것을 확인할 수 있다.

 

UPX로 패킹되어있는 파일을 언패킹하는 툴 중 하나인 upx303w을 이용해 언패킹한다.

upx303w.zip
0.31MB

 

위의 폴더를 다운로드한 후 압축을 푼다.

압축을 푼 폴더 안에 언패킹할 파일 08.exe를 옮겨넣고,

해당 폴더에서 cmd 창을 연다.

upx -d 언패킹할파일

명령어를 입력하면 언패킹이 완료된다.

 

디버거로 언패킹한 14.exe를 열어본다.

 

디버거로 14.exe를 연 화면이다.

 

CPU 창에서 우클릭하여 Search for > All referenced text strings를 클릭한다.

성공메시지로 보이는 텍스트와 오류메시지로 보이는 텍스트를 볼 수 있다.

두 메시지로 분기하는 CMP 명령어가 문제를 푸는 키가 될 것 같다.

해당 CMP 명령어는 두 메시지 근처에 있을 것이므로 일단 두 메시지에 breakpoint를 건다.

 

상단 메뉴바에서 View > CPU 를 클릭해서 다시 이전화면으로 돌아간다.

 

breakpoint를 걸어두었으니 F9를 눌러 파일을 실행한다.

CodeEngn, 1234를 입력하고 CHECK를 클릭한다.

 

오류메시지 부분에 있는 breakpoint에서 실행흐름이 멈춘다.

근처의 코드 중 CMP문을 찾아본다.

 

0x0040133A 부분에서 EAX와 ESI 값을 비교하는 CMP문을 찾을 수 있다.

 

비교하는 EAX와 ESI에 들어있는 값을 확인한다.

EAX에는 내가 입력한 1234를 16진수로 변환한 4D2가 들어있고

ESI에는 129A1이 들어있다.

129A1을 10진수로 변환한 값을 입력하면 CMP문의 실행 결과 ZF가 1이 될 것이고

그러면 성공메시지가 뜨는 곳으로 실행흐름이 흘러갈 것이다.

 

계산기를 켜서 Hex값 129A1을 입력한다.

 

Dec로 변환하면 76193이라는 결과가 뜬다.

76193이 내가 찾던 Serial 값이다.

 

 

 

 

<정답제출>

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

'CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L16  (0) 2023.11.15
[CodeEngn] Basic RCE L15  (0) 2023.11.13
[CodeEngn] Basic RCE L13  (0) 2023.11.12
[CodeEngn] Basic RCE L12  (0) 2023.11.09
[CodeEngn] Basic RCE L11  (0) 2023.11.07