SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Code Level Reversing

2009.11.03

㈜ 안철수연구소
ASEC (AhnLab Security Emergency response Center)
Anti-Virus Researcher, CISSP

장 영 준 주임 연구원
목 차
1. Code Level Reversing과 Assembly Basic

2. Debugging Basic

3. Disassembling Basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
1. Code Level Reversing과 Assembly Basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
1. Code Level Reversing과 Assembly Basic
1) Code Level Reversing
1) 프로그램의 설계 의도를 간파하거나 프로그램 바이너리에서 알고리즘을 파악하기
위해 소프트웨어 개발, CPU, 운영체제 등에 대한 깊은 이해를 바탕으로 정보를 프로
그램 제작 목적 및 방식을 파악하는 일련의 과정
2) Code Level Reversing은 분석 대상이 되는 파일을 실행하지 않는다는 의미에서 정
적 분석 또는 Static Analysis 라고도 함
3) System Level Reversing과 비교하여 더 많은 분석 시간을 요구하나 프로그램의 상
세한 기능들을 파악 할 수 있음

4

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
1. Code Level Reversing과 Assembly Basic
2) Assembly Basic – 명령 형태
1) 어셈블리 언어는 기계어와 일대 일의 대응 관계를 가지며 어셈블리 언어 명령 하나
가 기계어 명령 하나의 대응함
2) 어셈블리 언어는 일반적으로 IA-32 (인텔 32비트 아키텍처) 어셈블리 언어를 지칭
하는 경우가 많음.
3) IA-32 명령의 기본적인 형태는 Opcode (Operation Code)와 하나 또는 2개의
Operand로 구성
4) Opcode는 MOV와 같은 명령의 이름을 나타내고 Operand는 명령에 전달되는 인자
(데이터)를 나타내며 어셈블리 언어에서는 3가지 형태로 존재
- 레지스터 이름 : 데이터를 읽거나 쓰기 위한 범용 레지스터 명칭 (EAX와 EBX 등)
- 직접적인 데이터 : 코드 안에 포함되어 있는 상수 값
- 메모리 주소 : Operand가 RAM에 존재 할 경우 메모리 주소로도 표기

명령 이름(Opcode)

5

목적지 Operand,

출발지 Operand

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
1. Code Level Reversing과 Assembly Basic
2) Assembly Basic – 데이터 이동
1) 데이터 이동

- MOV 명령은 목적지와 출발지를 나타내는 2개의 Operand를 사용하여 단순히 출
발지의 데이터를 목적지로 이동
- 목적지 Operand는 메모리 주소나 레지스터가 될 수 있음.
- 출발지 Operand는 직접적인 값, 레지스터, 메모리 주소 등이 될 수 있음

MOV

목적지 Operand,

메모리 주소
레지스터

6

출발지 Operand

메모리 주소
레지스터
직접 값

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
1. Code Level Reversing과 Assembly Basic
2) Assembly Basic – 산술 연산 (1)
1) 산술 연산

- 기본적인 산술 연산은 ADD, SUB, MUL, DIV, IMUL, IDIV라는 6개의 정수 연산 명령

ADD

Operand 1,

Operand 2

- ADD : 2개의 부호 있는 정수나 없는 정수를 더하여 Operand 1에 결과를 저장

SUB

Operand 1,

Operand 2

- SUB : Operand 1에서 Operand 2의 값을 배서 Operand 1에 결과를 저장

MUL

Operand

- MUL : EAX의 값을 부호 없는 정수인 Operand로 곱하여 EDX:EAX에 64비트로 저장

7

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
1. Code Level Reversing과 Assembly Basic
2) Assembly Basic – 산술 연산 (2)

DIV

Operand

- DIV : EDX:EAX에 저장된 64비트 부호 없는 정수 값을 부호 없는 정수인 Operand로
나누어 몫은 EAX에 저장하고 나머지는 EDX에 저장

IMUL

Operand

- IMUL : EAX의 값을 부호 있는 정수인 Operand로 곱한 후 결과는 EDX:EAX에 저장

