본문 바로가기
기타

yoda Protector 1.03.3 - Manual UnPacking(MUP).

by WeZZ 2011. 3. 17.
원문 링크 :

http://www.reversing.be/article.php?story=20060103202621966
h3x3ri.tistory.com/category



다른 Pack 들의 MUP 는 그렇게 많던데...
아무리 뒤져도 한글 문서가 없어서...
조악한 실력으로나마 한글화(?) 해 봤다...


===============================================================================
yoda Protector 1.03.3 - Manual UnPacking(MUP).
===============================================================================

tutorial은 당신에게 yoda Protector 의 마지막 버전인 1.03.3 MUP 방법을 설명해 드릴 것 이고, 주요 yoda Protector문제들과 Debugger 실행 중 파일보호를 운영하는 방법에 집중 할 것입니다.

1. 소개

안녕하세요, 친구들. 그리고 새로운 MUP tutorial에 오신걸 환영합니다. 제가 말했듯이, yoda Protector 1.03.3yoda Protector의 마지막 버전이며 제작자는 더 이상 새로운 버전을 만들기 않기로 결정하였습니다. 하지만 그는 새로운 것을 계획하고 있죠. 전 벌써 1.03.2 베타버전의 MUP tutorial을 썼습니다. 새로운 버전의 tutorial 1.03.2 베타버전 tutorial 이랑 거의 똑같지만 Debugger 실행 중 파일보호를 운영하는 방법에 대한 설명이 없습니다.

tutorial은 당신에게 Anti-Debug를 쉽게 우회하고 통과하는 방법을 설명해 드릴 것입니다.

필요 도구들:

- OllyDbg 1.10
- LordPE
- ImpREC
- Windows XP
- CrackMe Link (
http://www.reversing.be/binaries/articles/20060103202404818.rar )

tutorial은 상세한 설명은 필요 없으므로 간단하게 하겠습니다. 프로그램 imports rebuilding은 매우 쉽죠. OEP 찾은 후의 마지막 단계입니다.

yoda Protectoryoda’s Cryptor를 토대로 만들어졌습니다. 새로운 기술들이 버전에 따라 추가되죠. 기존 기법들은 PE header 삭제 (쓸모없죠), CRC 검사 (코드와 파일), IsDebuggerPresent 체크, API RedirectImport 정보 삭제 등이 있습니다. 이 기법들은 의 ExeStealth 버전 2.74 tutorial에 벌써 설명 되어있습니다. (ExeStealth는 그냥 yoda의 모조품입니다.)

새로운 추가기술들이 Olly를 종료시키고 윈도우XP를 멈추게 하죠.

그럼, Olly가 어떻게 죽는지 알려드리죠. protector는 여러 개의 API의 결합을 이용해서 모든 실행 중인 프로세스들의 PID 번호를 구하죠. 그리고 나서 이미 실행된 프로세스들을 검색, 종료시킵니다. (우리의 경우에는 Ollydbg .)

Protector는 그 프로세스의 PID와 스스로의 PID를 비교한 다음, 서로의 PID가 틀리면 그 프로세스를 종료합니다 (.exe olly를 통해 실행됩니다).

두 번째 추가기술은 더 짜증나죠. ProtectorBlockInput API를 우선적으로 검사합니다. API는 입력장치들을 (마우스, 키보드, 등등..) 막아버려서 사용자를 시스템에서 차단시켜버리죠. 그리고 나서 protector는 다른 검사들과 복호화를 시작하죠.

만약 검사중에 protector가 멈추거나 Olly가 발견되면 시스템은 사용자의 지시를 기다리게 되죠. 입력장치들이 모두 차단된 상태에서, 사용자는 컴퓨터를 재 시작하는 방법밖에는 없습니다. 모든 과정이 정상적으로 진행된다면 protectorBlockInput API 로 차단한 입력장치를 해제합니다. 정말 Smart한 기술이죠.

2. OEP 찾기

이제 MUP를 할 차례입니다. 'Crackme' Olly안에서 로드 하세요.

아래 그림과 같이 모든 Exception들은 무시하고,

> Exception 1. <

> Exception 2. <

[Debugging Option][Events] 탭의 "Break on new module (DLL)" 을 체크 하세요.

> Break on new module (DLL) 체크. <

BlockInput API의 실행을 가로채기 위해서는 user32.dll의 로딩을 중단해야 합니다. 그리고 나서 User32.dll이 나타날 때 까지 F9( Unknown Command를 만날 경우 Shift+F9 ) 누르세요.

> Unknown command. <


> User32.dll 로드. <


이제 "Break on new module (DLL)" 를 해제(Uncheck) 합니다. (더 이상 DLL 로드시 마다 멈출 필요가 없으므로..)

> Break on new module (DLL) 해제. <

여기서 BlockInput API를 수정하여 입력장치들을 사용 할 수 있도록 하는 것입니다.

[Ctrl + G] 를 눌러 ( 오른쪽 마우스 버튼 - [Go to] - [expression] 과 같음. ) "BlockInput"을 입력하세요. 그러면 BlockInput API user32.dll에 도달합니다.:

> BlockInput API 로 이동. <


> BlockInput API. <

BlockInput API를 없애려면, RETN 4전까지 모든 code NOP 으로 채웁니다.:

> BlockInput API 수정1. <


> BlockInput API 수정 및 BP 걸기. <


77D98A75 C2 0400 RETN 4 <---- 여기에 Break Point를 겁니다!

우리는 방금 BlockInput API를 중단시켰습니다. 이제 Olly의 종료를 막을 차례죠. 여기에는 전과 비슷한, 간단한 해결책이 있습니다. yoda는 모든 프로세스들이 충돌 없이 실행되기 위해서 CreateToolhalp32Snapshot을 사용합니다. 하지만 스스로의 PID를 얻기 위해서는 GetCurrentProcessId를 사용하죠. yoda 자신을 시작한 프로세스가 스스로의 PID와 동일한 PID를 고유했는지를 확인하죠. (예를 들어 보호파일이 Debugger를 통해 시작됐나 안됐나). 만약 아니라면 protector는 그 프로세스를 종료시킵니다. Olly종료를 예방하기 위해서는:

- LordPE를 열고 OllyDbs.exe PID를 알아내세요. (제 것은 514입니다.)

> Lord PE PID 확인. <

- [Ctrl + G ] , GetCurrentProcessId를 입력하고 OK를 클릭.

> GetCurrentProcessId API 입력. <

그러면 이제 이 API안에 있죠:

> GetCurrentProcessId API로 이동. <

API는 보호파일의 PIDReturn 하지만 Olly PIDReturn 시키기 위해 변경합니다. 그러면 보호파일 해야 할 파일이 Olly일 것이라고 생각합니다:

> Olly PID 로 해당 영역을 패치. <


> 패치 된 PID. <




이제 해야 할 것은 플러그인을 사용하여 Olly IsDebugerPresent 검색으로부터 숨기고,

> Plug-in 에 따라 다를 수 있습니다. <

실행하는 것입니다. BlockInput API bp 에서 두 번 멈추어야 합니다.

> RETN 4 에서 2 Break 가 걸립니다. <

그리고 "Memory Map" (단축키 [Alt + M] )을 실행하신 다음, 메모리 bp를 첫번째 섹션(구역)에 엑세스 해 놓으시고,

> 첫 번째 섹션에 “Set memory breakpoint on access” 설정. <

실행하면(F9) OEP 에 도달 합니다.:

> OEP 도착. <


이제 Dump를 하고 IAT Rebuilding 합니다. Dump 할 때는 OllyDump를 사용하심을 권장합니다 (Lord PE는 아이콘을 없앱니다. 그리고 IAT 를 다시 만드실 때는 ImpREC사용 하시구요.

> Dump. <

3. 후기

이게 다입니다. ^^ yoda 에 의해 보호되는 DLLUnpack 하기가 더욱더 쉬워졌습니다. 문법과 철자실수들은 양해를 해주세요.
tutorial에 많은 도움이 된 BIW팀에게 감사합니다. 그리고 Artem Crackmes.de에 있는 친구들에게 감사합니다.

제 다음 tutorial에서 봅시다. 새해 복 많이 받으세요~ :)


출처:h3x3ri.tistory.com/category