문제 정보

이 프로그램의 등록키는 무엇인가

 

풀이 힌트

2-1. Packing

2-2. UPX

 

문제 풀이

더보기

3-1. 잘못된 키를 입력하면 "Wrong Serial, try again!" 이라는 문구를 출력하는 프로그램이다.

 

3-2. "Wrong Serial, try again!" 문자열의 주소를 확인한다.

       ※ 프로그램 실행해야만 해당 문자열이 검색된다. 여기에서 패킹을 의심했어야 한다.

 

3-3. 에러 문구를 출력하는 주소를 따라가면 [call 05.403B2C] 함수 호출 후 결과 메시지를 출력하는 것을 알 수 있다.

 

3-4. [call 05.403B2C] 함수의 호출 전/후로 BP를 걸어서 확인해보자

 

3-5. BP를 걸고 프로그램을 재실행해보니 별다른 변화가 없고 BP가 비활성화 되어있다.

 

3-6. 프로그램이 패킹되어 있는 것 같다. PEiD를 이용해 확인해보니 UPX로 패킹되어 있음을 알 수 있다.

 

3-7. UPX를 이용해 언패킹한다.

 

3-8. 패킹 이후 프로그램을 다시 디버깅하여 문자열 참조 시 키로 의심되는 값이 보인다.

 

3-9. 입력한 키 값의 참/거짓을 판별하는 함수 호출 전에 브레이크 포인트를 설정한다.

 

3-10. 키 값을 [754-GFX-IER-954] 에서 [GFX-754-IER-954]로 변경하고 실행했음에도 또 실패했다. 키 값의 참/거짓을 판별하는 BP에 걸리지 않고 지나쳤다. 에러 메시지를 출력하는 다른 분기문이 추가로 있다고 판단할 수 있다.

 

3-11. 코드를 잘 살펴보니 "Wrong" 메시지를 출력하는 주소코드는 두 개이고 각각 [00440F72], [00440F8C]로 확인된다.

 

3-12. 기존에 BP를 설정했던 함수 호출 뒤에는 값이 다를 시에 [00440F72] 주소로 분기하고, 그 위에 [00440F34] 주소에서 추가적인 로직 검증이 있는 것으로 확인된다. 

 

3-13. 추가로 확인되는 값 검증 부분에 BP를 설정하고 실행해보니, 키 위에 적힌 "Unregistered..." 문자열과 "Registered User" 문자열을 매개로 받는 것을 확인할 수 있는데 키 외에도 추가로 문자열 비교를 하는 것으로 보인다,

 

3-14. User와 Key를 입력 후 프로그램 실행 결과 정상적으로 키 검증이 완료됐다.

 

3-15. (정답) 이 프로그램의 키는 GFX-754-IER-954 이다.

복사했습니다!