0
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-2...
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) 프로그램의 설계 의도를 간파하거나 프로그램 바이너리에서 알고리즘을 파악하기
위해 소프트웨어 개발, ...
1. Code Level Reversing과 Assembly Basic
2) Assembly Basic – 명령 형태
1) 어셈블리 언어는 기계어와 일대 일의 대응 관계를 가지며 어셈블리 언어 명령 하나
가 기계어 명령...
1. Code Level Reversing과 Assembly Basic
2) Assembly Basic – 데이터 이동
1) 데이터 이동

- MOV 명령은 목적지와 출발지를 나타내는 2개의 Operand를 사용하여 단...
1. Code Level Reversing과 Assembly Basic
2) Assembly Basic – 산술 연산 (1)
1) 산술 연산

- 기본적인 산술 연산은 ADD, SUB, MUL, DIV, IMUL, ID...
1. Code Level Reversing과 Assembly Basic
2) Assembly Basic – 산술 연산 (2)

DIV

Operand

- DIV : EDX:EAX에 저장된 64비트 부호 없는 정수 값을...
1. Code Level Reversing과 Assembly Basic
2) Assembly Basic – 비교 연산과 조건 분기
1) 비교 연산

- CMP 명령은 비교 결과를 프로세스의 플래그에 기록
- 내부적으로 ...
1. Code Level Reversing과 Assembly Basic
2) Assembly Basic – 함수 호출
1) 함수 호출

- CALL 명령은 함수를 호출하고 RET 명령은 함수 호출자에게 반환
- CALL...
2. Debugging Basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
2. Debugging Basic
1) Debugger
1) Debugger는 소프트웨어 개발자가 프로그램의 오류를 찾아내고 수정 할 수 있도록
도와주기 위한 유틸리티
2) 대부분의 Debugger는 소스코드 없이 어셈...
2. Debugging Basic
2) User Mode Debugger
1) User Mode Debugger는 일반적인 User Mode 어플리케이션을 디버깅하기 위해
사용
2) User Mode Debugger는 ...
2. Debugging Basic
3) User Mode Debugger 어플리케이션
1) OllyDbg는 리버싱을 위해서 설계된 디버깅 프로그램

2) WinDbg는 마이크로소프트에서 개발한 디버깅 프로그램 커맨드 라...
2. Debugging Basic
4) Kernel Mode Debugger
1) Kernel Mode Debugger는 대상 시스템 전체를 제어 할 수 있으며 시스템에서 발생
하는 어플리케이션 코드와 운영체제 코드 내...
2. Debugging Basic
4) Kernel Mode Debugger 어플리케이션
1) SoftICE는 윈도우 디바이스 드라이버 개발 툴로 개발되어 로컬 커널 디버깅 수행

2) WinDBG는 커널 모드 디버깅이...
3. Disassembling Basic

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
3. Disassembling Basic
1) Dissasembler
1) Dissasembler는 바이너리 기계 코드를 해석해서 사람이 읽을 수 있는 어셈블리 언
어로 변환
2) Dissasembler는 코드의 각 명...
3. Disassembling Basic
2) Dissasembler 어플리케이션
1) IDA Pro 가장 강력한 디스어셈블러이며 다양한 형태의 실행 파일 포맷을 지원함

2) 주요 기능으로 바이너리의 순서도로 디스어셈...
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) 어셈블리 언어 : 인텔 기반 ...
AhnLab
The Joy of Care-Free Your Internet World

Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
AhnLab, the Ah...
Upcoming SlideShare
Loading in...5
×

6. code level reversing

808

Published on

2009년 10월 서울여대 강연 자료

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
808
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
25
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "6. code level reversing"

  1. 1. Code Level Reversing 2009.11.03 ㈜ 안철수연구소 ASEC (AhnLab Security Emergency response Center) Anti-Virus Researcher, CISSP 장 영 준 주임 연구원
  2. 2. 목 차 1. Code Level Reversing과 Assembly Basic 2. Debugging Basic 3. Disassembling Basic Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  3. 3. 1. Code Level Reversing과 Assembly Basic Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  4. 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. 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. 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. 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. 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. 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. 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. 11. 2. Debugging Basic Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  12. 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. 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. 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. 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. 16. 2. Debugging Basic 4) Kernel Mode Debugger 어플리케이션 1) SoftICE는 윈도우 디바이스 드라이버 개발 툴로 개발되어 로컬 커널 디버깅 수행 2) WinDBG는 커널 모드 디버깅이 가능하나 원격 커널 모드 디버깅 수행 16 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  17. 17. 3. Disassembling Basic Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  18. 18. 3. Disassembling Basic 1) Dissasembler 1) Dissasembler는 바이너리 기계 코드를 해석해서 사람이 읽을 수 있는 어셈블리 언 어로 변환 2) Dissasembler는 코드의 각 명령을 해석해서 문자 형태로 표현할 뿐이며 바이너리 자체를 실행 시키지는 않음 18 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  19. 19. 3. Disassembling Basic 2) Dissasembler 어플리케이션 1) IDA Pro 가장 강력한 디스어셈블러이며 다양한 형태의 실행 파일 포맷을 지원함 2) 주요 기능으로 바이너리의 순서도로 디스어셈블된 코드의 논리적인 흐름을 그림으 로 보여주어 코드 내부의 각 조건문이 함수의 실행 흐름에 어떠한 영향을 주는지 시 각적인 이미지 제공 19 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  20. 20. 3. Disassembling Basic 20 Copyright (C) AhnLab, Inc. 1988-2009. All rights reserved.
  21. 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. 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.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×