리버싱kr easy_unpackme 풀이
리버싱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을 통해 빠르게 진행시켜 넘겨보자. 쭉 내리다 보니 코드가 없는 빈 공간이 시...