IDIV

Operand

- IDIV : EDX:EAX에 저장된 64비트 부호 있는 정수 값을 부호 있는 정수인 Operand로
나눈 후 몫은 EAX에 저장하고 나머지 값은 EDX에 저장

8

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
1. Code Level Reversing과 Assembly Basic
2) Assembly Basic – 비교 연산과 조건 분기
1) 비교 연산

- CMP 명령은 비교 결과를 프로세스의 플래그에 기록
- 내부적으로 CMP 명령은 단순히 Operand 1에서 Operand 2를 뺀 것임
- 빼기 연산 결과를 반영하기 위해 적절한 플래그 값을 설정하고 빼기 연산 결과 값
을 폐기

CMP

Operand 1,

Operand 2

2) 조건 분기
- JMP 명령 셋에 의해 이루어지며 특정 조건에 따라서 특정 주소로 실행을 분기

JMP
9

분기 주소 (레지스터, 메모리 주소)
Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
1. Code Level Reversing과 Assembly Basic
2) Assembly Basic – 함수 호출
1) 함수 호출

- CALL 명령은 함수를 호출하고 RET 명령은 함수 호출자에게 반환
- CALL 명령은 현재의 명령 포인터를 스택에 PUSH하고 특정 주소로 점프
- 함수가 수행을 완료하고 호출자에게 반환할 필요가 있을 때 사용하는 명령이 RET
명령임.
- RET 명령은 CALL 명령에 의해서 스택에 PUSH 되었던 명령 포인터 값을 POP 함.

CALL

10

함수 주소

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
2. Debugging Basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
2. Debugging Basic
1) Debugger
1) Debugger는 소프트웨어 개발자가 프로그램의 오류를 찾아내고 수정 할 수 있도록
도와주기 위한 유틸리티
2) 대부분의 Debugger는 소스코드 없이 어셈블리 어언상에서 실행의 흐름을 따라갈
수 있는 기능을 제공
3) Software Breakpoint는 프로그램 실행 시에 디버거가 프로그램 코드 사이에 명령
을 삽입하는 방식
삽입된 명령에 도달하면 프로세서는 프로그램 실행을 일시 정지하고 제어권을 디버
거에게 넘김
4) Hardware Breakpoint는 CPU의 특별한 기능으로 어떤 특정 메모리 주소에 대한 접
근이 이루어지면 프로세서가 프로그램 실행을 일시 정지하고 제어권을 디버거에게
넘김
5) Debugger는 크게 User Mode Debugger와 Kernel Mode Debugger로 구분

12

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
2. Debugging Basic
2) User Mode Debugger
1) User Mode Debugger는 일반적인 User Mode 어플리케이션을 디버깅하기 위해
사용
2) User Mode Debugger는 디버깅 대상(Debuggee) 프로세스에 붙어 해당 프로세스
에 대한 모든 제어를 수행할 수 있는 전통적인 어플리케이션
3) User Mode Debugger는 Kernel Mode Debugger와 달리 디버거 자체가 시스템
상의 프로그램임으로 설치 및 사용이 간편

13

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
2. Debugging Basic
3) User Mode Debugger 어플리케이션
1) OllyDbg는 리버싱을 위해서 설계된 디버깅 프로그램

2) WinDbg는 마이크로소프트에서 개발한 디버깅 프로그램 커맨드 라인 인터페이스
제공
3) IDA Pro는 강력한 디스어셈블리어인 동시에 유저 모드 디버깅 프로그램

14

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
2. Debugging Basic
4) Kernel Mode Debugger
1) Kernel Mode Debugger는 대상 시스템 전체를 제어 할 수 있으며 시스템에서 발생
하는 어플리케이션 코드와 운영체제 코드 내부에서 발생하는 모든 것을 볼 수 있음
2) Kernel Mode Debugger는 운영체제에서 실행되는 하나의 어플리케이션이 아니라
시스템의 커널과 동등한 컴포넌트로 존재하여 전체적인 시스템을 관찰하거나 실행
을 중지 할 수 있음

