Content 0x01 Introduce

Similar documents
View Licenses and Services (customer)

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

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

Windows 8에서 BioStar 1 설치하기

Oracle VM VirtualBox 설치 VirtualBox에서 가상머신 설치 가상머신에 Ubuntu 설치

SIGIL 완벽입문

IRISCard Anywhere 5

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

SBR-100S User Manual

Microsoft PowerPoint - XUSB_제품메뉴얼_140206

메뉴얼41페이지-2

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

ThinkVantage Fingerprint Software

쓰리 핸드(삼침) 요일 및 2405 요일 시간, 및 요일 설정 1. 용두를 2의 위치로 당기고 반시계방향으로 돌려 전날로 를 설정합니다. 2. 용두를 시계방향으로 돌려 전날로 요일을 설정합니다. 3. 용두를 3의 위치로 당기고 오늘 와 요일이 표시될 때까지 시계방향으로

게임 기획서 표준양식 연구보고서

Deok9_Exploit Technique

*Revision History 날짜 내용 최초작성 Tel Fax [2] page

ISP and CodeVisionAVR C Compiler.hwp

슬라이드 1

Install stm32cubemx and st-link utility

Microsoft Word - Armjtag_문서1.doc

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

MF Driver Installation Guide

소규모 비즈니스를 위한 플레이북 여기서 다룰 내용은 다음과 같습니다. 1. YouTube 소개 2. YouTube에서 비즈니스를 위한 채널 만들기 3. 눈길을 끄는 동영상 만들기 4. 고객의 액션 유도하기 5. 비즈니스에 중요한 잠재고객에게 더 많이 도달하기

Adobe Flash 취약점 분석 (CVE )

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

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

특징 찾아보기 열쇠 없이 문을 열 수 있어요! 비밀번호 및 RF카드로도 문을 열 수 있습니다. 또한 비밀번호가 외부인에게 알려질 위험에 대비, 통제번호까지 입력해 둘 수 있어 더욱 안심하고 사용할 수 있습니다. 나만의 비밀번호 및 RF카드를 가질 수 있어요! 다수의 가

Index 1. Intro Install Connect Scratch 1.4 (Offline Editor) Scratch 2.0 (Online Editor) Connect f

슬라이드 1

슬라이드 1

tiawPlot ac 사용방법

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

ActFax 4.31 Local Privilege Escalation Exploit

1

hlogin2

Microsoft 을 열면 깔끔한 사용자 중심의 메뉴 및 레이아웃이 제일 먼저 눈에 띕니다. 또한 은 스마트폰, 테블릿 및 클라우드는 물론 가 설치되어 있지 않은 PC 에서도 사용할 수 있습니다. 따라서 장소와 디바이스에 관계 없이 언제, 어디서나 문서를 확인하고 편집

마지막 변경일 2018년 5월 7일 ** 이항분포와 정규분포의 관계 ** Geogebra와 수학의 시각화 책의 3.2소절 내용임. 가장 최근 파일은 링크를 누르면 받아 보실 수 있습니다.

사용설명서를 읽기 전에 ios용 아이디스 모바일은 네트워크 연결을 통해 ios 플랫폼 기반의 모바일 기기(iOS 버전 6.0 이상의 ipod Touch, iphone 또는 ipad)에서 장치(DVR, 네트워크 비디오 서버 및 네트워크 카메라)에 접속하여 원격으로 영상을

슬라이드 1


비디오 / 그래픽 아답터 네트워크 만약에 ArcGolbe를 사용하는 경우, 추가적인 디스크 공간 필요. ArcGlobe는 캐시파일을 생성하여 사용 24 비트 그래픽 가속기 Oepn GL 2.0 이상을 지원하는 비디오카드 최소 64 MB 이고 256 MB 이상을 메모리

1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot)

윈도 모바일 6.1을 OS로 사용하는 스마트폰(옴니아2 등)에서의 Tcl/Tk의 사용

B2B 매뉴얼

< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10

슬라이드 1

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

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

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

EEAP - Proposal Template

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Xcrypt 내장형 X211SCI 수신기 KBS World 채널 설정법

슬라이드 1

사용설명서를 읽기 전에 안드로이드(Android)용 아이디스 모바일은 네트워크 연결을 통해 안드로이드 플랫폼 기반의 모바일 기기에서 장치 (DVR, NVR, 네트워크 비디오 서버, 네트워크 카메라) 에 접속하여 원격으로 영상을 감시할 수 있는 프로그램입니다. 장치의 사

