악성코드분석을위한 실행압축 해제기법 1. 개요 이제목을보고 실행압축이뭐야? 하는이도있을테고, 실행하면자동으로압축이풀리는 ZIP 파일과비슷한거아냐? 하고떠올리는이도있을것이다. 그러나여기서설명하는실행압축은그대상이다르다. 흔히말하는 ZIP, RAR처럼데이터들을하나로묶어놓는압

Similar documents
Deok9_PE Structure

목 차 1. 개요 2. PE(Portable Executable) 이란? 3. IMAGE_DOS_HEADER 4. IMAGE_NT_HEADER 1) IMAGE_FILE_HEADER 2) IMAGE_OPTIONAL_HEADER 3) IMAGE_DATA_DIRECTORY

PowerPoint 프레젠테이션

< C6520B1B8C1B6BFCD20BEF0C6D0C5B7C0C720BFF8B8AE2E687770>

<4D F736F F D20B0ADB5BFC7F65FB1E2BCFAB9AEBCAD5F4645B1B8C1B620B1E2BCFAB9AEBCAD5F66726F6D E6B5F66696E F2E646F63>

Secure Programming Lecture1 : Introduction

Scalable Network-based Buffer Overflow Attack Detection

Microsoft PowerPoint - chap01-C언어개요.pptx

Deok9_Exploit Technique

목차 ⓵ VA and RVA 4p. ⓶ RVA to RAW 5p. ⓷ PE 7p. PE의개념. PE Header가생기는과정. PE의필요성. ⓷ DOS Header 8p. e_magic e_lfanew ⓸ DOS Stub 9p. 1

Microsoft Word - PE Infection ? How to Inject a dll.doc

Microsoft Word - PE_structure.docx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - FunctionCall

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Microsoft PowerPoint - a10.ppt [호환 모드]

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft Word - MSOffice_WPS_analysis.doc

연재순서 실행파읷속으로 필자소개 싞영짂 웰비아닶컴에서보안프로그래머로읷하고있다. 시스템프로그래밍에관심이많으며다수의 PC 보안프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시

hlogin2

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

Microsoft PowerPoint 통신 및 압축 명령어.ppt

슬라이드 1

4S 1차년도 평가 발표자료

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft Word - building the win32 shellcode 01.doc

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

No Slide Title

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - o8.pptx

BMP 파일 처리

목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단

JDK이클립스

금오공대 컴퓨터공학전공 강의자료

Microsoft Word - PLC제어응용-2차시.doc

Microsoft Word - 과목1.Reverse Engineering.doc

IDA 5.x Manual hwp

hlogin7

PowerPoint 프레젠테이션

Lab 3. 실습문제 (Single linked list)_해답.hwp

untitled

Discrete Mathematics

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

슬라이드 1

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

ISP and CodeVisionAVR C Compiler.hwp

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

PowerPoint 프레젠테이션

슬라이드 1

Secure Programming Lecture1 : Introduction

11장 포인터

Microsoft Word - CPL-TR wireshark.doc


Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

Microsoft PowerPoint - Java7.pptx

API 매뉴얼

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

DE1-SoC Board

PowerPoint Presentation

강의10

chap 5: Trees

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

Studuino소프트웨어 설치

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

2

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

슬라이드 1

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

105È£4fš

<4D F736F F F696E74202D204B FC7C1B7CEB1D7B7A55F F6E48616E646C6572B8A6C5EBC7D1BFA1B7AFB0CBC3E2B9D7BCF6C1A

<C6F7C6AEB6F5B1B3C0E72E687770>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

1. 개요 악성코드는여러분류로나누어볼수가있다. 이중일반사용자의입장에서 악성코드 라는단어보다친숙한 바이러스 가있다. 사실필자도보안을공부하기이전에는 악성코드 라는단어는아예들어보지못했고, 대신 바이러스 라는단어로모든악성코드를지칭했었다. 바이러스는악성코드분류의한종류로 스스로를

C# Programming Guide - Types

Frama-C/JESSIS 사용법 소개

JVM 메모리구조

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

<4D F736F F D20BEC8C0FCC7D120B8DEC0CF20B9D720C6C4C0CF20C0FCBCDB2E646F6378>

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc

C++ Programming

1

how_2_write_Exploit_4_the_MSF_v3.x.hwp

슬라이드 1

<C6F7B7B320BAEAB7CEBCC55FC0DAB7E1C1FDBFEB E706466>