15

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
2. Debugging Basic
4) Kernel Mode Debugger 어플리케이션
1) SoftICE는 윈도우 디바이스 드라이버 개발 툴로 개발되어 로컬 커널 디버깅 수행

2) WinDBG는 커널 모드 디버깅이 가능하나 원격 커널 모드 디버깅 수행

16

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
3. Disassembling Basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
3. Disassembling Basic
1) Dissasembler
1) Dissasembler는 바이너리 기계 코드를 해석해서 사람이 읽을 수 있는 어셈블리 언
어로 변환
2) Dissasembler는 코드의 각 명령을 해석해서 문자 형태로 표현할 뿐이며 바이너리
자체를 실행 시키지는 않음

18

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
3. Disassembling Basic
2) Dissasembler 어플리케이션
1) IDA Pro 가장 강력한 디스어셈블러이며 다양한 형태의 실행 파일 포맷을 지원함

2) 주요 기능으로 바이너리의 순서도로 디스어셈블된 코드의 논리적인 흐름을 그림으
로 보여주어 코드 내부의 각 조건문이 함수의 실행 흐름에 어떠한 영향을 주는지 시
각적인 이미지 제공

19

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
3. Disassembling Basic

20

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
* Reference

1) The Art of Virus Research and Defense
2) 리버싱 리버스 엔지니어링 비밀을 파헤치다
2) 리버스엔지니어링 역분석 구조와 원리
4) 어셈블리 언어 : 인텔 기반 컴퓨터를 위한
5) Intel 64 and IA-32 Architectures Software Developer's Manuals
21

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
AhnLab
The Joy of Care-Free Your Internet World

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
AhnLab, the AhnLab logo, and V3 are trademarks or registered trademarks of AhnLab, Inc.,
in Korea and certain other countries. All other trademarks mentioned in this document are the property of their respective owners.

22

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.

Weitere ähnliche Inhalte

Was ist angesagt?

악성코드와 분석 방법
악성코드와 분석 방법악성코드와 분석 방법
악성코드와 분석 방법
Youngjun Chang
 

Was ist angesagt? (20)

Memory forensics with volatility
Memory forensics with volatilityMemory forensics with volatility
Memory forensics with volatility
 
2. 악성코드 분석 방법론과 기법
2. 악성코드 분석 방법론과 기법2. 악성코드 분석 방법론과 기법
2. 악성코드 분석 방법론과 기법
 
3. 악성코드 분석 사례
3. 악성코드 분석 사례3. 악성코드 분석 사례
3. 악성코드 분석 사례
 
1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론
 
2.악성코드와 분석 방안
2.악성코드와 분석 방안2.악성코드와 분석 방안
2.악성코드와 분석 방안
 
4. reverse engineering basic
4. reverse engineering basic4. reverse engineering basic
4. reverse engineering basic
 
Windows Vista Security
Windows Vista SecurityWindows Vista Security
Windows Vista Security
 
악성코드 분석 도구
악성코드 분석 도구악성코드 분석 도구
악성코드 분석 도구
 
악성코드와 시스템 복구
악성코드와 시스템 복구악성코드와 시스템 복구
악성코드와 시스템 복구
 
악성코드와 분석 방법
악성코드와 분석 방법악성코드와 분석 방법
악성코드와 분석 방법
 
악성코드와 기업의 악성코드 대응
악성코드와 기업의 악성코드 대응악성코드와 기업의 악성코드 대응
악성코드와 기업의 악성코드 대응
 
보안 위협 형태와 악성코드 분석 기법
보안 위협 형태와 악성코드 분석 기법보안 위협 형태와 악성코드 분석 기법
보안 위협 형태와 악성코드 분석 기법
 
2007년 6월 악성코드 최신 동향과 대응
2007년 6월 악성코드 최신 동향과 대응2007년 6월 악성코드 최신 동향과 대응
2007년 6월 악성코드 최신 동향과 대응
 
