-榮-

[CodeEngn] Basic RCE L01 (+α 패치파일 만드는 법) 본문

CodeEngn/Basic

[CodeEngn] Basic RCE L01 (+α 패치파일 만드는 법)

xii.xxv 2021. 3. 20. 21:43

 

● CodeEngn Basic RCE L01 문제

 

CodeEngn Basic RCE L01

문제를 보면 GetDriveTypeA 함수가 HDD의 타입을 얻어오는 함수로 추정됩니다.

따라서 GetDriveTypeA 함수 호출 부분을 위주로 분석해보면 될 것입니다.

 

- GetDriveTypeA 함수란?

   : 디스크 드라이브가 이동식, 고정, CD-ROM, RAM 디스크 또는 네트워크 드라이브인지 알아내는 함수이다.

 

GetDriveTypeA return value

함수의 리턴 값을 보면(출처:MSDN) CD-ROM으로 인식시키기 위해서는 '5'가 되어야 된다는 것을 알 수 있습니다.

 


+α (CD-ROM으로 인식한 MessageBox를 띄워보자.)

● CodeEngn Basic RCE L01

◎ 파일 실행 화면

 

파일 실행 화면 및 abex' 1st crackme 확인 버튼 클릭 후 화면

CD-Rom으로 인식이 되지 않으면 "Nah... This is not a CD-ROM Drive!" 문자열이 나오므로 문자열을 검색하여 분기점을 찾아 패치해주면 될 것입니다.

 

 

◎ 패킹 및 난독화 여부 확인

 

PEiD


 

● CodeEngn Basic RCE L01 (분석)

 

디버거 - OllyDbg / 디버기 - 01.exe (Basic RCE L01 실행파일)

 

앞에서 추측한 "Nah... This is not a CD-ROM Drive!" 문자열을 화면에서 바로 확인할 수 있습니다.

 

 

분기점

해당 문자열의 위의 JE assembly을 확인하면 "Ok, I really think that your HD is a CD-ROM! :p" Text를 나타내는 MessageBoxA로 가는 것을 확인할 수 있습니다.

따라서 00401026는 00401024의 결과로 출력하는 MessageBoxA가 선택되는 분기점입니다.

 


 

● CodeEngn Basic RCE L01 (풀이)

 

CodeEngn Basic RCE L01 문제의 YEAH! MessageBox를 띄우는 2가지 경우

  1. 00401024 CMP EAX, ESI를 패치하기
  2. 00401028 JE를 패치하기

1. 00401024 CMP EAX, ESI를 패치하기

 

 - CMP EAX, ESI --> CMP EAX, EAX 또는 CMP ESI, ESI

CMP EAX,ESI --> CMP EAX,EAX

 

2. 00401028의 JE를 패치하기

 

 - JE --> JMP 또는 JNE

JE --> JMP

패치 후 YEAH! MessageBoxA가 실행되는 것을 확인할 수 있습니다.

 

 


+α 패치파일 만드는 법

 

1. Assembly 코드 패치 (ex, CMP EAX, ESI --> CMP EAX, EAX)

 

2. 수정한 부분 드래그 후 마우스 우클릭 후 [Copy to executable > Selection] 선택

Copy to executable > Selection

3. 패치한 코드 저장

우클릭 > Save file