Reversing | reversing.kr 3번 Easy Unpack
Easy Unpack 문제 풀이
본 문제는 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에 도달했다.
다른 문제들 보단 쉬웠지만, 뭔가 이게 이렇게 푸는게 맞나 싶을 정도의 문제였다.