악성코드와 분석 방안
악성코드와 분석 방안악성코드와 분석 방안
악성코드와 분석 방안
 
악성코드와 분석 방안
악성코드와 분석 방안악성코드와 분석 방안
악성코드와 분석 방안
 
악성코드와 웜
악성코드와 웜악성코드와 웜
악성코드와 웜
 
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법
 
악성코드 최신 동향과 분석 방안
악성코드 최신 동향과 분석 방안악성코드 최신 동향과 분석 방안
악성코드 최신 동향과 분석 방안
 
악성코드와 개인 정보 보호
악성코드와 개인 정보 보호악성코드와 개인 정보 보호
악성코드와 개인 정보 보호
 

Andere mochten auch (8)

1.악성코드 최신 동향과 기법
1.악성코드 최신 동향과 기법1.악성코드 최신 동향과 기법
1.악성코드 최신 동향과 기법
 
1. 2009년 상반기 보안 위협 동향
1. 2009년 상반기 보안 위협 동향1. 2009년 상반기 보안 위협 동향
1. 2009년 상반기 보안 위협 동향
 
2.악성 코드와 최근의 동향
2.악성 코드와 최근의 동향2.악성 코드와 최근의 동향
2.악성 코드와 최근의 동향
 
악성코드 최신 동향과 기법
악성코드 최신 동향과 기법악성코드 최신 동향과 기법
악성코드 최신 동향과 기법
 
중국 It문화와 해커
중국 It문화와 해커중국 It문화와 해커
중국 It문화와 해커
 
악성 코드와 보안 위협 동향
악성 코드와 보안 위협 동향악성 코드와 보안 위협 동향
악성 코드와 보안 위협 동향
 
보안 위협 동향과 대응 방안
보안 위협 동향과 대응 방안보안 위협 동향과 대응 방안
보안 위협 동향과 대응 방안
 
1. 보안 위협 동향과 주요 보안 위협 특징
1. 보안 위협 동향과 주요 보안 위협 특징1. 보안 위협 동향과 주요 보안 위협 특징
1. 보안 위협 동향과 주요 보안 위협 특징
 

Ähnlich wie 6. code level reversing

kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340
Samsung Electronics
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
MinGeun Park
 

Ähnlich wie 6. code level reversing (20)

왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
왜 개발자는 컴퓨터공학을 공부해야 할까? (비전공자는 컴퓨터공학 과목에서 무엇을 알아야할까?)
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340
 
Windows reversing study_basic_8
Windows reversing study_basic_8Windows reversing study_basic_8
Windows reversing study_basic_8
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1
 
한글시계웍샵_ SW
한글시계웍샵_ SW한글시계웍샵_ SW
한글시계웍샵_ SW
 
한글시계웍샵_SW
한글시계웍샵_SW한글시계웍샵_SW
한글시계웍샵_SW
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계강좌 04 펌웨어 구조 설계
강좌 04 펌웨어 구조 설계
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
 
망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9망고100 보드로 놀아보자 9
망고100 보드로 놀아보자 9
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법
 
안드로이드 와 디바이스 드라이버 적용 기법
안드로이드 와 디바이스 드라이버 적용 기법안드로이드 와 디바이스 드라이버 적용 기법
안드로이드 와 디바이스 드라이버 적용 기법
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기
 
컴파일러 Ch01
컴파일러 Ch01컴파일러 Ch01
컴파일러 Ch01
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
 
올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발올챙이로 살펴보는 Eclipse개발
올챙이로 살펴보는 Eclipse개발
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3
 
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
 
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
 

Mehr von Youngjun Chang

Mehr von Youngjun Chang (13)

IT보안과 사회공학(Social Engineering)
IT보안과 사회공학(Social Engineering)IT보안과 사회공학(Social Engineering)
IT보안과 사회공학(Social Engineering)
 
Volatility를 이용한 memory forensics
Volatility를 이용한 memory forensicsVolatility를 이용한 memory forensics
Volatility를 이용한 memory forensics
 