서비스 구성. 서비스 정의. 심플CRM 주요 기능 구성 0 0. 다운로드 및 설치. 기본 구성 6 6. 제공사양 0 심플CRM 표준형 6 심플CRM 녹취형 7 사용하기. 서비스 신청. 홈페이지 로그인 및 인증 안내 가입자 인증 비밀번호 재설정 비밀번호 찾기

Microsoft PowerPoint - [부가상품]USBsafe 사용자 메뉴얼_111103

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

Microsoft PowerPoint - 15-MARS

Studuino소프트웨어 설치

1

Microsoft Word - src.doc

Cubase AI installation guide

Microsoft PowerPoint - USB다운로더PC연결.pptx

Microsoft Word - Korean_뷰어 메뉴얼_공용_ADVR&SWi_.doc

vi 사용법

Chapter ...

1. 외국어 메뉴판 만들기 (상세 메뉴판) 외국어 메뉴판 만들기 서비스 중 상세 메뉴판 만들기 코너를 이용하기 위해서는, 먼저 한국관광공사 홈페이지 ( 회원가입을 해야 합니다. 상세 메뉴판 만들기 코너를 이용하면, 메뉴

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

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

Mango-E-Toi Board Developer Manual

캘크 시작하기

ICAS CADWorx SPLM License 평가판설치가이드

IP Cam DDNS 설정설명서(MJPEG) hwp

Microsoft Word - FunctionCall

1. 무선 이미지 유틸리티 설명 1-1. 기능 이 Wireless Image Utility 는 안드로이드용 응용 프로그램입니다. 안드로이드 태블릿 또는 안드로이드 스마트폰에서 사용할 수 있습니다. 안드로이드 기기에 저장된 파일을 프로젝터로 무선 전송 컴퓨터에서 USB

NTD36HD Manual

<41736D6C6F D20B9AEBCADBEE7BDC42E687770>

(SW3704) Gingerbread Source Build & Working Guide

Microsoft PowerPoint _사용자매뉴얼.ppt

설치 순서 Windows 98 SE/Me/2000/XP 1 PC를 켜고 Windows를 시작합니다. 아직 컴퓨터에 프린터를 연결하지 마십시오. 2 PC에 P-S100 CD-ROM(프 린터 드라이버)을 삽입합니다. 3 설치 프로그램을 시작합니다. q CD-ROM의 PS1

iOS5_1±³

Slide 1

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Microsoft PowerPoint - chap05-제어문.pptx

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

IVR-1000 v0.4 (운영프로그램)

Office 365 사용자 가이드

새로운 지점에서 단이 시작하는 경우 기둥코로 시작하라고 표시합니다. 기둥코(standing stitch)로 시작하는 방법은 YouTube 에서 찾아볼 수 있습니다. 특수 용어 팝콘뜨기: 1 코에 한길긴뜨기 5 코, 바늘을 빼고 첫번째 한길긴뜨기코의 앞에서 바늘을 넣은

메인 메뉴 윗쪽 패널에 있는 프로그램 메뉴나 위치 메뉴를 메인 메뉴라고 부릅니다. -프로그램 메뉴: 현재 자신의 리눅스에 설치된 프로그램을 볼 수 있습니다. 오픈오피스나 메신저, DVD보기 프로그램 같은 것들이 등록되며 시스템에 설치된 코덱이나 라이브러리까지 보시려면


Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

볼륨 조절 아이콘 표시하기 만일 알림 영역에 볼륨 조절 아이콘이 표시되지 않았다면 아래의 방법을 따라합니다. 1> [시작] - [제어판] - [사운드 및 오디오 장치] 아이콘을 더블 클릭합니다. 2) [사운드 및 오디오 장치 등록 정보] 대화상자에서 [볼륨] 탭을 클릭

Getting Started With Parallels Desktop¢ç 9

작성자 : 기술지원부 김 삼 수

Endpoint Protector - Active Directory Deployment Guide

슬라이드 1

목 차

B _00_Ko_p1-p51.indd

Transcription:

