본문 바로가기

INTERTLUDE/리버싱 스터디

Codeengn Basic RCE 14

Codeengn Basic RCE 14

 

Q. Name이 CodeEngn 일 때 Serial을 구하시오 (이 문제는 정 답이 여러 개 나올 수 있는 문제이며 5개의 숫자로 되어있는

정답을 찾아야함, bruteforce 필요) Ex) 11111

 

해당 문제를 풀기 위해, 14.exe  문제 파일을 다운로드하여주었다.

 7-Zip File Manager로 압축을 풀고 DIE로 파일 정보를 확인해보려고 한다.

 

 

압축을 푼 다음에, DIE로 확인해 보니 파일이 패킹이 되어 있음을 알 수 있다. 

그래서 upx-4.2.4-win64 폴더 내에서, CMD를 열고 언패킹 명령어를 입력하였다.

** 언패킹 명령어 :  upx -d -o (저장할 파일명) (원본 파일명) 

 

 

Immunity Debugger로 14_unpac.exe 오픈 → F9 실행하면 아래와 같은 Name/Serial 입력 다이얼로그가 뜨는 것을 알 수 있다. 

우리는 Name이 CodeEngn이라는 것은 알지만, Serial Number는 모르기에 일단 임의로 '1111'을 입력해 보기로 하였다. 

 

그러하였더니, 이러한 화면이 나타나기에 내가 잘못된 시리얼 넘버를 입력하였구나.라는 사실을 알 수 있었다.

이번에도 (우클릭 > Search for > All referenced strings)을 통해 문자열을 확인해 보았다.

MessageBoxA()를 출력하는 코드 근처로 가서 살펴보았다.

12번 문제와 비슷하게, 이번 문제도 성공/실패 메시지와

MessageBoxA 호출들을 기준으로 위쪽으로 핵심 분기 지점이 있을 것이라 판단하여, 핵심 분기 지점을 찾아보았다. 

 

1) 성공/실패 분기 위치 확인

 

성공을 출력하는 메시지 박스 직전에 분기문이 있음을 확인할 수 있었다.

 

00401339  POP ESI
0040133A  CMP EAX, ESI
0040133C  JNZ SHORT 00401353   ; 다르면 실패로 점프

 

  • EAX == ESI → 점프하지 않음 → 성공 경로(“Good Job”)
  • EAX != ESI → JNZ 로 실패 경로(“Wrong …”)

2) 입력 → 레지스터(EAX) 반영 확인

분기 지점 0040133A에 BP 설정 → Name=CodeEngn, Serial=1111 입력 후 정지 상태에서 레지스터 확인:

 

  • EAX = 0x0457 (디버거가 16진수로 값을 보여주기에, 그래서 이를 10진수로 확인해 보기 위해 공학용 계산기로 계산함.)        -> 16진수 0x0457 == 10진수 1111 (사용자 입력이 정수로 파싱되어 EAX에 로드됨)
  • 실제로는 내가 임의로 입력한 '1111'의 값이 정수로 EAX에 로드된 것임을 확인할 수 있었다.                                                즉, 프로그램은 사용자 입력값을(정수) 받아 EAX에 대입한 뒤 ESI와 비교를 하는 함수라는 것이다. 

그렇다면 ESI에 들어있는 값은 무엇일까? 

  • ESI = 0x129A1
    → 16진수 0x129A1 == 10진수 76193 (프로그램이 내부에서 계산/준비한 목표값)
  • 성공 메시지를 출력하기 위해서는, EAX(입력 Serial) == ESI(목표값) → Serial = 76193.

Name : CodeEngn , Serial Number : 76193을 입력해 보았다. 

그랬더니, Good Job!이라는 성공 메시지가 나타났음을 알 수 있었다.

 

정답 : 
Name: CodeEngn
Serial: 76193

문제 해결 성-공! 

'INTERTLUDE > 리버싱 스터디' 카테고리의 다른 글

Codeengn Basic RCE 16  (1) 2025.11.11
Codeengn Basic RCE 15  (0) 2025.11.11
Codeengn Basic RCE 12  (0) 2025.11.07
Codeengn Basic RCE 19  (0) 2025.10.08
CodeEngn Basic RCE 4  (0) 2025.10.07