Codeengn Basic RCE 16
Q. Name이 CodeEngn일때 Serial을 구하시오
Codeengn Basic RCE 16번 문제를 풀기 위해서, 먼저 16.exe 문제 파일을 다운로드 받았다.
7-zip을 이용하여 압축을 해제한 다음,

DIE를 통해서, 해당 파일이 UPX로 패킹이 되어 있지 않다는 사실을 알 수 있다.
만일 패킹이 되어 있다면 언패킹 과정을 거쳐야 하지만, 그렇지 않기에 Immunity Debugger로 가서 바로 파일을 열어주었다

F9 키를 눌러 실행하였더니, Name과 Password를 입력하는 콘솔 창이 나타났다.
우리는 Name은 'CodeEngn'으로 알고 있기에,
Name 칸에는 CodeEngn을 입력하고 password는 모르기에 임의로 '1111' 이라는 숫자를 입력해보았다.

이후 문자열 확인 (우클릭 > Search for > All referenced strings) 을 확인하였다.
우리가 아까 위에서 본 "Enter your Name" , "Enter your Password" 와 같이 수상한 문자열이 보여서
해당 문자열을 클릭해보았다.
1) 성공/실패 분기 찾기

CMP EAX, DWORD PTR SS:[EBP-3C]
JNZ 16.0040163C : 같지 않으면 실패로 점프
- EAX 값과 [EBP-3C] (프로그램이 준비한 목표값)을 비교
- 같아야(ZF=1) JNZ가 발생하지 않고 그대로 성공 루틴으로 들어감 → 이것이 핵심!
2) 레지스터 값 확인

CMP 위치에 BP(F2) 설정 → F9 재실행 -> 콘솔에서 Name=CodeEngn, Password=1111 입력 → BP에서 정지

(1) EAX = 0x00000457
- 디버거는 기본 16진수 표시 → 0x457 = 1111(10진)
- 즉, 사용자가 입력한 Password(1111)가 정수로 파싱되어 EAX에 로드됨을 확인 가능.

(2) [EBP-3C] 주소 산출
- EBP=0x0070FF28 → 0x70FF28 - 0x3C = 0x70FEEC

- 스택/메모리 창에서 [0x70FEEC] = E4 C6 0D 97(바이트) 확인
- 32비트 리틀엔디언이므로 DWORD 값 = 0xE4C60D97

0xE4C60D97 (hex) → 3838184855 (dec)
- 이 값이 [EBP-3C]의 정답(목표값), 곧 우리가 찾는 Password의 값인 것을 알 수 있다.

따라서 cmd 창에서:
- Name = CodeEngn
- Password = 3838184855
이를 입력하면, Good Job! 화면이 (성공 메세지 경로) 나타난다.
곧 올바른 Name과 Password를 입력하였음을 알 수 있다.

문제 해결 성-공!
'INTERTLUDE > 리버싱 스터디' 카테고리의 다른 글
| Codeengn Basic RCE 13 (0) | 2025.11.18 |
|---|---|
| Codeengn Basic RCE 20 (0) | 2025.11.17 |
| Codeengn Basic RCE 15 (0) | 2025.11.11 |
| Codeengn Basic RCE 14 (0) | 2025.11.07 |
| Codeengn Basic RCE 12 (0) | 2025.11.07 |