
Name이 CodeEngn일때 Serial을 구하시오

프로그램 실행 화면은 다음과 같다. x32dbg에서 실행 시 별도의 패킹은 되어있지 않은 것으로 확인된다.

Search for 기능을 이용해 인증 실패 시 문자열 위치를 탐색한다.

jne구문을 이용해 성공, 실패 구문을 나누고 있는 것을 확인한다.
eax레지스터 값과 45B844 위치의 4byte값이 일치하지 않으면 "Try Again!" 구문을 출력하는 주소로 점프한다.
따라서, eax값과 45B844 위치의 값을 알아내야 할 것으로 보인다.

입력값을 저장하는 부분부터 확인한다. call 458760 함수를 통해 edx에 name값(첫 번째 입력값)이 edx가 가리키는 주소에 저장된다.

다음으로 입력한 serial값을 hex값으로 변환해 EAX 레지스터에 저장한다. 예시에서는 Serial 란에 "12345"를 입력했기 때문에 hex값 3039가 EAX에 저장되었다.
입력한 serial 값이 EAX에 저장되므로, 45B844 주소에 저장된 값이 입력한 Name에 대한 올바른 Serial값이 될 것이다.

x32dbg 좌측 하단 hex 윈도우에서 해당 주소를 찾아간다. ctrl+G를 눌러 이동할 주소를 입력할 수 있다.

해당 주소의 hex값은 60 61 00 00임을 확인할 수 있다. 이때, 대부분의 시스템은 리틀 엔디안을 사용하기 때문에 실제로 저장된 hex 값은 0x00006160으로 볼 수 있다.
16진수 6160을 10진수로 변환하면 24928이다. 즉, Name이 "CodeEngn"일 때, Serial 값은 24928이다.

코드엔진 깃허브에 가면 다양한 풀이를 확인할 수 있다.