Basic RCE L07 - 코드 엔진

2020. 11. 17. 23:29문제연습/CodeEngn (REC)

반응형

 

 

본 티스토리 블로그는 PC에 최적화되어 있습니다.

모바일 유저분들은 아래 네이버 블로그를 이용해 주세요.

 

Basic RCE L07 - 코드 엔진

​본 네이버 블로그는 모바일에 최적화되어 있습니다.PC 유저분들은 아래 티스토리 블로그를 이용해 주세...

blog.naver.com

 

오랜만에 리버싱 문제 해설을 진행하는군요.

한번 디버거로 놀아봅시다!!!

 

Serial number? Is that for eating?

 

1. 문제 내용

컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 'ß어떤것'으로 변경되는가

 

Author: abex

File Password: codeengn

 

 

2. 문제 해설

드라이브 이름에 따른 시리얼 넘버 생성 루틴을 알아내는 문제인 듯합니다.

한번 파일 정보를 확인해 보도록 하겠습니다.

 

 

파일 정보)

딱히 특별한 패킹은 없는 듯하므로 바로 실행해 보도록 하겠습니다.

 

 

실행 정보)

처음 실행 시 사용자에게 시리얼 넘버를 입력하게 하고 이후 에러 메시지를 출력하였습니다.

이제 올리 디버거로 내용을 확인해 보도록 하겠습니다.

 

 

분석 - 올리 디버거)

- 스트링 정보

- 함수 정보

 

일단 의심되는 문자열과 함수 부분을 찾았으므로 모두 중단점을 설정한 뒤 f9 실행해 보도록 하겠습니다.

 

실행해 보니 다음과 같은 주소에 와 있습니다.

여기서부터 분석을 진행하도록 하겠습니다.

 

- GetDlgItemTextA

대화 상자에서 컨트롤과 관련된 제목 또는 텍스트를 검색하는 함수.

 

* 여기서 컨트롤이란 아래 링크를 참조하시길 바랍니다.

 

[WINAPI] 윈도우 컨트롤(window control)이랸?

간단한 윈도우 어플리케이션들은 대화상자(dialog box: 폼(form)이라고도 합니다.) 형태로 구현되는 경우가...

blog.naver.com

 

 사용자가 입력한 데이터를 버퍼에 저장하고 검색하는 역할을 하는 함수인 듯합니다.

(예. 123123123을 입력한 경우)

 

- GetVolumeInfomationA :
Retrieves information about the file system and volume associated with the specified root directory.

간단히 번역하자면, 지정된 루트에 파일 시스템 및 볼륨 정보를 검색하는 함수입니다.

지금 볼륨 이름을 받아오는 부분이 보이는군요.

동적분석을 통한 루틴 분석)

1) 0x0040225C(= “”)에 “4562-ABEX”문자열을 붙임 (복사하는 과정)

 

2) “4562-ABEX”문자열에서 인덱스 0~3번의 문자열에 각각 1씩 더하는 루틴을 두 번 반복함.

-> “4562-ABEX”가 “6784-ABEX”로 바뀜.

 

3) 0x00402000에 “L2C-5781” 문자열을 복사한 뒤 “6784-ABEX”에 붙임.

-> 최종적으로 “L2C-57816784-ABEX”로 합쳐짐.

 

4) 입력한 문자열과 “L2C-57816784-ABEX”을 비교하여 참 거짓을 분리 함.

 

우리가 확인해야 할 것)

“4562-ABEX”과 “L2C-5781” 문자열들의 출처를 알아내야 함.

 

아이다로 확인한 결과 디컴파일 소스는 아래와 같습니다.

(차례 데로 start, DialogFunc, sub_401056, sub_40112D)

 

아이다로 확인한 결과 string 클래스로 따로 문자열이 저장되어 있음을 알 수 있습니다.

 

이를 통해 문제를 풀어 보도록 하겠습니다.

1. 드라이브 이름 : codeengn -> string1="Codeengn"

2. lstrcat : "Codeengn" + “4562-ABEX” = “Codeengn4562-ABEX”

3. 인덱스(0~3) 더하기 루프 2 : “Codeengn4562-ABEX” -> “Dpefengn4562-ABEX” -> “Eqfgengn4562-ABEX”

4. lstrcat :“L2C-5781” + “Eqfgengn4562-ABEX” = “L2C-5781Eqfgengn4562-ABEX”

 

따라서 드라이브 이름이 Codeengn 일 때 시리얼 넘버 : L2C-5781Eqfgengn4562-ABEX

 

clear!!!!

 

오늘은 여기까지입니다.

다음 시간에는Basic RCE L08를 풀어 보도록 하겠습니다.

이상, ICMP였습니다!!!

 

반응형

'문제연습 > CodeEngn (REC)' 카테고리의 다른 글

Basic RCE L010 - 코드 엔진  (0) 2020.11.30
Basic RCE L09 - 코드 엔진  (0) 2020.11.23
Basic RCE L06 - 코드 엔진  (0) 2020.03.19
Basic RCE L05 - 코드 엔진  (0) 2020.03.18
Basic RCE L04 해설 - 코드 엔진  (0) 2020.03.17