Apt(advanced persistent threat) 공격의 현재와 대응 방안
Apt(advanced persistent threat) 공격의 현재와 대응 방안Apt(advanced persistent threat) 공격의 현재와 대응 방안
Apt(advanced persistent threat) 공격의 현재와 대응 방안
 
2011년 보안 이슈와 2012년 보안 위협 예측
2011년 보안 이슈와 2012년 보안 위협 예측2011년 보안 이슈와 2012년 보안 위협 예측
2011년 보안 이슈와 2012년 보안 위협 예측
 
클라우드 서비스를 이용한 APT 대응
클라우드 서비스를 이용한 APT 대응클라우드 서비스를 이용한 APT 대응
클라우드 서비스를 이용한 APT 대응
 
APT Case Study
APT Case StudyAPT Case Study
APT Case Study
 
보안 위협 동향과 대응 방안
보안 위협 동향과 대응 방안보안 위협 동향과 대응 방안
보안 위협 동향과 대응 방안
 
SNS 보안 위협 사례
SNS 보안 위협 사례SNS 보안 위협 사례
SNS 보안 위협 사례
 
보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법보안 위협과 악성코드 분석 기법
보안 위협과 악성코드 분석 기법
 
보안 위협 동향과 대응 방안
보안 위협 동향과 대응 방안보안 위협 동향과 대응 방안
보안 위협 동향과 대응 방안
 
2010년 상반기 보안 위협 동향과 주요 보안 위협
2010년 상반기 보안 위협 동향과 주요 보안 위협2010년 상반기 보안 위협 동향과 주요 보안 위협
2010년 상반기 보안 위협 동향과 주요 보안 위협
 
악성코드와 개인 정보 보호
악성코드와 개인 정보 보호악성코드와 개인 정보 보호
악성코드와 개인 정보 보호
 
중국 보안 위협 동향
중국 보안 위협 동향중국 보안 위협 동향
중국 보안 위협 동향
 

