Q9. StolenByte를 구하시오 Ex) 75156A0068352040

09.exe를 바로 실행해보았더니 다음과 같은 에러 메세지를 확인해 볼 수 있었다.
가끔 Windows 업데이트를 실행하면 실시간 보호가 다시 켜지는데, 이를 꺼두면 이 에러는 해결할 수 있다.


09.exe 실행하면 keyfile을 체크한다고 한다.
확인 버튼을 누르면 해당 파일을 찾지 못했다는 메세지가 출력된다.
문제를 풀기에 앞서 Stolen Byte의 의미를 이해하기 위해서 구글링을 진행했다.

Stolen Byte는 패커가 위치를 이동시킨 코드로, POPAD와 OEP 사이의 연속되는 PUSH를 의미한다.
그렇다면 Stolen Byte를 구해야 하는 이 문제도 무언가 패킹되었다는 힌트를 유추해볼 수 있을 것이다.

09.exe는 UPX로 패킹되어 있음을 확인하였다.

upx -d 09.exe
UPX 언패킹 툴을 통해 09.exe 언패킹을 진행했다.

언패킹한 09.exe를 OllyDbg로 로드해서 보면 글자가 깨져 보인다.

언패킹된 09.exe에서 00401000~0040100B까지 총 12바이트가 NOP로 이루어진 모습이다.
해당 부분이 NOP으로 채워져 있기에 MessageBox가 출력될 때 폰트가 깨져 보이는 것이다.
이 상태로는 POPAD와 OEP 사이의 값을 알아낼 수 없었다.
하지만 OEP는 401000이라는 정보를 얻고 다시 원본 09.exe를 로드해서 분석을 진행해야 했다.

OllyDbg로 원본 09.exe를 로드해서 F8을 한 번 누르면 볼 수 있는 화면이다. 이때의 EP는 4071F0임을 확인했다.

내리면서 분석을 진행해보니 40736D 주소에서 POPAD와 407387 주소에서 OEP 주소와 근접한 주소를 찾을 수 있었다.
POPAD와 OEP 사이의 연속되는 PUSH를 Stolen Byte라고 했으므로,
[그림 10]에서 Stolen Byte를 찾아보면 40736E ~ 407375주소에서 볼 수 있는 PUSH 명령어다.
따라서 09.exe의 Stolen Byte는 PUSH명령어 3줄의 12바이트 데이터인 6A 00 68 00 20 40 00 68 12 20 40 00 이다.
정답은 6A0068002040006812204000 이다.
'Reversing > CodeEngn' 카테고리의 다른 글
| [CodeEngn] RCE basic L11 풀이 (2) | 2025.09.01 |
|---|---|
| [CodeEngn] RCE basic L10 풀이 (3) | 2025.09.01 |
| [CodeEngn] RCE basic L08 풀이 (0) | 2025.09.01 |
| [CodeEngn] RCE basic L07 풀이 (2) | 2025.09.01 |
| [CodeEngn] RCE basic L06 풀이 (3) | 2025.09.01 |