Reversing/CodeEngn

[CodeEngn] RCE basic L14 풀이

chan2s 2025. 9. 3. 00:52

Q14. Name이 CodeEngn 일 때 Serial을 구하시오 (이 문제는 정답이 여러 개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야 함, bruteforce 필요) Ex) 11111

[그림 1] 14.exe 최초 실행 및 임의값 체크

입력받는 칸이 2개가 있는 프로그램이다.
위 칸은 Name, 아래칸은 Serial 값을 받을 것이라고 예측되는 프로그램이다.
Name은 문제에서 CodeEngn이 주어졌고, Serial 값은 임의의 값 12345를 입력했을 때 다음과 같은 창이 출력되었다.

[그림 2] OllyDbg Compressed code

OllyDbg로 실행해보려 했으나 압축된 코드라고 알려주었다.

[그림 3] PEiD 14.exe

Exeinfo PE 툴 처럼 PE 구조에 대해 분석해 주는 PEiD프로그램을 통해 14.exe을 분석해 보니 UPX 패킹된 프로그램이었다.

[그림 4] UPX 언패킹 14.exe

upx 언패킹 툴로 14.exe를 언패킹 진행했다.

[그림 5] OllyDbg 언패킹한 14.exe Text 확인

성공 문구를 확인하고 해당 주소로 가보았다.

[그림 6] 성공문구 분기점 분석

40133A주소에서 CMP 명령어로 EAX와 ESI를 비교하는 것을 확인해 볼 수 있었다. 
ESI값과 EAX값을 확인해 보기 위해 40133A주소에 BP를 걸고 F9로 디버깅했다.
이때 입력한 값은 Name : CodeEngn, Serial : 12345를 입력하고 테스트해보았다.

[그림 7] 40132E ESI 값
[그림 8] 40133A EAX 비교 값

ESI에는 129A1이라는 값이 저장되어 있었고, EAX에는 3039 값이 저장되어 있었다.

[그림 9] 129a1 hex to dec
[그림 10] 3039 hex to dec

ESI와 EAX에 저장된 값을 10진수로 변환해 보았다.
EAX에는 테스트에 사용한 12345 값이 16진수로 저장된다는 것을 알아내었다.

그렇다면 ESI의 값(129a1)을 10진수로 변환한 값인 76193을 넣는다면 Serial값을 얻을 수 있을 것으로 예측했다.

[그림 11] Serial 값 검증

Serial 값은 76193 임을 검증했다.

 

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

[CodeEngn] RCE basic L16 풀이  (0) 2025.09.03
[CodeEngn] RCE basic L15 풀이  (0) 2025.09.03
[CodeEngn] RCE basic L13 풀이  (0) 2025.09.01
[CodeEngn] RCE basic L12 풀이  (1) 2025.09.01
[CodeEngn] RCE basic L11 풀이  (2) 2025.09.01