-榮-

[CodeEngn] Basic RCE L18 본문

CodeEngn/Basic

[CodeEngn] Basic RCE L18

xii.xxv 2021. 3. 27. 15:43

 

● CodeEngn Basic RCE L18 문제

 

CodeEngn Basic RCE L18

 

 

◎ 파일 실행 화면

 

 

[그림 1] 파일 실행 화면

 

[그림 2] 실패 실행 화면

 

 

 

[Search for > All referenced text strings]에서 "Bad"와 "You serial is Wrong, tru again"을 찾고, 분기점과 분기 조건을 찾아 serial을 찾으면 될 것 같습니다.

 

 

패킹 및 난독화 여부 확인

 

[그림 3] PEiD

 


 

● CodeEngn Basic RCE L18 분석 및 풀이

 

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

 

 

문자열 검색으로 "Bad"와 "You serial is Wrong, tru again"을 찾아봅니다.

 

[그림 5] Seach for > All refenced text strings

 

"Bad" 문자열 주소로 이동하면 분기점(004011F6)이 보입니다. 분기 조건은 lstrcmpiA 함수를 사용하여 Name으로 생성된 Serial과 입력받은 Serial을 비교하는 것으로 보입니다.

 

[그림 6] 분기 조건과 분기점 확인

 

이때, 004011EF에 BP를 걸고, 실행[F9]하면 CodeEngn Basic RCE L18의 답을 찾을 수 있습니다.

 

프로그램이 Name을 받고, Serial을 만드는 전체적인 흐름을 파악해보자.

 

 

화면을 더 내려가다 보면(주소 기준) GetDlgItemTextA 함수 여러 개를 볼 수 있습니다. 이 함수를 사용해서 입력받은 Name과 Serial을 가져오는 것입니다.

 

GetDlgItemTextA 함수에 BP를 걸고 진행하다 보면, 00401110에서 입력받은 Name(CodeEngn)을 가져오는 것을 볼 수 있습니다. (반환 값 : 버퍼에 복사된 문자 수(출처:MSDN))

 

[그림 7] Name 가져오는 GetDlgItemTextA

 

Name(CodeEngn)을 가져오고 계속 진행(Step Over[F8])하다 보면 Name을 가지고 Serial을 만드는 코드(0040113C ~ 0040118C)를 확인할 수 있습니다.

[그림 8] Seial 생성 과정

 

Serial 생성과정 흐름

  [0040113C ~ 00401146]

 

00401146 CALL 00404058에서 004088F0의 위치에 004076F0("CodeEngn")을 암호화(?)해서 적습니다. [그림 9]

 

 

[그림 9] CALL 00404058의 결과

 

  [00401166 ~ 0040118C]

Serial 생성 과정 설명 설명 및 예시

1. edx = C1 (CALL 00404058의 결과)
2. edx = 524544h
3. eax = C1 byte
4. dl = 40
5. eax = eax + edx
6. eax = eax * Name (CodeEngn)
7. edx = edx + eax
8. eax = eax - 587370h

3. eax : CALL 00404820의 결과를 1 Byte
        ex. [그림 10]의 'CD'

4. edx : 524540h

5. eax : 000000CD + 524540 : 52460D

7. edx : 06162370

8. eax : 056B4AC0

 

  [004011A1 ~ 004011AC]

 

004011AC wsprintfA 함수에서 [00401166 ~ 0040118C]에서 만들어진 06162370056B4AC0를 이어 붙여 004080F0에 적습니다. [그림 10]

 

[그림 10] Name에 대한 Serial

 


● CodeEngn Basic RCE L18 답

 

 

[그림 11] CodeEngn Basic RCE L18 답

 

 

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

[CodeEngn] Basic RCE L20  (0) 2021.03.29
[CodeEngn] Basic RCE L19 (+α AutoIt 전용 디컴파일러)  (0) 2021.03.27
[CodeEngn] Basic RCE L17  (0) 2021.03.26
[CodeEngn] Basic RCE L16  (0) 2021.03.26
[CodeEngn] Basic RCE L15  (0) 2021.03.25