-榮-

[CodeEngn] Basic RCE L07 본문

CodeEngn/Basic

[CodeEngn] Basic RCE L07

xii.xxv 2021. 3. 23. 15:56

 

● CodeEngn Basic RCE L07 문제

 

CodeEngn Basic RCE L07

 

 

◎ 파일 실행 화면

 

[그림 1] 파일 실행 화면
[그림 2] 실패 화면 (입력 Serial 값 : ABCD)

"The serial you entered is not correct!" 문자열을 찾고, 분기점을 찾아 Serial 값을 찾으면 될 것 같습니다.

 

 

패킹 및 난독화 여부 확인

 

[그림 3] PEiD

 

 


 

● CodeEngn Basic RCE L07 분석

 

[그림 4] 디버거 - OllyDbg / 디버기 - 07.exe (Basic RCE L07 실행파일)

 

 

앞에서 추측한 "The serial you entered is not correct!" 문자열을 찾아봅시다.

 

[그림 5] 실패 MessageBox의 문자열 확인

 

실패 문자열 위치로 이동하면, 분기점으로 보이는 JE 명령어와 성공 MessageBox로 추측되는 Code가 있습니다.

[그림 6] 실패 MessageBox 위치

 

분기점을 확인하면 분기 조건으로 보이는 IstrcmpiA 함수를 확인할 수 있습니다.

IstrcatA 함수를 사용하여 문자열을 이어 붙인 Serial 값과 입력받은 값을 비교하는 것으로 추측됩니다.

 

[그림 7] 분기 조건 확인

 

◎ Serial 생성 과정 추측

  1. GetVolumeInformationA 함수를 사용하여 C 드라이브의 이름(pFilesSystemNameBuffer)을 얻는다.
  2. lstrcatA 함수를 이용하여 C 드라이브 이름에 "4562-ABEX"를 이어 붙인다.
  3. 004010AF의 반복문으로 암호화(?) 한다.
    1. 004010AD MOV DL, 2와 004010CB DEC DL을 보면 2번 반복하는 것으로 추측된다.
    2. 004010AF부터 004010C4까지 이어 붙인 문자열의 첫 번째부터 네 번째 HEX값까지 +1 해준다.
      (004010AF의[40225C]와 004010A3의 [0040225C]로 C 드라이브 이름일 것을 추측한다.)
    3. 3.2를 반복한다.
  4. 암호화(?)한 문자열과 "L2C-5781"을 이어 붙인다.(생성된 Serial은 [00402000]에 저장된다.)

[그림 8] Serial key 생성 과정

 

[그림 9]의 00402000이 생성된 Serial 값이 저장될 주소입니다.

 

[그림 9] [00402000]

 


● CodeEngn Basic RCE L07 풀이

 

◎ 현재 C 드라이브 이름 확인

 

[그림 10] C 드라이브 이름 - [공백]

 

C 드라이브 이름이 [공백] 일 때, Serial 값

 

[그림 11] C 드라이브 이름을 읽어오기

 

문자열을 이어 붙인 뒤 반복문을 실행하면 앞의 4Byte가 +2가 된 것을 확인할 수 있습니다.

 

[그림 12] 문자열을 이어붙인 뒤 반복문 실행

 

 

생성된 문자열과 "L2C-5781"을 이어 붙이고, 입력 값("ABCD")과 비교합니다.

 

[그림 13] C드라이브 이름에 따른 Serial 값

 

C 드라이브 이름이 [공백] 일 때, Serial 값은 "L2C-57816784-ABEX"

 

 

 

C드라이브 이름이 CodeEngn일 때, Serial 값

 

004010AD에서 [0040225C]의 값 : "CodeEngn4562-ABEX"

반복문 후 [0040225C]의 값 : "EqfgEngn4562-ABEX"

004010F7에서 [0402000]의 값 : "L2C-5721EqfgEngn4562-ABEX"

 


● CodeEngn Basic RCE L07 확인

[그림 14] C드라이브 이름이 공백일 때, Serial key

 

CodeEngn Basic RCE L07의 답은 C드라이브 이름이 CodeEngn일 때, Serial key = "L2C-5721EqfgEngn4562-ABEX"