Reversing/CodeEngn

[CodeEngn] RCE basic L16 풀이

chan2s 2025. 9. 3. 15:51

Q16. Name이 CodeEngn일때 Serial을 구하시오

[그림 1] 16.exe 최초 실행

Name과 Password를 입력받고 값을 체크하는 프로그램이다.
Name : CodeEngn, Password : 12345를 입력 후 인증 해보니 Wrong password!가 출력되었다.

[그림 2] PEiD 16.exe 분석

PEiD로 분석해본 결과 C++로 작성된 파일이라고 한다.
해당 파일이 작성된 소프트웨어를 간단하게 조사해보았다.
Dev-C++ - 나무위키

 

Dev-C++

Dev-C++는 GNU 라이선스로 보급되는 사용이 자유로운 C / C++ 언어의 통합 개발 환경 이다.

namu.wiki

> Bloodshed Software가 Dev-C++로 제작한 프로그램을 지칭하는 듯 하였다. 현재는 개발이 멈춘 상태이다 (포크 후 이어지기를 반복했기 때문이라고 한다..)

[그림 3] OllyDbg 체크 성공 문구 확인

OllyDbg에서 All referenced text stirngs에서 Good Job!이라는 체크 성공 시 출력될 문구를 확인하고 해당 주소로 가보았다.

[그림 4] 16.exe 구조 분석

이번에는 성공 분기점 위에 바로 CMP, JNZ가 있는 구조가 아닌
다른 주소를 호출한 뒤에 성공문구가 출력되는 구조임을 알아낼 수 있었다.
(이 때는 40159F 주소의 CMP와 JNZ분기점을 확인하지 못했었다.)

[그림 5] 입력 받는 문구 BP

따라서 Name, Password 값을 받아오는 메모리 주소에 BP를 걸고 한 줄씩 디버깅을 시도했다.

[그림 6] 4014D3 Enter your Name: 출력
[그림 7] 40157B Enter your Password: 출력
[그림 8] 40159C Password 입력 값 확인

Password에 ‘12345’를 입력하고 분석했더니 16진수 값으로 3039가 찍힌 주소가 40159C에서 처음 등장하였다.

[그림 9] 40159F CMP 명령어

그 다음에 EAX와 E4C60D97과 비교하고 JNZ 분기점으로 넘어가는 것을 확인했다.
이 때 40159F 주소의 EBP-3C(70FEEC)의 값 E4C60D97이 의미하는 값을 알아내기 위해서 16진수를 확인해보기로 했다.

[그림 10] E4C60D97 hex to dec

E4C60D97을 10진수로 변환 하였을 때 3838184855 라는 값을 얻을 수 있었다.

[그림 11] Serial 값 검증

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

[CodeEngn] RCE basic L18 풀이  (0) 2025.09.05
[CodeEngn] RCE basic L17 풀이  (0) 2025.09.04
[CodeEngn] RCE basic L15 풀이  (0) 2025.09.03
[CodeEngn] RCE basic L14 풀이  (0) 2025.09.03
[CodeEngn] RCE basic L13 풀이  (0) 2025.09.01