6. code level reversing

  • 1. Code Level Reversing 2009.11.03 ㈜ 안철수연구소 ASEC (AhnLab Security Emergency response Center) Anti-Virus Researcher, CISSP 장 영 준 주임 연구원
  • 2. 목 차 1. Code Level Reversing과 Assembly Basic 2. Debugging Basic 3. Disassembling Basic Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 3. 1. Code Level Reversing과 Assembly Basic Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 4. 1. Code Level Reversing과 Assembly Basic 1) Code Level Reversing 1) 프로그램의 설계 의도를 간파하거나 프로그램 바이너리에서 알고리즘을 파악하기 위해 소프트웨어 개발, CPU, 운영체제 등에 대한 깊은 이해를 바탕으로 정보를 프로 그램 제작 목적 및 방식을 파악하는 일련의 과정 2) Code Level Reversing은 분석 대상이 되는 파일을 실행하지 않는다는 의미에서 정 적 분석 또는 Static Analysis 라고도 함 3) System Level Reversing과 비교하여 더 많은 분석 시간을 요구하나 프로그램의 상 세한 기능들을 파악 할 수 있음 4 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 5. 1. Code Level Reversing과 Assembly Basic 2) Assembly Basic – 명령 형태 1) 어셈블리 언어는 기계어와 일대 일의 대응 관계를 가지며 어셈블리 언어 명령 하나 가 기계어 명령 하나의 대응함 2) 어셈블리 언어는 일반적으로 IA-32 (인텔 32비트 아키텍처) 어셈블리 언어를 지칭 하는 경우가 많음. 3) IA-32 명령의 기본적인 형태는 Opcode (Operation Code)와 하나 또는 2개의 Operand로 구성 4) Opcode는 MOV와 같은 명령의 이름을 나타내고 Operand는 명령에 전달되는 인자 (데이터)를 나타내며 어셈블리 언어에서는 3가지 형태로 존재 - 레지스터 이름 : 데이터를 읽거나 쓰기 위한 범용 레지스터 명칭 (EAX와 EBX 등) - 직접적인 데이터 : 코드 안에 포함되어 있는 상수 값 - 메모리 주소 : Operand가 RAM에 존재 할 경우 메모리 주소로도 표기 명령 이름(Opcode) 5 목적지 Operand, 출발지 Operand Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 6. 1. Code Level Reversing과 Assembly Basic 2) Assembly Basic – 데이터 이동 1) 데이터 이동 - MOV 명령은 목적지와 출발지를 나타내는 2개의 Operand를 사용하여 단순히 출 발지의 데이터를 목적지로 이동 - 목적지 Operand는 메모리 주소나 레지스터가 될 수 있음. - 출발지 Operand는 직접적인 값, 레지스터, 메모리 주소 등이 될 수 있음 MOV 목적지 Operand, 메모리 주소 레지스터 6 출발지 Operand 메모리 주소 레지스터 직접 값 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 7. 1. Code Level Reversing과 Assembly Basic 2) Assembly Basic – 산술 연산 (1) 1) 산술 연산 - 기본적인 산술 연산은 ADD, SUB, MUL, DIV, IMUL, IDIV라는 6개의 정수 연산 명령 ADD Operand 1, Operand 2 - ADD : 2개의 부호 있는 정수나 없는 정수를 더하여 Operand 1에 결과를 저장 SUB Operand 1, Operand 2 - SUB : Operand 1에서 Operand 2의 값을 배서 Operand 1에 결과를 저장 MUL Operand - MUL : EAX의 값을 부호 없는 정수인 Operand로 곱하여 EDX:EAX에 64비트로 저장 7 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 8. 1. Code Level Reversing과 Assembly Basic 2) Assembly Basic – 산술 연산 (2) DIV Operand - DIV : EDX:EAX에 저장된 64비트 부호 없는 정수 값을 부호 없는 정수인 Operand로 나누어 몫은 EAX에 저장하고 나머지는 EDX에 저장 IMUL Operand - IMUL : EAX의 값을 부호 있는 정수인 Operand로 곱한 후 결과는 EDX:EAX에 저장 IDIV Operand - IDIV : EDX:EAX에 저장된 64비트 부호 있는 정수 값을 부호 있는 정수인 Operand로 나눈 후 몫은 EAX에 저장하고 나머지 값은 EDX에 저장 8 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 9. 1. Code Level Reversing과 Assembly Basic 2) Assembly Basic – 비교 연산과 조건 분기 1) 비교 연산 - CMP 명령은 비교 결과를 프로세스의 플래그에 기록 - 내부적으로 CMP 명령은 단순히 Operand 1에서 Operand 2를 뺀 것임 - 빼기 연산 결과를 반영하기 위해 적절한 플래그 값을 설정하고 빼기 연산 결과 값 을 폐기 CMP Operand 1, Operand 2 2) 조건 분기 - JMP 명령 셋에 의해 이루어지며 특정 조건에 따라서 특정 주소로 실행을 분기 JMP 9 분기 주소 (레지스터, 메모리 주소) Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 10. 1. Code Level Reversing과 Assembly Basic 2) Assembly Basic – 함수 호출 1) 함수 호출 - CALL 명령은 함수를 호출하고 RET 명령은 함수 호출자에게 반환 - CALL 명령은 현재의 명령 포인터를 스택에 PUSH하고 특정 주소로 점프 - 함수가 수행을 완료하고 호출자에게 반환할 필요가 있을 때 사용하는 명령이 RET 명령임. - RET 명령은 CALL 명령에 의해서 스택에 PUSH 되었던 명령 포인터 값을 POP 함. CALL 10 함수 주소 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 11. 2. Debugging Basic Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 12. 2. Debugging Basic 1) Debugger 1) Debugger는 소프트웨어 개발자가 프로그램의 오류를 찾아내고 수정 할 수 있도록 도와주기 위한 유틸리티 2) 대부분의 Debugger는 소스코드 없이 어셈블리 어언상에서 실행의 흐름을 따라갈 수 있는 기능을 제공 3) Software Breakpoint는 프로그램 실행 시에 디버거가 프로그램 코드 사이에 명령 을 삽입하는 방식 삽입된 명령에 도달하면 프로세서는 프로그램 실행을 일시 정지하고 제어권을 디버 거에게 넘김 4) Hardware Breakpoint는 CPU의 특별한 기능으로 어떤 특정 메모리 주소에 대한 접 근이 이루어지면 프로세서가 프로그램 실행을 일시 정지하고 제어권을 디버거에게 넘김 5) Debugger는 크게 User Mode Debugger와 Kernel Mode Debugger로 구분 12 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 13. 2. Debugging Basic 2) User Mode Debugger 1) User Mode Debugger는 일반적인 User Mode 어플리케이션을 디버깅하기 위해 사용 2) User Mode Debugger는 디버깅 대상(Debuggee) 프로세스에 붙어 해당 프로세스 에 대한 모든 제어를 수행할 수 있는 전통적인 어플리케이션 3) User Mode Debugger는 Kernel Mode Debugger와 달리 디버거 자체가 시스템 상의 프로그램임으로 설치 및 사용이 간편 13 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 14. 2. Debugging Basic 3) User Mode Debugger 어플리케이션 1) OllyDbg는 리버싱을 위해서 설계된 디버깅 프로그램 2) WinDbg는 마이크로소프트에서 개발한 디버깅 프로그램 커맨드 라인 인터페이스 제공 3) IDA Pro는 강력한 디스어셈블리어인 동시에 유저 모드 디버깅 프로그램 14 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 15. 2. Debugging Basic 4) Kernel Mode Debugger 1) Kernel Mode Debugger는 대상 시스템 전체를 제어 할 수 있으며 시스템에서 발생 하는 어플리케이션 코드와 운영체제 코드 내부에서 발생하는 모든 것을 볼 수 있음 2) Kernel Mode Debugger는 운영체제에서 실행되는 하나의 어플리케이션이 아니라 시스템의 커널과 동등한 컴포넌트로 존재하여 전체적인 시스템을 관찰하거나 실행 을 중지 할 수 있음 15 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 16. 2. Debugging Basic 4) Kernel Mode Debugger 어플리케이션 1) SoftICE는 윈도우 디바이스 드라이버 개발 툴로 개발되어 로컬 커널 디버깅 수행 2) WinDBG는 커널 모드 디버깅이 가능하나 원격 커널 모드 디버깅 수행 16 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 17. 3. Disassembling Basic Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 18. 3. Disassembling Basic 1) Dissasembler 1) Dissasembler는 바이너리 기계 코드를 해석해서 사람이 읽을 수 있는 어셈블리 언 어로 변환 2) Dissasembler는 코드의 각 명령을 해석해서 문자 형태로 표현할 뿐이며 바이너리 자체를 실행 시키지는 않음 18 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 19. 3. Disassembling Basic 2) Dissasembler 어플리케이션 1) IDA Pro 가장 강력한 디스어셈블러이며 다양한 형태의 실행 파일 포맷을 지원함 2) 주요 기능으로 바이너리의 순서도로 디스어셈블된 코드의 논리적인 흐름을 그림으 로 보여주어 코드 내부의 각 조건문이 함수의 실행 흐름에 어떠한 영향을 주는지 시 각적인 이미지 제공 19 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 20. 3. Disassembling Basic 20 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 21. * Reference 1) The Art of Virus Research and Defense 2) 리버싱 리버스 엔지니어링 비밀을 파헤치다 2) 리버스엔지니어링 역분석 구조와 원리 4) 어셈블리 언어 : 인텔 기반 컴퓨터를 위한 5) Intel 64 and IA-32 Architectures Software Developer's Manuals 21 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  • 22. AhnLab The Joy of Care-Free Your Internet World Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved. AhnLab, the AhnLab logo, and V3 are trademarks or registered trademarks of AhnLab, Inc., in Korea and certain other countries. All other trademarks mentioned in this document are the property of their respective owners. 22 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.