웹서핑을 하다보니, 오렌지님께서 올리신 언팩미를 봤습니다.

원문포스트 : http://0range.net/entry/첫번째-언팩미Unpack-me

분석해보죠


일단 tls 는 깨끗하고..

사용자 삽입 이미지


olly 출격!

(대부분의 분석문은 그림속에 주석으로 넣었습니다. 클릭해서 봐주세요)

사용자 삽입 이미지
좋은 언팩미 답게 많은 anti debug 레퍼런스를 가르쳐주시네요.
peb정보중 BeingDebugged, NtGlobalFlag, heap정보로 디버거를 디텍트합니다. 회피하고 나면,
peb->LoaderData에서 feeefeee를 찾는데, 저도 이게 뭔지 몰랐습니다.
구글링을 해서 다음 페이지를 찾았습니다.
http://en.wikipedia.org/wiki/Magic_debug_values#Magic_debug_values


힙을 free할때 HeapFree()함수가 free된 영역을 마크하는 값이라고 합니다.
정말 그런지, 또 디버그모드일때만 그런지 봐야겠죠?
그래서 HeapFree()를 분석해 들어갔습니다.
그랬더니 ntdll 내부 함수에 여기가 나오네요.

사용자 삽입 이미지

NtGlobalFlag를 얻어서 디버그여부를 체크합니다.
디버그 중일 경우에는 디버그 메시지도 남기고, 아래 작업도 하네요.


사용자 삽입 이미지

0xfeeefeee로 메모리를 채워버립니다.
새로운걸 배웠군요^^

계속 디버깅해보죠.

사용자 삽입 이미지

xor복호화 한 뒤 3개의 함수호출이 나옵니다. 하나하나 들어가보죠.
첫번째 함수입니다.
사용자 삽입 이미지
음 dll LinkedList에서 InitializationOrderModuleList, 즉 초기화 순서로 정렬된 리스트중 첫번째 dll을 얻어오네요.
즉, Kernel32.dll의 imagebase( hModule )을 얻어오는 함수인 거죠.
두번째 함수에 들어가 볼까요?

사용자 삽입 이미지
kernel32.dll을 파고들어가, export table의 rva와 갯수를 저장후 아래에 있는 loop로 뛰어듭니다.
뭐하는 루프인지 봐야겠네요.


사용자 삽입 이미지

name table에서 함수 이름을 얻어다가 뭘 하려는데, 뭐하는지 보려면 내부함수(0x101f120)를 먼저 보고
계속 분석하죠^^

내부함수는 아래와 같습니다.
사용자 삽입 이미지
함수 이름을 가지고 특정 결과값(dword)을 내는 것으로 보입니다.
다시 돌아와서, 마저 분석하죠


사용자 삽입 이미지
몇몇 함수의 주소를 구해서 저장합니다.
원본의 import를 해주는거 같진 않습니다... rva도 추가된 섹션이고, 원본의 import가 멀쩡히 있기 때문이죠.
그래도 혹시 모릅니다. 원본을 변경했을지도... 체크해놓고
이 함수 분석 끝났으니 이제 아까 세개의 함수중 마지막 세번째 함수를 보죠.


사용자 삽입 이미지
따라오고 계시죠? 자 들어가봅시다.

사용자 삽입 이미지
세번째 함수는 보는 것처럼 seyool님의 시그니쳐를 표시하는 메시지박스를 띄우고, 스레드를 하나 만듭니다.
사용자 삽입 이미지


쓰레드가 뭔지 봐야겠죠?
사용자 삽입 이미지
이게 ThreadProc이며, 하는일은 아까의 안티 디버깅을 sleep하며 1초마다 체크하는 겁니다.
실행 후 디버거를 attach 하는 것을 방지하기 위한 감시 스레드죠.
아까 import를 세팅해주는 것 같던 모습은, 이 thread에서 쓰기 위한 것으로 보입니다.
디버거가 감지되면 어떻게 되나 볼까요?


사용자 삽입 이미지
디버거가 감지되면 메시지박스 함수주소를 구해서, 디버거가 감지됐다는 경고메시지를 띄우고
프로세스를 종료시켜버리는 군요. 이 스레드는 원본 프로그램엔 아무 영향이 없으므로
그냥 죽이면 되겠습니다.
사용자 삽입 이미지
                                                                      "dodge this"



이제 마지막 세 함수와 스레드까지 분석이 끝났습니다.
push 1012475
ret
 은 1012475로 가는 루틴입니다. original entry point, 원본 entry point이죠.

사용자 삽입 이미지


oep입니다.
사용자 삽입 이미지


여기서 dump뜨고, import는 rebuild해줄 필요 없고.. 하면 원본이 나옵니다.

잘 만든 unpackme를 제작해주신 seyool님께 감사의 박수를!

우리도 옆동네 중국처럼 언팩에 관심이 많아졌으면 좋겠습니다.