-榮-

[CodeEngn] Advance RCE L03 본문

CodeEngn/Advance

[CodeEngn] Advance RCE L03

xii.xxv 2021. 3. 31. 20:49

 

● CodeEngn Advance RCE L03 문제

 

CodeEngn Advance RCE L03

 

 

◎ 파일 실행 화면

 

[그림 1] 파일 실행 화면 / Failed 화면

 

 패킹 및 난독화 여부 확인

 

[그림 2] Exeinfo PE

 


 

● CodeEngn Advance RCE L03 풀이

 

 

[그림 3] 디버거 - OllyDbg / 디버기 - 03.exe (Advance RCE L03 실행파일)

 

[Search for > All referenced text strings]에서 [그림 1]의 실패 문자열을 찾으면 실패 문자열 2개와 성공 문자열을 확인할 수 있습니다.

성공 문자열로 이동하면 성공 문자열을 출력하는 MessageBoxW 함수가 따로 떨어져 나와있어 성공과 실패의 분기점과 분기 조건을 확인할 수 없습니다.

 

[그림 4] Search for > All referenced text strings

 

따라서 실패 문자열로 이동하는데 두 개의 실패 문자열 중 가장 낮은 주소의 문자열 주소로 이동합니다.

실패 문자열 주소로 이동하면 MessageBoxA 함수 아래로(주소 기준) GetDlgItemTextA 함수가 보입니다. 위에서 입력받은 Name 또는 Serial을 가지고 오고 그 문자열의 길이가 3보다 작으면 실패 메시지를 띄우는 것으로 보입니다.

 

[그림 5] 실패 문자열 주소로 이동

 

00401120의 GetDlgItemTextA 함수에 BP[F2]를 걸고 실행[F9]합니다.

 

[그림 6] GetDlgItemTextA BP

 

GetDlgItemTextA 함수의 반환 값이 8인 것을 보면 실행한 GetDlgItemTextA 함수는 Name을 읽어오는 함수인 것을 알 수 있습니다.

 

[그림 7] GetDlgItemTextA 반환 값 8

 

Name을 읽어온 후 코드를 보면 CALL 00101277을 거쳐 GetDlgItemTextA로 문자열을 읽어오고, wsprintfA로 [403000]을 %u 형식으로 변환하여 00403284에 복사됩니다.

 

[그림 8] Name 읽어온 이후 코드

 

00401162의 GetDlgItemTextA 함수의 반환 값이 4인 것에서 입력된 Serial을 읽어오는 것을 알 수 있습니다.

 

[그림 9] GetDlgItemTextA 반환 값 4

 

 

wsprintfA는 문자열의 해당 형식 사양에 따라 변환하어 출력 버퍼에 복사합니다.(출처:MSDN)

 

[그림 10] wsprintfA 함수정의

 

[그림 11]에서 wsprintfA는 [403000]의 문자열 "C2A776FA"를 %u 형식(부호 없는 10진수)으로 00403284에 복사합니다.

 

[그림 11] wsprintfA

 

wsprintfA 함수를 실행한 후 IstrcmpA 함수를 보면, 입력받은 Serial과 복사된 값을 비교하고 있는 것을 볼 수 있습니다.

즉, 부호 없는 10진수로 복사한 값이 CodeEngn Advance RCE L03의 답입니다.

 

[그림 12] IstrcmpA 함수

 

 

[※참고]

wsprintfA 함수로 [403000]의 문자열을 복사한 것으로 보아 Name을 읽어오고, Serial을 입력받기 전의 CALL 00401277에서 Name을 가지고 Serial을 생성한 것을 알 수 있습니다.

 

Name을 사용한 Serial 생성 방법 CodeEngn Advance RCE L03 Serial 생성 분석 참고해 주세요.

 

 

 


 

● CodeEngn Advance RCE L03 확인

 

[그림 12 IstrcmpA 함수에서 입력 Serial과 비교된 값(3265754874)을 입력하면 성공 메시지를 확인할 수 있습니다.

 

[그림 13] 성공 화면

 

 

 

 

 

 

'CodeEngn > Advance' 카테고리의 다른 글

[CodeEngn] Advance RCE L05  (0) 2021.04.02
[CodeEngn] Advance RCE L04 Serial 생성 분석  (0) 2021.04.02
[CodeEngn] Advance RCE L04  (0) 2021.04.02
[CodeEngn] Advance RCE L03 Serial 생성 분석  (0) 2021.03.31
[CodeEngn] Advance RCE L01  (0) 2021.03.31