본 문제는 reversing.kr를 통해서 풀어 보실 수 있습니다.

해답을 이해하며 생각을 해보면서 풀이 해보시길 바랍니다.

문제 내용

Easy_UnpackMe.exe

파일을 실행하면 아무것도 나오지 않는다. 도대체 무엇을 하는 프로그램일지도 예상이 안되고, Az를 통해 문자열의 위치를 알 수도 없다.

Readme.txt

ReversingKr UnpackMe

Find the OEP

ex) 00401000

OEP? OEP란 Original Entry Point를 말한다. 패킹된 파일을 실행할 때 자동적으로 시스템 내부에서 언패킹을 한다.

언패킹이 끝나면 복구한 원본코드를 동작시켜야 하는데 이 원본코드의 Entry Point를 OEP라고 한다.

즉, 우리는 실질적은 Entry Point를 찾아야 할 것으로 예상되고, 그거에 대한 주소가 Flag가 될 것 같다 !

문제 풀이

F9를 눌러 시 프로그램 실행을 하면 EP가 나오게 된다.

  • 보면 push ebp와 같은 스택 프레임의 베이스 포인터를 PUSH 하는 명령은 보이지 않는다.

  • 해당 프로그램이 패킹되어 시작 위치 및 데이터가 암호화(?) 되어 있다는 것 같다.

프로그램을 계속해서 한 줄씩 실행하면서 하다 보면 아래처럼 Loop를 통해 ECX 값이 복호화가 진행되는 것을 확인 할 수 있다.

  • 이런 경우 루프 다음 구문에 중단점을 걸어 중단점까지 실행을 통해 건너 뛸 수 있다. 이 방법으로 계속해서 넘어가보자.

  • jmp easy_unpackme.401150 구문을 넘어가면 아래와 같은 위치로 이동한다.

  • 이렇게 우리가 원하는 OEP에 도달했다.

다른 문제들 보단 쉬웠지만, 뭔가 이게 이렇게 푸는게 맞나 싶을 정도의 문제였다.