3-1. 문제 프로그램을 실행하면 "Hmmmmm, I can't find the file!" 이라는 에러 문구가 출력된다. 해당 구문이 출력되는 부분을 찾아서 에러를 확인해보자.
3-1. PEiD를 통해 UPX로 패킹된 것을 확인하고, 수동으로 패킹을 풀어보자.
3-2. 패킹된 파일을 x32dbg를 통해 열고, F9를 눌러서 엔트리포인트로 이동하여 pushal 명령을 확인한다.
※ 패킹된 실행파일은 언패킹 전 PUSHAD(PUSHAL) 명령어를 통해 레지스터의 상태를 저장하고, 언패킹이 완료되었을 때 POPAD(POPAL) 명령어를 통해 레지스터의 상태를 복구한다. 따라서 POPAD 명령어 근처에는 원래의 엔트리포인트로 이동하는 점프 명령어가 있다.
3-3. 아래로 쭉 내리다보면 popal 명령어와 원래의 엔트리 포인트로 이동하는 점프문을 확인할 수 있다.
3-4. 점프문이 실행되면 0040100C 주소로 이동되는데 MessageBoxA 함수의 인자 값이 4개 중 1개밖에 보이지 않고 인자 값이 들어가야할 위치에 nop이 채워져 있는 것을 확인할 수 있다.
3-5. POPAL 명령을 통해 Stack 데이터를 레지스터로 복구하고 OEP로 점프하기 전 3개의 PUSH 명령을 통해 스택에 데이터를 넣는데 해당 부분이 언패킹된 프로그램에서 MessageBoxA 함수 인자 값으로 들어가야할 데이터로 추측할 수 있다.
3-6. 문제의 push 주소를 덤프로 따라가보면 해당 바이트 값을 확인할 수 있다.
3-7. 확인한 Stolenbyte 값(6A0068002040006812204000)을 Auth 페이지에 입력하면 정답임을 확인할 수 있다.