<41736D6C6F D20B9AEBCADBEE7BDC42E687770>

Install stm32cubemx and st-link utility

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

신종파밍악성코드분석 Bolaven

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - 07_04_s7기초기술교육_simatic_manager_operation.ppt [호환 모드]

IT CookBoo, 컴퓨터 실습

C 프로그래밊 개요

Abstract View of System Components

EP의주소값이 "RVA : " 인것을볼수있다. 당연히올리디버거에서는해당 EP 값을이상하다고판단하여처음에 "System EP" 에서멈춘것이다. * ImageBase + RVA EP == VA EP == 현재바이너리에적용된프로

Transcription:

악성코드 분석을 위한 실행압축 해제 기법 NCSC-TR04025

악성코드분석을위한 실행압축 해제기법 1. 개요 이제목을보고 실행압축이뭐야? 하는이도있을테고, 실행하면자동으로압축이풀리는 ZIP 파일과비슷한거아냐? 하고떠올리는이도있을것이다. 그러나여기서설명하는실행압축은그대상이다르다. 흔히말하는 ZIP, RAR처럼데이터들을하나로묶어놓는압축과는달리그대상이 notepad.exe처럼실행할수있는파일을압축한것으로, 실행압축된 notepad.exe는압축을푸는과정없이바로프로그램을실행할수있다. 그럼이런실행압축을왜하는것일까? 예전처럼하드디스크용량이적었을때에는자주쓰지않는파일을압축해놓아디스크사용량을늘렸던적이있었지만오늘날에는하드디스크용량이넉넉하기때문에그럴만한이유가없을것이라고생각할수도있다. 그러나인터넷인프라가잘갖춰진우리나라의경우는예외겠지만, 압축을사용할경우짧은시간동안프로그램을다운받을수있기때문에요즘에도온라인상에있는파일들은대부분압축이되어있다. 특히실행파일의경우 ZIP과같은범용데이터압축보다는실행압축방식을사용하는쪽이더용량이적게사용되기때문이다. 8 악성코드도이런점을이용해짧은시간안에많은곳으로전파되도록실행압축을사용하고있으며, 백신제작자들로하여금악성코드를분석하기어렵도록하는데도사용된다. 분석하는데시간이걸리는동안악성코드전파시간을늘릴수있기때문이다. 이와반대로만약실행압축을빨리해제하여분석할수있다면, 그피해규모또한현저히줄일수있을것이다. 그렇다면실제실행압축을이용하는악성코드 ( 웜, 바이러스로한정 ) 에는어떤것들이있을까? 대표적인것으로 MyDoom, Netsky, Bagle, Agobot, Welchia, Sasser, Sobig 변종등을들수있다. 바이러스분야에어느 8. 한글 2002 Hwp.exe 원본크기는 1,626,112 바이트이고, 압축프로그램으로압축된 ZIP 파일은 670,508 바이트, UPX 방식의실행압축을사용할경우 563,200 바이트가되기때문에통신상에서판매하는쉐어웨어의경우실행파일압축이되어있는경우가많다. 1 Monthly 사이버시큐리티

정도관심이있다면쉽게알만한큰피해를주었던웜 바이러스들이다. 이와같은악성코드의분석을위해보다빠른실행압축해제방법을습득하는것은앞으로출현할악성코드에대비하는데도큰도움이된다. 2. PE(Portable Executable) 구조및실행압축기본원리 실제실행압축을분석하기전에, 알아야할 PE 구조및그실행압축기본원리를알아보자. [ 그림 30] PE 구조 Dos Stub 부분은 Dos에서실행할때 This program cannot be run in DOS mode 를출력해주는부분과파일이윈도우실행파일형식인 PE 포맷이라는걸알려주는부분이들어있다. File Header에는이실행파일이어느시스템 (i386, mips, alpha, powerpc) 에서실행될수있는지를알수있는정보가들어있다. 다음 Optional Header에는실행정보에대한기본정보들이들어있다.( 이후로나오는데이터구조들은 Visual C++ 프로그램에포함된 Winnt.h 파일내에포함된내용중관련부분을표시한것이다.) www.ncsc.go.kr 2

