*** Easy UnpackMe 리버싱하기 ***


2번 Easy Keygen은 패스하고... 이번엔 Reversing.kr 사이트의 3번 문제 Easy UnpackMe 문제를 풀어보겠습니다.


사실 이번 문제는 진정한 Unpack 을 한 것이 아니라, Olly Dbg 플러그인을 사용하여 언팩을 했습니다.


원래 언팩과정이라 하면,


"팩 과정을 찾아내서 그 부분에 BP를 걸고 디버깅을 한다."


로 볼 수 있지만, 저는 초보라 그 부분이 많이 어렵더라고요.


구글에서 검색한 결과,



1. PUSHAD 과정을 찾는다.

- 여기서 PUSHAD 란 PACKING 과정을 위해 모든 Register 들을 Stack 에 PUSH 하는 과정을 의미합니다.


2. 중간을 넘어서, POPAD 과정을 찾는다.

- 여기서 POPAD 란 PACKING 과정이 모두 끝난 후에,

OEP 위치 직전에서 프로그램 실행을 위해 다시 모든 Register 위치에 원래대로 값을 복원시키는 것을 말합니다.



특히 저 POPAD 부분은 EDI 레지스터를 중심으로 봐야 한다는데... 자세한건 더 공부해 보기로 하구요!


오늘은 Unpack 을 쉽게 해주는 Olly Dbg 의 플러그인을 소개하고, OEP(진짜 시작부분, Original Entry Point) 를 어떻게 찾는지 말씀드리겠습니다.



(주의 : 포스트 하단에 정답이 공개되어 있습니다!!!)


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------


우선 첨부파일 OllyDump.dll 파일을 올려놓았습니다.


 

OllyDump.dll



위 dll 파일을 다운로드 하신 후에,


* OllyDbg 설치 경로 plugin 폴더(없을 경우 생성)


위치에 넣어주시면 됩니다.




들어간 후에...



plugin 폴더를 만들고...(저도 없어서 만들었습니다.)



해당 경로에 잘 넣어줍니다.



-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------



이렇게 플러그인을 넣으셨으면 Olly Dbg 를 들어가서 플러그인 설정을 해주어야 합니다.


디버거를 열어주세요.





들어가서 상단 툴바의 [Options] → [Appearance] 를 들어가주세요.





[Directories] 항목의 하단 [Plugin path:] 칸에 위의 OllyDump.dll 파일을 넣어 준 plugin 폴더의 경로를 넣어줍니다.





새로 입력되었으면, 디버거를 재시작하라는 창이 뜹니다.


[확인] 을 눌러서 창을 끈 후, 디버거를 재시작 해줍니다.





재시작을 하고, 상단에 [Plugins] → [OllyDump] 항목을 들어갈 수 있습니다. (1 Olly Advanced 는 제가 이전에 넣어둔 플러그인 입니다.)



-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------



자, 그러면 플러그인 세팅이 끝났습니다. 이제 이 툴을 가지고 Easy Unpack 문제를 풀어볼게요.



우선 exe 파일을 열어줍니다.





열었습니다. 우측 하단에 [Paused] 상태네요.


바로 플러그인으로 OEP 를 찾아보겠습니다.


상단에 [Plugins] → [OllyDump] → [Find OEP by Section Hop(Trace over)] 를 눌러줍시다.

(Trace into 는 한번에 OEP 까지 가지 않고 함수별로 Stop 됩니다. 분석에는 더 좋겠지만 문제를 풀기 위해서는 over로 한 번에 가는게 좋을 것 같네요.)





우측 하단에 Program entry point 에 속지마세요... 저건 Unpack 전의 EP입니다. OEP 가 아닙니다!





[Plugins] → [OllyDump] → [Find OEP by Section Hop(Trace over)] 를 누르게 되면


우측 하단에 [Paused] 상태에서 [Tracing] 상태로 변한 것을 확인할 수 있습니다.


이 상태로 기다립니다.(몇 초 만에 순식간에 끝나지 않습니다. 조금만 기다립시다.)





OEP 추적이 끝나면 저렇게 작업표시줄에서 깜박입니다.






우측 하단이 [Tracing] 에서 [Paused] 로 바뀌었고, 디버깅 위치가 자동으로 00401150 으로 세팅되어 있습니다.


OEP 추적이 끝난 상태이므로  00401150 이 OEP 라는것을 추측할 수 있습니다.



이 정보를 가지고 Readme.txt 파일을 읽어보면...





답은 저런 방식으로 입력하는 것인가 봅니다.


Reversing.kr 사이트에 가서...





찾았다고 추측하는 주소(00401150) 를 입력하고 좌측의 [AUTH] 를 입력합니다.





Easy Unpack 문제가 해결되었네요!



-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------



원래 정석대로라면 PACK 부분과 PACK 의 종료시점을 찾는게 진정한 Unpacker 이겠지만..


아직은 실력이 많이 모자르다고 생각되네요


조금 더 실력을 기르게 되면 Unpack 과정도 손쉽게 할 수 있지 않을까요?



그래도 Easy Crack 은 3956 분이 해결하셨는데 Easy Unpack 문제는 그의 절반 정도만 해결하셨네요.


아마 저처럼 툴 없이 하시려다가 못 푸신 분들이 다수 계실 것 같습니다.


저도 실력을 빨리 길러서 플러그인 없이 Unpack 하는 날이 오길 바랍니다 ㅎㅎㅎ



>>> Easy Unpack


>>> OllyDump.dll


>>> OEP


>>> Original Entry Point


'보안 & 모의해킹 > 리버싱' 카테고리의 다른 글

[Reversing.kr] - 1. Easy CrackMe  (0) 2018.07.11
Posted by NDC :