Codeengn Basic RCE 12
Q. Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다. 이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면
파일을 HexEdit로 오픈 한 다음 0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다.
문제 : Key값과 + 주소영역을 찾으시오. Ex) 7777777????????
해당 문제를 풀기 위해, 12.exe 문제 파일을 다운로드 받아주었다.
7-Zip File Manager로 압축을 풀고 DIE로 파일 정보를 확인해보려고 한다.

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

F9 키를 누르고 프로그램을 실행 시켜보았더니, 위에처럼 key를 입력하는 칸이 나타났다.
나는 아직 'key' 값을 잘 모르기에, 임의로 '11111' 이라는 숫자를 넣어보았다.
또한, 코드의 흐름을 살펴보면
GetModuleHandleA → DialogBoxParamA 순으로 키 입력 다이얼로그를 생성한다는 것을 알 수 있었다.

그 다음에는,
(우클릭 > Search for > All referenced strings) 과정을 통해 문자열을 확인해보고
MessageBoxA()가 출력되는 구문의 근처 코드로 이동하였다.
1) 성공 / 실패 분기 지점 찾기

- 문자열(Referenced strings)에서 성공 메시지(Congratulation 등) 를 단서로 호출 근처를 역추적.
- 바로 위에서 분기 조건 확인:
- 0040107D CMP EAX, 7A2896BF
00401082 JNZ SHORT ...
- 0040107D CMP EAX, 7A2896BF
- EAX == 0x7A2896BF 이면 점프하지 않고 성공 경로(= 성공 메시지 출력)
- EAX != 0x7A2896BF 이면 실패 경로로 점프
- 여기서 0x7A2896BF는 즉시값(상수) 이며, 정답(Key)과 직접적으로 연결 된다는 것 파악 가능 -!
2) 입력 → 레지스터(EAX) 반영 확인

분기 위치(0040107D)에 BP 설정 → F9 실행 -> 다이얼로그에 11111 입력 후 멈춘 시점 레지스터 확인.
- EAX = 0x2B67
→ 16진수 0x2B67 = 10진수 11111
→ 즉, 사용자 입력 정수가 그대로 EAX에 로드되어 비교된다.
3) 정답(키) 산출 — HEX → DEC

- 계산기로 변환했을 때
- 0x7A2896BF (hex) = 2049480383 (dec)
- 곧, 우리가 찾는 Key의 값은, 2049480383 임을 확인할 수 있다.
그렇다면 key 값을 구했다면,
이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하기 위해서 파일을 HexEdit로 오픈해보았다.
4) 성공 메시지 → Key로 바꾸기 (HxD Overwrite)

- HxD로 12.exe 파일을 열어 성공 메세지 문자열이 있는 구간을 찾아보았다.
- 우리는 성공 메세지 대신 key 값이 표시되도록 덮어쓰려고 하기에, 원래의 성공 메세지 위에 key 값을 적어주었다. -> 그러면 기존의 문자열이 key 값으로 덮어쓰이게 된다. (Overwrite 과정)
- 해당 ASCII 영역을 Key 문자열 2049480383로 덮어쓴 뒤, 문자열 끝에는 반드시 00(NULL terminator)을 유지해주었다.
- 그렇다면 우리가 바꾼 파일이 잘 실행 되는지 확인하기 위해서, 변경 사항을 포함하여 다시 저장을 하고 파일을 열어보았다.
** 주의사항 **
- 0040107D 같은 값은 가상주소(VA), 0x0D3B는 파일 오프셋(raw offset) 이다. 둘은 직접 일치하지 않는다.
- 오버라이트 시 원래 문자열 길이를 넘기지 말고, 마지막에 NULL(00) 을 유지해야 한다.
5) 실행 검증

- 수정 후 저장 → 실행하면, → Congratulation (성공 메시지) 대신에 2049480383 (key 값) 이 MessageBox의 텍스트로 출력되는 것을 확인할 수 있었다.
- Key: 2049480383
- 파일 오프셋(주소영역): 0x0D3B ~ 0x0D45
- 답(Key값과 + 주소영역) : 20494803830D3B0D45

문제 해결 성-공!
'INTERTLUDE > 리버싱 스터디' 카테고리의 다른 글
| Codeengn Basic RCE 15 (0) | 2025.11.11 |
|---|---|
| Codeengn Basic RCE 14 (0) | 2025.11.07 |
| Codeengn Basic RCE 19 (0) | 2025.10.08 |
| CodeEngn Basic RCE 4 (0) | 2025.10.07 |
| Codeengn Basic RCE 7 (0) | 2025.09.30 |