악성코드분석을위한 실행압축 해제기법 // Standard fields. DWORD SizeOfCode; DWORD SizeOfInitializedData; DWORD SizeOfUninitializedData; DWORD AddressOfEntryPoint; DWORD BaseOfCode; DWORD BaseOfData; // 코드크기 // 프로그램이코드가시작할주소 // NT additional fields. DWORD ImageBase; DWORD SectionAlignment; DWORD FileAlignment; DWORD SizeOfImage; DWORD SizeOfHeaders; WORD Subsystem; // 프로그램이상주할기본주소 // 메모리상 Section 기본단위 // 파일상 Section 기본단위 // 다음에설명할 Section Headers의수 // Windows Dos 창프로그램, 또는윈도우프로그램 IMAGE_DATA_DIRECTORY DataDirectory[15]; 제일아래에는 IMAGE_DATA_DIRECTORY 배열이있는데, 그중첫번째요소인실행파일에서외부에서사용할수있는함수목록을가리키는 Export Directory, 두번째요소인내부에서사용하는함수목록을가리키는 Import Directory, 열세번째요소인내부에서사용하는함수목록의주소를가리키는 Import Address Table 주소값을담고있다. #define IMAGE_DIRECTORY_ENTRY_EXPORT #define IMAGE_DIRECTORY_ENTRY_IMPORT #define IMAGE_DIRECTORY_ENTRY_IAT 0 // Export Directory 1 // Import Directory 12 // Import Address Table 다음 Section Headers에는실행코드나데이터를담은 Section에대한위치정보가들어있다. 이 Section Header는프로그램에따라 Section 수가다르기때문에그수가가변적이다. // Section Header BYTE Name[8]; DWORD VirtualSize; DWORD VirtualAddress; DWORD SizeOfRawData; DWORD PointerToRawData; // Section 이름 // 메모리상에서 Section 크기 // 메모리상에서 Section 위치 // 파일상에서 Section 크기 // 파일상에서 Section 위치 3 Monthly 사이버시큐리티

위와같은 Section Header 하나가다음으로오는 Section 하나하나에대응한다. 이후의 Section 1, 2,.., n 내부데이터는특별한형식이없으며실행코드자체나데이터그자체의형태이다. 간단하게그림을그려보면 [ 그림 31] 과같다. [ 그림 31] Section Headers 설명그림 이러한 Section Data 들이여러 Header 정보를바탕으로파일에서메모리로복사된후몇가지중간과정을거쳐실행되는것이다. 이정도로 PE 구조에대한간단한설명을마치고실행압축프로그램원리를알아보자. 실행압축을하는프로그램 (Packer) 은아래그림처럼왼쪽과같은실행파일을오른쪽과같은형태로만든다. 즉프로그램의실제 Code 및 Data를프로그램상의다른곳에압축저장해두고실행압축해제루틴 (Unpacker) 이먼저실행되어압축저장한부분들을풀어낸다음시작하는방법으로동작한다. [ 그림 32] 실행압축되기전과압축후의파일구조 3. PE 파일분석으로보는실행압축 그럼실제파일을실행압축하여어떤변화가있는지알아보자. 사용툴은 PE 포맷을보는데유용한툴인 PE Explorer이다. 실행압축방법은 UPX를사용했다. www.ncsc.go.kr 4

악성코드분석을위한 실행압축 해제기법 [ 그림 33] 실행압축되기전프로그램값 [ 그림 34] UPX 로실행압축된후프로그램값 [ 그림 33] 과 [ 그림 34] 에서, Size of Code, Base of Data, Size of Image 등이압축전과비교했을때바뀐것을알수있으며, 이에따라코드시작부분을가리키는 Entry Point 부분도바뀌었다. 또한 Data Directories의 Import Table과 Resource Table 내용도바뀌었지만그림에서나타내지는않았다. 그럼실제코드와데이터가들어있는 Section 내용을살펴보자. [ 그림 35] 실행압축되기전 Section 정보 5 Monthly 사이버시큐리티

