OEP를 구하시오 Ex) 00400000

08.exe을 실행하면 계산기 프로그램이 실행된다.

Ollydbg에서 프로그램을 열어보면 PUSHAD 명령어를 확인할 수 있다. 이를 통해 이 프로그램은 UPX로 패킹되었음을 추가로 알 수 있다.

UPX로 패킹한 프로그램은 대부분 POPAD 이후 JMP가 향하는 주소가 OEP라고 한다. 따라서 Ctrl+F 명령어로 POPAD 명령어를 찾는다.
# UPX 패킹된 프로그램 실행 과정
1. 레지스터 백업 (PUSHAD)
2. 압축한 코드를 압축 해제해 메모리에 복사
이 과정에서 기존 레지스터값이 변경되어 프로그램 실행 시
문제가 발생할 수 있기 때문에 백업을 진행한다.
3. 레지스터 복원 (POPAD)
4. 원본 코드 실행 (JMP OPE)

POPAD 명령어 이후 JMP 구문이 향하는 주소는 01012475이다.

언패킹하지 않은 프로그램에서 Ctrl+G를 통해 위 주소로 이동하면 빈 메모리 영역이 나타나지만, 언패킹한 프로그램을 Ollydbg로 실행시켜보면 프로그램 시작 주소가 01012475임을 확인할 수 있다.

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