리버싱kr의 세 번째 문제인 easy_Unpackme를 풀어보려 한다.
제공된 텍스트 파일에 적힌 것을 보면
OEP(Original Entry Point)를 찾으라고 한다.
exeinfope로 본 엔트리 포인트는 이상한 곳을 가리키고 있다.
실행 파일의 엔트리 포인트가 이상한 곳으로 잡혀 있고, 원래의 엔트리 포인트를 찾아 그 주소로 auth 인증을 하는 것 같다.
참고로 올리 2버전에선 올리가 알아서 oep를 찾아서 처음에 위치시키기 때문에 문제를 푸는 의미가 없어진다.
그렇기 때문에 풀이에는 x64dbg를 이용했다.
파일을 불러왔다.
모듈 ntdll.dll에서 시작하고, 전혀 모르겠는 주소로부터 시작한다.
보통 실행 파일은 내가 만든 사용자 코드로부터 바로 시작하지 않기 때문에 ntdll으로부터 실행 파일의 매개 변수 등을 받는 여러 실행코드를 거쳐 사용자 코드까지 이르게 된다.
ntdll의 모든 함수들을 하나하나 따라갈 필요 없이 좀 내려가면서 크게크게 보고 넘기는 편이 빠르게 찾을 수 있을 것이다.
f8로 트레이싱 해 가며 대충대충 따라가 보자.
크게크게 넘기다 보니 모듈이 unpackme.exe로 바뀐 것을 볼 수 있다.
함수를 안으로 단계 진행을 통해 따라갈 필요는 없지만 함수명 등은 잘 봐두면서 넘어가면 좋다.
LoadLibraryA, GetProcAddress, GetModuleHandleA라던가 함수명을 보면 대충 실행코드 전인지 때려맞추게 된다.
리버싱 책이나 강의 등에서도 처음에는 트레이싱 해 가며 이런 함수들이 나오는 것을 자주 봐 두면 눈에 익어 도움이 된다고 한다.
좀 더 내리다 보니 많은 점프문과 VirtualProtect함수를 호출하는 것이 보인다.
그 아래에는 GetProcAddress함수가 보인다.
아직 전체적인 흐름으로 봐선 프로그램의 oep는 나오지 않은 것으로 보인다.
f8을 통해 빠르게 진행시켜 넘겨보자.
쭉 내리다 보니 코드가 없는 빈 공간이 시작되는 것을 볼 수 있다.
중간 아래로, 위와 비슷한 많은 점프문이 보이고, 그 점프문 끝과 빈 공간 사이에 점프문 하나가 있는 것을 볼 수 있다.
좀 더 크게 봐보자.
마지막 점프문 전의 점프문을 보면 다시 위로 가는 것을 볼 수 있고, 반복문의 형태로 저 구간을 반복하는 것으로 보인다.
현재 실행되는 모듈은 easy_unpackme고, 마지막 점프문 뒤에는 빈 공간인 것을 볼 수 있다.
반복문을 끝내고 마지막 점프문을 따라가 보았다.
드디어 뭔가 우리가 자주 본 함수의 프롤로그 모양이 나온다.
아래를 내려다보면 GetCommandLineA함수라던가 GetStartupInfoA같은 프로그램 실행 전에 보이는 함수들이 보인다.
그렇다면 마지막에 점프했던 주소인 00401150가 oep인 것을 볼 수 있다.
f8로 트레이싱 해 나가면 간단히 풀 수 있다.
제공된 텍스트 파일에 적힌 것을 보면
OEP(Original Entry Point)를 찾으라고 한다.
exeinfope로 본 엔트리 포인트는 이상한 곳을 가리키고 있다.
실행 파일의 엔트리 포인트가 이상한 곳으로 잡혀 있고, 원래의 엔트리 포인트를 찾아 그 주소로 auth 인증을 하는 것 같다.
참고로 올리 2버전에선 올리가 알아서 oep를 찾아서 처음에 위치시키기 때문에 문제를 푸는 의미가 없어진다.
그렇기 때문에 풀이에는 x64dbg를 이용했다.
파일을 불러왔다.
모듈 ntdll.dll에서 시작하고, 전혀 모르겠는 주소로부터 시작한다.
보통 실행 파일은 내가 만든 사용자 코드로부터 바로 시작하지 않기 때문에 ntdll으로부터 실행 파일의 매개 변수 등을 받는 여러 실행코드를 거쳐 사용자 코드까지 이르게 된다.
ntdll의 모든 함수들을 하나하나 따라갈 필요 없이 좀 내려가면서 크게크게 보고 넘기는 편이 빠르게 찾을 수 있을 것이다.
f8로 트레이싱 해 가며 대충대충 따라가 보자.
크게크게 넘기다 보니 모듈이 unpackme.exe로 바뀐 것을 볼 수 있다.
함수를 안으로 단계 진행을 통해 따라갈 필요는 없지만 함수명 등은 잘 봐두면서 넘어가면 좋다.
LoadLibraryA, GetProcAddress, GetModuleHandleA라던가 함수명을 보면 대충 실행코드 전인지 때려맞추게 된다.
리버싱 책이나 강의 등에서도 처음에는 트레이싱 해 가며 이런 함수들이 나오는 것을 자주 봐 두면 눈에 익어 도움이 된다고 한다.
좀 더 내리다 보니 많은 점프문과 VirtualProtect함수를 호출하는 것이 보인다.
그 아래에는 GetProcAddress함수가 보인다.
아직 전체적인 흐름으로 봐선 프로그램의 oep는 나오지 않은 것으로 보인다.
f8을 통해 빠르게 진행시켜 넘겨보자.
쭉 내리다 보니 코드가 없는 빈 공간이 시작되는 것을 볼 수 있다.
중간 아래로, 위와 비슷한 많은 점프문이 보이고, 그 점프문 끝과 빈 공간 사이에 점프문 하나가 있는 것을 볼 수 있다.
좀 더 크게 봐보자.
마지막 점프문 전의 점프문을 보면 다시 위로 가는 것을 볼 수 있고, 반복문의 형태로 저 구간을 반복하는 것으로 보인다.
현재 실행되는 모듈은 easy_unpackme고, 마지막 점프문 뒤에는 빈 공간인 것을 볼 수 있다.
반복문을 끝내고 마지막 점프문을 따라가 보았다.
드디어 뭔가 우리가 자주 본 함수의 프롤로그 모양이 나온다.
아래를 내려다보면 GetCommandLineA함수라던가 GetStartupInfoA같은 프로그램 실행 전에 보이는 함수들이 보인다.
그렇다면 마지막에 점프했던 주소인 00401150가 oep인 것을 볼 수 있다.
f8로 트레이싱 해 나가면 간단히 풀 수 있다.
'리버스 엔지니어링' 카테고리의 다른 글
레나 리버싱 Tut.ReverseMe1 풀이 2 (0) | 2020.07.01 |
---|---|
레나 리버싱 Tut.ReverseMe1 풀이 1 (0) | 2020.07.01 |
리버싱kr easy_Keygen 풀이 2 (0) | 2020.07.01 |
리버싱kr easy_Keygen 풀이 1 (0) | 2020.07.01 |
리버싱kr easy_crackme풀이 3 (0) | 2020.07.01 |