[ 그림 36] 실행압축후의 Section 정보 [ 그림 35] 와 [ 그림 36] 을비교해보면,.rsrc란 Section 이름하나빼곤모든내용이다바뀌었다. [ 그림 35] 와 [ 그림 36] 은 notepad.exe를예로든것으로 Section 이름이.text,.data,.rsrc였지만, UPX0, UPX1,.rsrc로바뀌었으며, 그여러위치정보에관련된부분은같은것이하나도없다. 실행압축여부를확인하기위해꼭이렇게도구를써서확인해야하는것은아니며, WinHex와같은바이너리형태의파일내용을텍스트로볼수있는도구를이용해도가능하다. [ 그림 36] 과같이압축이안된경우알아볼수있는글자들이많은데반해압축된경우에는알아볼수있는글자들이얼마나오지않는다. [ 그림 37] WinHex 로본정상파일과실행압축파일비교 4. 파일보호기법 대부분의실행압축은파일크기를작게하기위한것이큰이유이다. 앞에서도언급했지만악성코드가압축을하는목적은파일크기를작게하여빠르게전파되도록하는한편분석을어렵게하기위한것으로실제악성코드에서사용되고있는실행압축해제를어렵게하는방법에대해서알아보자. 통상적으로분석을어렵게하기위해파일보호프로그램을사용하는데이를 Protector( 편의상 Crypter와 Protector들이있지만합쳐 Protector로한다.) 라한다. 자주사용되는것으로는 yoda Crypter, PE Crypt가있다. 이툴이사용하는기법으로는암호화, 코드치환, 디버거무력화, API Redirection 등몇몇기술이있다. 간단하게위기법들에대해설명해보면, 암호화는간단한 XOR 연산을이용해해석불가능한코드를만드는기법이고, 코드치환은실제같은일을하는다른코드로치환하는방법으로패턴을사용해어셈블리어수준이아닌좀더높은수준으로분석해주는툴을무력화시키며, 디버거무력화는글자그래도디버거로분석할 www.ncsc.go.kr 6

악성코드분석을위한 실행압축 해제기법경우프로그램자체가비정상종료되어버리며, API Redirection은함수호출을몇단계거치도록해분석을어렵게한다. 실행압축을한파일에위와같은기법을추가로사용한파일보호를실행하면 [ 그림 38] 과같은형태를지닌다. [ 그림 38] 실행압축과파일보호를했을때파일구조 이경우실행압축된파일에파일보호기능까지되어있으며, 이를위해 PEiD라는프로그램을이용하였다. [ 그림 39] 처럼어떤툴로보호가되었는지를알수있으며, [ 그림 39] 는 yoda s crypter 1.2라는방식으로파일보호기능이되어있음을나타내고있다. 그러나, 파일보호방식이최신의방식이라면확인이불가능할것이다. [ 그림 39] PEiD 를이용한파일검사 5. 실행압축해제의기본원리 그럼이제가장중요한실행압축을해제하기위한기본원리를알아보자. 무엇보다중요한건 결과적으로프로그램은실행돼야한다는점이다. 아무리압축을하고, 암호화를하더라도작동하지않으면아무런쓸모가없다. 그리고다음으로중요한건 실행대상이될프로그램기본구조자체는바꿀수없다. 즉, 줄하나를 7 Monthly 사이버시큐리티

이리꼬고저리꼬더라도줄은풀수있으며, 그줄이두개나세개의줄로되지는않는다는점이다. 이내용을기술적인내용으로바꾸면, 기본원리는실행압축프로그램이실행되는어느시점에서는압축되기전상태로돌아가야하며, 그때메모리상태를 Dump( 메모리내용을그대로파일로저장 ) 하고, Entry Point 를압축하기전위치로설정해주면된다는점이다. 특히어느시점을 OEP(Original Entry Point) 라고하며, PEP(Packed Entry Point, 실행압축된프로그램에서처음시작하는코드위치 ) 와비교한다. 이 OEP만찾을수있다면실행압축해제는아주쉽게이루어질수있다. [ 그림 40] 은실행압축프로그램을실행해서압축하기전상태로돌아간어느시점의메모리상태이다. 이때실행코드위치는 OEP 부분 9 이다. [ 그림 40] 파일보호및실행압축시 PEP, OEP 위치 위의예는약간일반적이기때문에, 실제 UPX 실행압축을사용한파일을예로들어설명해보겠다. 먼저 UPX로실행압축된프로그램의경우처음시작할때 UPX1에 PEP가있어 UPX1이실행 10 된다. 9. 앞의예도마찬가지로이건그림상 Entry Point가해당 Section 처음을가리키는것으로나와있을뿐이지대부분 Section 내의다른위치를가리킨다. 10. UPX1 Section에 Unpacker와 Code+Data가있다고의문을가질수있겠지만, 이처럼한 Section에 Code와 Data 모두들어갈수있다. 앞에서도나왔지만 Section Data에대한제한사항은없다. www.ncsc.go.kr 8

