본문 바로가기

CodeEngn

[CodeEngn] Basic RCE L07

<문제>

 

 

<풀이>

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

 

 

 

 

07.exe 를 실행해본다.

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

 

임의의 값을 입력하고 Check 버튼을 클릭한다.

 

시리얼이 맞지 않는다고 뜬다.

 

 

 

이제 디버거로 실행파일을 열어 리버싱을 해본다.

디버거로 파일을 열었다.

 

메시지박스를 생성하는 두 영역을 찾을 수 있다.

하나는 에러 메시지를 출력하고, 하나는 성공 메시지를 출력하는데

어떤 메시지 박스를 출력할지 정해지는 CMP 문은 004010FC에 있다.

이 부분에 breakpoint를 걸어두었다.

 

 

CMP 문을 실행하기 전 전처리 과정이 되는 부분의 코드 영역이 있다.

계속 거슬러 올라가다가 RETN 명령어가 등장하는(전혀 다른 영역으로 구분되는) 부분까지 거슬러올라갔다.

해당 부분(0040106C)에 breakpoint를 걸었다.

 

 

0040106C까지 F9로 내려간 다음에 거기에서부터 F8로 한 줄씩 실행해가며

데이터가 어떻게 처리되는지 확인할 것이다.

 

한 줄 씩 내려가다가 GetVolumeInformationA함수를 만났다.

구글링해보니 해당 함수는 root directory의 정보를 가져오는 함수라고 쓰여있다.

즉 C드라이브의 이름을 가져오는 것으로 이해할 수 있다.

 

문제에서 'C드라이브의 이름이 CodeEngn인 경우'라고 했으니

아예 그와 같은 환경을 만들어주기로 했다.

 

 

파일 탐색기를 열어서 C드라이브의 이름을 CodeEngn으로 바꾸었다.

 

 

 

 

C드라이브 이름을 바꾸었으니 디버거로 실행한 프로그램을 다시 실행하고

디버깅을 계속 진행한다.

 

GetVolumeInformationA함수의 실행이 끝났을 때

lstrcatA 함수의 ConcatString 변수에 CodeEngn이라는 값이 들어간 것을 확인할 수 있다.

 

그 다음줄이 차례로 실행되면서 ConcatString변수의 값은 다음과 같이 바뀐다.

 

 

그래서 최종적으로 CodeEngn은 EqfgEngn이 된 것을 확인할 수 있다.

 

 

 

 

<정답제출>

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

 

'CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L09  (0) 2023.11.04
[CodeEngn] Basic RCE L08  (0) 2023.11.02
[CodeEngn] Basic RCE L06  (1) 2023.11.02
[CodeEngn] Basic RCE L05  (0) 2023.09.23
[CodeEngn] Basic RCE L04  (0) 2023.09.23