Evan s Debugger(EDB) Manual By bl4ck3y3 ( http://hisjournal.net/blog ) Abstract 이 문서는 리눅스의 디버깅툴인 Evan s Debugger을 소개하고 사용방법을 설명하기 위해 작성되었습 니다. 이 문서에서 설명하는 Evan s Debugger는 0.9.6 버전임을 알립니다. 1

Content 0x01 Introduce ---------------------------------------------------------------------------------------------------------------------------------- 3 1.1 EDB와 GDB ------------------------------------------------------------------------------------------------------------------------ 3 0x02 Install ----------------------------------------------------------------------------------------------------------------------------------------- 6 0x03 Plugins --------------------------------------------------------------------------------------------------------------------------------------- 8 3.1 Analyzer ------------------------------------------------------------------------------------------------------------------------------ 8 3.2 BinarySearcher ----------------------------------------------------------------------------------------------------------------- 8 3.3 Bookmarks ------------------------------------------------------------------------------------------------------------------------ 9 3.4 BreakpointManager ------------------------------------------------------------------------------------------------------- 9 3.5 CheckVersion -------------------------------------------------------------------------------------------------------------------- 9 3.6 DumpState ---------------------------------------------------------------------------------------------------------------------- 10 3.7 Environment ------------------------------------------------------------------------------------------------------------------- 10 3.8 FunctionFinder --------------------------------------------------------------------------------------------------------------- 10 3.9 Hardware BreakpointManager --------------------------------------------------------------------------------- 11 3.10 HeapAnalyzer ----------------------------------------------------------------------------------------------------------------- 11 3.11 OpcodeSearcher ----------------------------------------------------------------------------------------------------------- 11 3.12 OpenFiles ------------------------------------------------------------------------------------------------------------------------ 12 3.13 ReferenceSearcher ------------------------------------------------------------------------------------------------------ 13 3.14 StringSearcher --------------------------------------------------------------------------------------------------------------- 13 3.15 SymbolViewer ---------------------------------------------------------------------------------------------------------------- 14 0x04 How to use ---------------------------------------------------------------------------------------------------------------------------- 15 4.1 화면 구성 --------------------------------------------------------------------------------------------------------------------------- 15 4.2 Disasm ----------------------------------------------------------------------------------------------------------------------------- 16 4.3 Data Dump ---------------------------------------------------------------------------------------------------------------------- 17 4.4 Register ---------------------------------------------------------------------------------------------------------------------------- 18 4.5 Bookmarks ---------------------------------------------------------------------------------------------------------------------- 19 4.6 Stack --------------------------------------------------------------------------------------------------------------------------------- 20 4.7 Debug ------------------------------------------------------------------------------------------------------------------------------- 21 0x05 Tip -------------------------------------------------------------------------------------------------------------------------------------------- 22 5.1 문자열을 검색하여 루틴 찾기 ----------------------------------------------------------------------------------------- 22 5.2 Argument 지정 ---------------------------------------------------------------------------------------------------------------- 24 5.3 함수 호출 빈도로 루틴 찾기 ------------------------------------------------------------------------------------------- 25 Reference ------------------------------------------------------------------------------------------------------------------------------------------------- 27 2

0x01. Introduce 리눅스에는 GDB라는 강력한 디버깅툴이 있습니다. ELF 파일에 대한 디버깅, 메모리를 덤프한 CORE 파일, 소스 파일, 커널에 대한 디버깅도 가능하죠. 하지만 GDB는 Command Line Interface 기반입니 다. 사용상의 불편은 둘 째 치더라도 현재 디버깅하는 부분의 상태를 한 눈에 확인하기가 힘듭니다. 그 래서 리눅스에서 디버깅하기 편한 툴이 뭐 없을까하고 찾아헤매었지요. 그러던 중에 찾은 것이 Evan s Debugger(이하 EDB로 통칭)입니다. EDB는 Evan Teran이 만든 리눅스용 디버깅툴입니다. 현재 0.9.10 버전까지 릴리즈되었으며, GPL2 라이센스에 의한 오픈소스입니다. QT4 기반의 Graphic User Interface인데, 사용해보면 OllyDbg와 많이 유사합니다. 실제로 OllyDbg가 EDB의 롤모델이라고 합니다. 1.1. EDB와 GDB 앞서 소개에서도 GDB를 언급했습니다. 그만큼 GDB는 리눅스에서 땔래야 땔 수 없는 강력하고 대중 적인 디버깅툴입니다. 리눅스에서 디버깅툴을 소개한다면 GDB가 빠질 수 없죠. 그래서 EDB와 GDB를 비교하는 자리를 마련했습니다. [표 1] EDB와 GDB 비교 3

[표 1]은 객관적으로 EDB와 GDB를 비교한 내용입니다. 대체로 GDB가 EDB보다 우위에 있음을 알 수 있습니다. 다만, EDB는 GDB와 달리 GUI 기반입니다. GUI와 CLI의 우위에 대해서는 논란의 여지가 있겠지만, 초보자도 쉽게 접근할 수 있냐는 물음에 대해서는 GUI가 분명 강점입니다. [그림 1] GDB에서의 Disasm 내용 확인 [그림 2] GDB에서의 레지스터, 스택 확인 4

GDB는 [그림 1]과 [그림 2]와 같이 어떤 내용을 확인하려면 그때마다 명령어를 입력해야하고 그 내용 만 한 화면에서 확인할 수 있습니다. [그림 3] EDB의 메인 화면 그러나 EDB는 [그림 3]과 같이 메인화면에서 모두 한 눈에 확인할 수 있습니다. 그리고 EDB는 문법에서 GDB와 차이가 있습니다. [그림 1]에서처럼 GDB는 Disasm 내용을 AT&T 문법으로 보여줍니다. 그러나 EDB는 [그림 3]과 같이 Intel 문법으로 보여주지요. 추후 EDB는 AT&T 문법으로도 볼 수 있을 예정입니다. 이것은 OllyDbg가 문법을 선택할 수 있는 것과 같습니다. 5

0x02. Install 원래는 http://www.codef00.com/projects.php#debugger 에서 소스파일을 다운로드하여 컴파 일해야 하지만, 사용자 환경에 의해 설치가 잘 되지 않는 경우가 있습니다. 그리고 소스파일로 설치하는 방법은 정보보호119 의 binoopang 님이 문서로 잘 설명하셨기 때문에 여기서는 생략하겠습니다. 해 당 문서의 주소는 아래 Reference에 남겨놓았습니다. Fedora에서는 EDB를 패키지로 관리하고 있습니다. 만약 Fedora 사용자라면, 아래 명령어를 터미널 에서 입력하면 쉽게 설치가 됩니다. yum install edb 그런데 Ubuntu에서는 edb라는 이름으로 전혀 다른 패키지가 관리되고 있습니다. 그래서 BackTrack 4에서 관리되는 deb 패키지를 다운로드하여 설치해야 합니다. Ubuntu 사용자는 아래 링크를 따라 다 운로드하여 deb 패키지를 설치하면 됩니다. http://repo.offensive-security.com/dist/bt4/binary/evans-debugger.deb 만약 Gentoo Linux 사용자라면 개발자가 만들어놓은 스크립트 파일로 쉽게 설치할 수 있습니다. 아래 문서를 다운로드하여 실행하면 됩니다. http://www.codef00.com/projects/edb-0.9.10.ebuild BackTrack 4는 Ubuntu 기반의 리눅스 배포버전으로, 해킹 분석을 위한 OS입니다. 여기에는 각종 다양한 분석툴들이 관리되고 있으며, EDB도 기본적으로 설치되어 있습니다. 6

설치 후 실행해서 [그림 4]와 같은 에러창이 나타난다면 플러그인의 경로 설정을 해줍니다. [그림 4] Plugin을 로딩하지 못하면 나오는 에러창 [그림 4]의 OK 버튼을 누르면 Configure 창이 나옵니다. 거기서 Direcories 탭을 선택하면 [그림 5] 와 같습니다. 이 곳에서 플러그인의 경로를 설정하면 정상적으로 EDB가 동작합니다. 보통은 /usr/lib/edb/ 아래에 플러그인들이 있습니다. [그림 5] Plugin의 경로 설정 7

0x03. Plugins EDB는 분석하는데 유용한 기능들을 플러그인 형식으로 지원하고 있습니다. 지금은 모든 플러그인들 을 EDB 개발자인 Evan Teran이 만들고 있습니다. 중간마다 내용이 없는 항목이 있습니다. 그것은 정 상적으로 아직 동작되지 않는 플러그인들입니다. 3.1. Analyzer Opcode를 더 정확하게 분석해줍니다. 그리고 함수 단위로 묶어서 경계를 나타내줍니다. 3.2. BinarySearcher 아스키, 유니코드, 헥스값을 검색하는 플러그인입니다. [그림 6] BinarySearcher [그림 6]과 같이 문자열이나 Opcode를 입력한 후 Find 버튼을 클릭하여 찾습니다. 검색 결과는 가운 데 박스에 주소 형식으로 나옵니다. 즉, 검색 결과로 나온 주소로 찾아가면 해당 문자열이나 Opcode가 있습니다. 검색 결과를 더블클릭하면 Data Dump 창에 표시해줍니다. Disasm 창에서 보기 위해서는 직접 주소로 찾아가야 합니다. 찾아가는 방법은 이후 How to use 에서 설명하도록 하겠습니다. 8

3.3. Bookmarks EDB의 메인화면에 Bookmarks 창을 보여줍니다. 3.4. BreakpointManager [그림 7] BreakpointManager [그림 7]과 같은 브레이크포인트 관리창을 보여줍니다. 여기에서 브레이크포인트를 추가, 삭제할 수 있고 특정 조건을 설정할 수도 있습니다. 3.5. CheckVersion 새로운 버전이 있는지 확인합니다. [그림 8] CheckVersion 만약 지금 사용중인 버전보다 최신 버전이 있다면 [그림 8]과 같은 창을 보여줍니다. EDB가 시작할 때 9

마다 새로운 버전이 있는지 확인하도록 설정할 수 있습니다. 3.6. DumpState 3.7. Environment 3.8. FunctionFinder 각 섹션별로 함수를 찾아주는 플러그인입니다. [그림 9] FunctionFinder [그림 9]와 같이 섹션을 선택한 후 Find 버튼을 누르면 그 섹션 안에 있는 함수들을 찾아냅니다. 함수 의 시작과 끝의 주소가 나오고, 함수의 크기와 함수가 호출되는 횟수도 나옵니다. 함수를 선택하고 더블 클릭하면 Disasm 창에서 그 함수로 이동합니다. 10

3.9. Hardware BreakpoinManager [그림 10] Hardware BreakpointManager [그림 10]과 같이 하드웨어 브레이크포인트를 관리합니다. Address에 브레이크포인트를 걸 주소를 입력하고 Type에서 실행, 쓰기, 읽기/쓰기 중에서 선택한 후 Enabled 를 체크하면 브레이크포인트가 걸립니다. OllyDbg와 마찬가지로 하드웨어 브레이크포인트는 4개까지만 설정할 수 있습니다. 이것은 인텔 아키 텍쳐에서 하드웨어 브레이크포인트를 저장하는 디버그 레지스터가 4개만 존재하기 때문입니다. 일반적 인 브레이크포인트와 하드웨어 브레이크포인트의 차이는 아래 Reference를 참조하시기 바랍니다. 3.10. HeapAnalyzer 3.11. OpcodeSearcher Opcode를 찾아주는 플러그인입니다. 앞의 BinarySeacher와 다른 점은 OpcodeSearcher는 각 섹션 에서 특정 Opcode를 찾는다는 점입니다. 11

[그림 11]처럼 jump 명령어를 모두 찾아줍니다. 여기서 참조하는 레지스터값을 조건으로 둘 수 있습 니다. [그림 11]의 결과는 모두 call eax나 jmp eax입니다. 이 중에서 하나를 선택하여 더블클릭하면 Disasm 창에서 그 Opcode가 있는 주소로 이동합니다. [그림 11] OpcodeSearcher 3.12. OpenFiles [그림 12] OpenFiles 12

디버깅중인 프로세스가 열고 있는 파일들을 보여줍니다. 리눅스는 프로세스의 모든 것을 파일처럼 관 리하기 때문에 특정 파일 뿐만 아니라 [그림 12]처럼 소켓에 대한, 메모리에 대한 것도 보여줍니다. 3.13. ReferenceSearcher 특정 주소를 참조하는 Opcode를 찾는 플러그인입니다. [그림 13] ReferenceSearcher [그림 13]과 같이 상단의 입력란에 주소를 입력하고 Find 버튼을 누르면 입력한 주소를 참조하는 Opcode가 있는 주소를 보여줍니다. 나온 결과를 선택하여 더블클릭하면 Data Dump 창에서 Opcode 가 있는 곳으로 이동합니다. 3.14. StringSearcher 문자열만 찾아주는 string 프로그램과 같습니다. 섹션을 선택한 후 Find 버튼을 클릭하면, Results 란에 문자열들이 모두 출력됩니다. BinarySearcher와 중복되는 듯 하지만, BinarySearcher는 Code 를 중심으로 검색하고 StringSearcher는 문자열을 중심으로 검색한다는 점에서 차이가 있습니다. 13

[그림 14] StringSearcher [그림 14]에서 출력된 문자열을 더블클릭하면 Data Dump창에서 문자열이 있는 지점으로 이동합니 다. 3.15 SymbolViewer 14

0x04. How to use EDB의 주요기능들인 플러그인들을 알아보았습니다. 이제는 EDB를 어떻게 사용하는지 알아보겠습니 다. 원래 EDB는 OllyDbg를 롤모델로 하여 제작되었기 때문에 인터페이스나 사용방법에 대해서도 OllyDbg와 많이 유사합니다. 그러므로 부담 없이 읽어 내려가시면 금방 익숙해질 것입니다. 4.1 화면 구성 화면 구성 역시 OllyDbg와 유사합니다. 그림을 보면서 하나하나 살펴보겠습니다. [그림 15] EDB의 화면 구성 [그림 15]에서 EDB의 메인 화면을 5개의 영역으로 나누었습니다. 그 중 1번 영역이 Disasm 창입니 다. EIP 주소와 Opcode, 그 Opcode를 해석하여 Intel 문법으로 출력한 부분이 있습니다. 아쉬운 점은 OllyDbg와 달리 코멘트가 없다는 점입니다. 분석할 때 코멘트의 유용성은 두 말 할 필요 없을 정도로 높 기 때문에 매우 아쉬운 부분입니다. 아래 쪽의 작은 창은 OllyDbg와 마찬가지로 현재 EIP에 대한 정보 를 보여줍니다. 2번 영역은 Data Dump 창입니다. 이 곳에서 메모리나 바이너리 파일의 Raw 값을 볼 수 있습니다. 15

그리고 아스키 값도 같이 볼 수 있습니다. 좌측의 + 버튼을 누르면 Data Dump 창이 하나 더 생기면 서 탭이 활성화 됩니다. 그리고 우측의 X 버튼을 누르면 현재 보여지는 탭의 Data Dump 창을 닫습니 다. 3번 영역은 Register 창입니다. 범용 레지스터, 플래그, 세그먼트, FPU의 정보를 볼 수 있습니다. 4번 영역은 Bookmarks 창입니다. Bookmarks 플러그인으로 보이거나 숨기게 할 수 있습니다. 5번 영역은 Stack 창입니다. 스택의 내용을 확인할 수 있습니다. 이 5개의 창은 회색 부분을 드래그&드롭을 이용하여 배치를 바꿀 수 있습니다. 혹은 별도의 창으로 때 어낼 수도 있습니다. 4.2. Disasm Disasm 창에서 마우스 오른쪽 버튼을 클릭하면, 팝업 메뉴가 활성화됩니다. [그림 16] Disasm 창의 메뉴 [그림 16]은 활성화된 메뉴를 찍어낸 것입니다. 9개의 메뉴가 있으며, 메뉴 이름이 매우 직관적이기 때문에 따로 설명하지는 않겠습니다. 다만, 주의할 점은 Goto Address 메뉴를 이용할 경우입니다. 일반적으로 주소를 08XXXXXX와 같이 입력하지만, 여기에서는 0x08XXXXXX와 같이 입력해야 이동합 16

니다. 브레이크포인트를 걸 때, [그림 16]의 메뉴에서 선택해도 되지만, EIP를 더블클릭하여도 브레이크포 인트가 설정됩니다. Analyzer 플러그인을 사용하면, 함수 단위로 구분을 지어주고 jump 명령어가 있으면 화살표로 방향 을 알려줍니다. Disasm 창에서 참고할 점이 하나 있는데, 마우스휠로 내리거나 방향키로 내리면 Opcode와 해석한 내용이 바뀔 때가 있습니다. 이것은 1byte 단위씩 Opcode가 해석되다보니 1byte씩 밀릴 때마다 내용 이 다르게 해석되기 때문입니다. 그럴 때는 다시 한 번 더 내려주면 정상적으로 보입니다. 4.3. Data Dump Data Dump 창은 화면 구성을 설명할 때 언급했듯이 메모리나 바이너리 파일의 Raw 값을 보여줍니 다. 이 곳에서 마우스 오른쪽 버튼을 클릭하면 [그림 17]과 같은 메뉴가 나옵니다. [그림 17] Data Dump 창의 메뉴 17

여기의 메뉴들 역시 직관적으로 설명되어 있기 때문에 별도로 설명하지는 않겠습니다. Goto Address 메뉴 역시 Disasm 창의 메뉴와 같습니다. Raw 값이 보이는 부분이나 아스키 값이 보이는 부분을 드래그하여 특정 부분만 선택할 수도 있으며, Save To File 을 이용하면 수정한 Opcode를 파 일로 저장할 수 있습니다. 4.4. Register 각각의 레지스터를 확인할 수 있는 Register 창은 마우스 오른쪽 버튼을 클릭하면 단 3개의 메뉴만 보 입니다. [그림 18] Register 창의 메뉴 [그림 18]과 같이 레지스터에 저장된 주소를 따라가는 메뉴만 있습니다. 첫 번째와 두 번째는 Data Dump 창에, 세 번째는 Stack 창에 내용을 보여줍니다. 두 번째 메뉴에서 New Tab 이라고 적혀 있는 것은 Data Dump 창에 새로운 탭을 활성화하여 보여주는 것입니다. Register 창에서 중요한 것은 EFLAGS 값을 조작하는 방법입니다. OllyDbg에서는 간단히 클릭만 함 으로써 플래그가 조작되었지만, EDB는 약간의 계산을 함으로써 조작을 해야합니다. 이 때 각 플래그의 위치와 값을 알아야 조작할 수 있습니다. EFLAGS에 보이는 값은 16진수입니다. 즉, 각 플래그의 값들을 합친 값입니다. 그리고 EFLAGS 아래 에 각 플래그의 상태가 보입니다. OF, DF, SF, ZF, AF, PF, CF의 7개 플래그가 있습니다. 대문자로 보 이는 것은 비트 값이 1로 세팅되었다는 뜻이고, 소문자로 보이는 것은 비트 값이 0이라는 것입니다. 우선, 플래그를 조작하기 위해서 EFLAGS 값을 2진수 바이너리 값으로 바꾸어야 합니다. 가령, EFLAGS가 00000246이면, 2진수 바이너리 값은 01001000110입니다. 그리고 각 플래그의 위치 를 고려하여 새로 세팅합니다. 18

[그림 19] 해커 지망생들이 알아야 할 Buffer Overflow Attack의 기초 에서 발췌 각 플래그의 위치는 [그림 19]를 참조합니다. EFLAGS에는 IF, TF는 생략되어 있습니다. 이 플래그들 은 특정 Opcode가 적용되지 않으면 보통 1로 세팅됩니다. 방금 전의 EFLAGS 값에서 ZF가 1로 세팅되 어 있음을 알 수 있습니다. 이것을 0으로 바꾸면 01000000110이 되고 16진수로 변경하면, 206이 됩니다. EFLAGS를 더블클릭하여 편집 창을 띄운 후 변경한 값을 입력하고 OK 버튼을 누르면 플래그 가 변경됩니다. 실제로 대문자였던 Z가 소문자 z로 바뀌는 것을 확인할 수 있습니다. ZF는 jump 명령어에 많이 쓰이므로 자주 조작하게 되는 플래그입니다. 이 외의 플래그들에 대해서 자 세한 내용은 Reference에 나와 있는 WOWHACKER 의 달고나 님의 문서를 참조하시기 바랍니다. 4.5. Bookmarks Bookmarks는 자주 들여다 볼 Opcode의 주소를 설정하여 간편하게 찾아갈 수 있는 기능입니다. Add 버튼을 눌러서 주소를 입력하고 OK 버튼을 클릭하면 북마크가 설정됩니다. 이 때 주소는 Goto Address 처럼 0x08XXXXXX와 같은 형식으로 입력해야 합니다. Del 과 Clear 버튼은 설정한 북마크 를 지우는 메뉴입니다. 19

4.6. Stack 메모리의 스택을 확인할 수 있고 스택의 내용을 조작할 수 있습니다. [그림 20] Stack 창의 메뉴 역시 이번에도 마우스 오른쪽 버튼을 클릭하면 [그림 20]과 같은 메뉴가 보입니다. 메뉴들이 직관적이 므로 이번에도 따로 설명하지는 않겠습니다. 방금 전 스택을 조작할 수 있다고 하였는데, Push DWORD, Pop DWORD 가 그 역할을 합니다. Push DWORD 는 ESP를 4 감소시키면서 ESP의 내용을 변경합니다. 이 때 16진수 값이나 10진수 값을 넣을 수 있습니다. 반대로 Pop DWORD 는 ESP를 4 증가시킵니다. 이 때는 단지 ESP만 변경할 뿐이지 스택의 내용은 변하지 않습니다. Lock Stack 는 ESP만 변경할 뿐, 스택의 내용은 변경시키지 않는 기능입니다. 20

4.7. Debug 디버깅을 위한 기초적인 기능들을 살펴보겠습니다. [그림 21] Debug 메뉴 EDB의 상단 메뉴에서 Debug 를 클릭하면, [그림 21]과 같은 메뉴가 보입니다. OllyDbg를 써 봤다면 꽤 친숙할 것입니다. 아래 [표 2]에서 각 메뉴를 정리했습니다. [표 2] Debugging Menu 21

0x05. Tip 5.1. 문자열을 검색하여 루틴 찾기 프로그램을 분석할 때 문자열을 검색하여 루틴을 찾는 것은 반드시 알아야 할 기법이므로 EDB로 어떻 게 할 수 있는지 알아보겠습니다. [그림 23] 문자열 검색 [그림 23]과 같이 BinarySearcher를 이용하거나 StringSearcher을 이용하여 문자열을 검색합니다. 그러면 문자열이 저장되어 있는 주소를 알 수 있습니다. 이 때 찾을 문자열은 프로그램을 실행했을 때 출 력되는 문자열입니다. [그림 23]에서 08094c22 를 더블클릭하면 Data Dump 창에서 문자열을 확인 할 수 있습니다. ReferenceSearcher에서 방금 전에 찾은 주소를 입력하여 문자열을 참조하는 Opcode를 찾습니다. [그림 23]에서는 0x0804842a에 해당 루틴이 있음을 찾았습니다. 22

루틴이 있는 주소를 알아냈으면 Disasm 창에서 루틴이 있는 곳으로 이동합니다. [그림 24] 문자열을 출력하는 루틴 [그림 24]처럼 Goto Address 를 이용합니다. 이 때 0x08XXXXXX와 같이 입력해야 함을 주의해야 합니다. 0x0804842a로 이동하면 [그림 24]와 같은 루틴이 있습니다. 그리고 0x08048429에서 pass..world? 가 저장된 주소를 스택에 넣는 것을 확인할 수 있습니다. 그리고 0x08048431에서 함 수를 호출하여 문자열을 출력합니다. 23

5.2. Argument 지정 프로그램들 중에서는 실행할 때 인자를 입력해야 하는 경우가 있습니다. 그런데 EDB로 바이너리 파일 을 열어서 분석하다 보면 이런 인자가 입력되지 않아 정상적인 분석이 힘들 때가 있습니다. 그런 경우를 대비하여 EDB에는 인자를 지정하는 메뉴가 있습니다. Options에서 Application Arguments를 열면 인자를 지정할 수 있는 창이 나타납니다. 이 곳에 인자를 입력한 후, 바이너리 파일을 열면 인자가 적용 되었음을 알 수 있습니다. 또는 터미널에서 EDB를 실행하여 인자를 같이 넣어줄 수도 있습니다. 터미널에서 실행하기 위해서는 run 옵션을 사용합니다. [그림 25] 터미널에서 EDB를 실행 [그림 25]는 터미널에서 run 옵션을 이용하여 실행한 화면입니다. fsb#1이라는 프로그램은 인자로 문자열을 지정하여 출력하는 간단한 프로그램입니다. 빨간 박스 안을 보면 run 옵션을 입력한 후 프로 그램의 경로와 인자를 지정하였습니다. EDB의 Stack 창에서 인자 aaaa 가 정확히 들어갔음을 알 수 있습니다. edb run [경로] [인자] 24

5.3. 함수 호출 빈도로 루틴 찾기 FunctionFinder를 이용하여 특정 항수가 호출되는 빈도로 루틴을 찾을 수도 있습니다. 이런 경우는 보 통 암/복호화가 이루어지는 프로그램을 분석할 때 쉽게 적용할 수 있는 방법입니다. 다음 예시로 들 프 로그램은 로또를 시뮬레이션하는 프로그램입니다. 이 경우는 아직 EDB가 한글을 지원하지 않기 때문에 문자열을 검색할 수 없는 경우입니다. [그림 26] 로또 시뮬레이션 하지만 프로그램을 실행해보니 특정 함수가 수 차례 반복적으로 호출되는 것을 추측할 수 있습니다. 이 럴 때 역시 함수가 호출되는 빈도를 이용하여 특정 루틴을 찾을 수가 있겠습니다. [그림 27] 함수의 호출 빈도로 검색 25

FunctionFinder로 함수가 있을법한 섹션을 검색합니다. 보통은 제일 상단의 섹션에 대부분의 함수가 있지만, 꼭 그렇다는 보장이 없으므로 몇 차례의 시행 착오가 필요합니다. [그림 27]처럼 References 를 클릭하면 호출 빈도순으로 정렬됩니다. 여기서 제일 많이 호출되는 함수나 특정 횟수 만큼 호출되는 함수를 선택하여 더블클릭합니다. [그림 28] 시뮬레이션한 게임을 출력하는 루틴 Disasm 창에 [그림 28]과 같이 0x08048594의 루틴이 보입니다. 함수의 시작 지점에 브레이크포인 트를 걸어서 F9를 눌러보니 F9를 누를때마다 시뮬레이션된 게임이 하나씩 출력됨을 확인하였습니다. 이 같이 함수의 호출 빈도로 루틴을 찾는 방법은 매우 유용하나 여러 차례의 시행착오를 겪여야 하며 그런 경험을 바탕으로 활용할 수 있는 분석 방법입니다. 26

Reference edb :: http://www.codef00.com/projects.php#debugger binoopang 님의 문서 :: http://linux-virus.springnote.com/pages/3512025 디버거의 구현과 원리 :: http://nchovy.kr/forum/2/article/440 해커 지망생들이 알아야 할 Buffer Overflow Attack의 기초 by 달고나 (WOWHACKER) 27