악성코드분석을위한 실행압축 해제기법 [ 그림 41] UPX 로실행압축된파일과실행압축이풀린후파일구조 UPX1의 Unpacker 루틴이끝나면 EIP가 UPX0의어느부분을가리키게된다. 즉이부분이 OEP이다. 그래서 EIP 값을검사하다가 UPX1에서 UPX0로넘어갈때프로그램작동을멈추면된다. yoda Crypter로보호된프로그램의경우, 처음시작을 yc라는 Section에서시작한다. yc에서.text와.data 의암호화를해제한다음수행코드부분을.text로넘긴다. 그렇지만 yoda Crypter의경우디버깅하는걸알아내서전혀다른곳으로분기해버린다. [ 그림 42] Yoda Crypter 로파일보호된파일구조 그후에 Access Violation에러를만나프로그램이종료돼버린다. 그래서다른방법으로 Stack을이용한다. 처음시작할때 Stack위치와보호가해제되었을때 Stack위치가같다는점을이용한다. 즉, Protector루틴을하나의함수라고하면, 함수가종료하면다시실행되기이전상태로돌려놓기때문에 Stack위치도이전상태로돌아올때가 Protector가종료한시점이며, 이때보호가해제된때라고예측하는것이다. 9 Monthly 사이버시큐리티

6. 실행압축해제실습그럼실제실행압축한파일을해제해보자. 먼저파일보호를한경우의해제와이후실행압축을푸는과정을알아보자. 파일보호와실행압축을둘다적용한경우는아래설명한방법대로하나씩풀어내면된다. 사용한파일은 Windows 2000에포함된 notepad.exe를 yoda Crypter로보호한파일 notepad_yoda.exe와 notepad.exe를 UPX로실행압축한 notepad_upx.exe이다. 그럼 UPX로실행압축한 notepad_upx.exe 파일을해제해보자. PEiD로이파일을검사하면 UPX 0.89.6-1.02-1.24라는메시지를출력하며 PE Explorer로보면 Section 이름들이 UPX0, UPX1으로되어있어 UPX로압축한것임을쉽게알아낼수있다. Ollydbg를사용해디버깅을시작하자. [ 그림 43] UPX 로실행압축된 notepad_upx.exe Section 및메모리위치 [ 그림 44] Trace 시브레이크조건설정 시작하면파일이압축되어있는거같다며, 에러를출력한다. 이때 아니오 를선택하고 Alt-M을눌러메모리구조에서 UPX0 위치를판단하고 Ctrl-T를눌러 EIP가 UPX0로가면멈추도록설정해놓는다. 그리고 Trace(Ctrl-F12) 한후얼마간시간이지난뒤멈추면 Push EBP 부분이보이는데이위치가압축이다풀린 OEP이다. 이메모리내용을 Dump 프로그램으로파일형태로만든다음시작위치를 PEP가아닌 OEP 위치로파일의 PE 내용중 Address of Entry Point 부분으로고쳐놓으면된다. [ 그림 45] 실행이 OEP 에서멈춰있는화면 www.ncsc.go.kr 10

악성코드분석을위한 실행압축 해제기법 [ 그림 46] Dump 할때 EP 를 PEP 에서 OEP 로변경하는화면 다음으로 yoda Cryter로보호한파일을해제해보자. notepad_yoda.exe의경우 Section 이름중에 yc가있으므로쉽게알수있다. Step Over(F8) 를몇번실행한다음처음만나는 Call 루틴에서멈춰 ESP를가리키는 Stack 영역에이메모리영역을읽으면멈추도록브레이크를걸어놓는다. 그리고실행시키면예외가발생하는데무시하고, 실행시키면예외처리루틴에서 OEP로이동시킨다. 그렇지만, 자세히보면대부분의함수는 PUSH EBP, MOV EBP ESP로시작하는데 MOV EBP ESP에서멈추었으므로 OEP 주소를 -1 수정해주어야한다. 이를메모리 Dump 프로그램을사용해서파일형태로만들고찾은 OEP 값으로 PE 파일의 Entry Point 부분을고쳐놓으면된다. [ 그림 47] 실행이 OEP 에서멈춘화면 [ 그림 48] Dump 할때 EP 를 PEP 에서 OEP 로변경하는화면 이렇게했지만실제 Dump한파일은실행이되지않는다. 왜냐하면, 메모리내용과실제실행파일과는몇가지차이점이존재하기때문이다. 파일에서 A위치와 B위치라고할경우, 메모리상에는각 Section마다다른위치에로드될수있기때문에위치가달라진다. 그래서파일내에메모리관련부분은메모리상에서위치를가진 RVA(Relative Virtual Address) 값을사용한다. 또다른문제는 IAT(Import Address Table) 에있다. Dump할때는그시스템의메모리위치를포함해 Dump가된다. 그렇지만각시스템마다함수들의메모리주소가다르고, Packer나 Protector에서 IAT를변경해버리기때문에다른곳에서도프로그램을실행할수있게 IAT내용을재구성해주어야한다. 메모리주 11 Monthly 사이버시큐리티

소로만나와있는부분을아래처럼함수이름으로찾아줄수있도록재구성해주어야한다. Import Address Table에대한데이터구조와간단한그림을그려보면다음과같다. [ 그림 49] Import Address Table 관련자료구조설명 이러한 IMAGE_IMPORT_DESCRIPTOR가각 dll마다하나씩있고, OriginalFirstThunk와 FirstThunk는 IMAGE_IMPORT_BY_NAME으로구성된배열을가리키고있다가실제메모리로프로그램이로드되면, FirstThunk 부분은실제각함수들의주소를가진배열로변경된다. IMAGE_IMPORT_DESCRIPTOR; // [ 그림 49] 의빨간색부분의데이터구조 DWORD OriginalFirstThunk;.. DWORD Name; DWORD FirstThunk; IMAGE_IMPORT_BY_NAME // [ 그림 49] 의파란색부분의데이터구조 WORD Hint; BYTE Name[1]; IMAGE_THUNK_DATA32 // [ 그림 49] 의연녹색부분의데이터구조 union { PDWORD Function; DWORD Ordinal; PIMAGE_IMPORT_BY_NAME AddressOfData; } u1; www.ncsc.go.kr 12

악성코드분석을위한 실행압축 해제기법이경우, 사람손으로하기에는귀찮은작업이므로, 대부분툴에서알아서함수이름을재구성해준다. Ollydbg의플러그인 OllyDump를보면다음과같은부분을볼수있다. 이부분을설정하면 IAT 부분까지 Dump와함께처리해준다. [ 그림 50] OllyDump 화면중 Import 관련부분 이렇게 IAT를수정하면파일을실행할수있다. 실행원리는복잡해보이지만, 현재는툴이잘나와있어서이런복잡한과정을거칠필요없이실행압축및파일보호를해제할수있다. 참고로 Ollydbg는 OEP를찾는스크립트, IAT Rebuilding Dump 등을플러그인상태로제공해주고있기때문에 PE 파일구조를모르더라도쉽게할수있다. 7. 맺음말 이처럼실행압축을해제하는것은그다지어렵지않으며, 인터넷에해제툴들이있다. 물론새로나온형태의경우에는디버거로일일이조사해가면서실행압축을해제하겠지만, 그런경우는많지않다. 본내용에대한궁금점이나추가적인정보를얻기위해서는아래에소개하는참고사이트를참조토록하고, 이글이앞으로나올실행압축된악성코드로인한피해예방에조금이나마도움이되기를바란다. 참고사이트 open reverse forums 국내 Reverse Engineering 하는사람들이주로찾는곳 https://ampm.ddns.co.kr/~reverse codediver 개인으로 Asprotect, PE, Soft-ICE에대한내용을주로다룬다. http://codediver.gg.ro/ 13 Monthly 사이버시큐리티

OllyDbg 사용자편의성이뛰어나고, 플러그인기능으로기능확장이충실한디버거 http://home.t-online.de/home/ollydbg/ OllyDbg User Forum OllyDbg 관련여러디버깅 FAQ와플러그인사이트링크포함 http://ollydbg.win32asmcommunity.net/ ASPack, AsProtect 많은쉐어웨어에서사용하는실행압축프로그램 ASPack을개발하는사이트 http://www.aspack.com/ Packers/Crypters/Protectors 수많은 Packers/Crypters/Protectors에대한설명이있는사이트 http://www.programmerstools.org/packers.htm Unpackers/decrypters/unprotectors 수많은 Unpackers/decrypters/unprotectors에대한설명이있는사이트 http://protools.anticrack.de/unpackers.htm Yoda Crypter Yoda Crypter를개발하는사이트 http://yodap.cjb.net Learn to Crack 초보자를위한설명들이많은사이트 http://www.learn2crack.com www.ncsc.go.kr 14