dakuo s lecture n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Dakuo ’ s Lecture PowerPoint Presentation
Download Presentation
Dakuo ’ s Lecture

Loading in 2 Seconds...

play fullscreen
1 / 61

Dakuo ’ s Lecture - PowerPoint PPT Presentation


  • 227 Views
  • Uploaded on

Dakuo ’ s Lecture. The Foundation of Reverse Engineering. 김종민 ( dakuo ) / 부회장 hkdakuo@gmail.com. What is the Reverse Engineering?. Reverse Engineering 이미 만들어진 대상을 역으로 추적하여 분석하는 기술 -> Point of view Software 대상 소프트웨어를 역으로 추적하여 내부동작 & 설계개념 분석. Contents.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Dakuo ’ s Lecture' - chase-woodward


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
the foundation of reverse engineering
The Foundation ofReverse Engineering

김종민(dakuo)/ 부회장

hkdakuo@gmail.com

what is the reverse engineering
What is the Reverse Engineering?

Reverse Engineering

  • 이미 만들어진 대상을 역으로 추적하여 분석하는 기술

-> Point of view Software

  • 대상 소프트웨어를 역으로 추적하여 내부동작 & 설계개념 분석
slide4

Contents

Ⅰ. A basic knowledge

Ⅱ. Binary Analysis

Ⅲ. Dynamic Analysis

Ⅳ. Static Analysis

Ⅴ. Technique

Ⅵ. Example

a basic knowledge
Ⅰ. A basic knowledge
  • Register & Memory
  • 프로그램 실행과정
  • Assembly
1 register memory
1. Register & Memory

- 범용 레지스터

  • EAX : 곱셈과 나눗셈 명령과 함수의 리턴값 저장.
  • EBX : ESI나 EDI와 결합하여 인덱스 표현.
  • ECX : 반복 명령어 사용시 카운터.
  • EDX : EAX와 같이 쓰이며 부호 확장 명령 등에 사용.
  • ESI : 데이터 복사나 조작 시 Source Data의 주소 저장.
  • EDI : 복사 시 Destination의 주소 저장.
  • ESP : 하나의 스택 프레임의 끝 지점 주소 저장에 사용.

PUSH, POP 명령어에 따라서 ESP의 값이 4byte씩 변한다.

  • EBP : 하나의 스택 프레임의 시작 지점 주소 저장.

현재 사용되는 스택 프레임이 소멸되지 않는 동안 EBP의 값은 변하지 않는다.

현재의 스택 프레임 소멸 시 이전에 사용되던 스택 프레임을 가리킨다.

1 register memory1
1. Register & Memory

- 명령 포인터 레지스터

  • EIP : 다음에 실행해야 할 명령어가 존재하는 메모리 주소 저장.
  • 순서 : 현재 명령어 실행완료 -> EIP에 저장되어 있는 주소에 위치한 명령어 실행

-> 명령어 실행 전 EIP에 다음 실행해야 할 명령어가 존재하는 주소값 저장.

- 세그먼트 레지스터 : 세그먼트(기준점) 오프셋(상대거리) 저장

  • CS(Code Segment) : 실행 가능한 명령어가 존재하는 세그먼트 오프셋 저장
  • DS(Data Segment) : 데이터가 존재하는 세그먼트 오프셋 저장
  • SS(Stack Segment) : 스택이 존재하는 세그먼트 오프셋 저장

- 플래그 레지스터 : Flag Setting

  • CF(carry), ZF(zero), OF(Overflow), SF(Sign), DF(Direction)
1 register memory2
1. Register & Memory

바이트 순서(Byte Order)

- 리틀엔디안(Little – Endian)

  • 높은 주소에서 낮은 주소로 기록
  • Intel Processor 사용

- 빅엔디안(Big – Endian)

  • 낮은 주소에서 높은 주소로 기록
  • Risc Processor 사용, 네트워크 프로토콜에서 사용
1 register memory3
1. Register & Memory

메모리(RAM)

프로세스 가상메모리 (32BIT 환경 -> 4GB 할당)

  • 유저영역(2GB) :

00000000 ~ 7FFFFFFF

  • 커널 영역(2GB) :

80000000 ~ FFFFFFFF

1 register memory4
1. Register & Memory

PE(Portable Executable) 섹션

  • .text : 프로그램을 실행하기 위한 코드 섹션
  • .rdata : 읽기 전용 데이터 섹션 (문자열)
  • .data : 초기화된 전역 변수 존재. 읽고 쓰기 가능한 섹션
  • .idata : Import 할 DLL, API 정보를 담고 있는 섹션

IAT(Import Address Table)가 존재

  • .rsrc : 리소스 데이터 존재

(절대적인 값이 아니며 프로그래머가 변경 가능)

1 register memory5
1. Register & Memory

유저 영역 메모리

slide12
2.프로그램 실행 과정

Fetch -> Decode -> Execute

  • Hard Disk(Program) -> RAM(Process)
  • Fetch : RAM -> Register ->
  • Decode : Register -> Control Unit ->
  • Execution : Control Unit -> ALU
3 assembly2
3. Assembly

콜링컨벤션(Calling Conventions)

: 함수의 파라미터의 전달과 해제에 대한 규약

  • _cdecl
  • C, C++ default
  • 파라미터 전달 <-
  • 파라미터 해제는 프로시저를 호출한 것이 책임
  • _stdcall
  • Windows API 프로시저 default
  • 파라미터 전달 <-
  • 파라미터 해제는 프로시저 복귀 전에 이뤄짐
binary analysis
Ⅱ. Binary Analysis
  • Binary
  • String
  • Module
1 binary
1. Binary
  • HEX-Editor: 파일 헤더 분석, 바이너리 수정
1 binary1
1. Binary
  • PEID: PE 헤더 분석(exe, dll)
2 string
2. String
  • Strings : string 추출 툴

strings target.exe> save.txt

3 module
3. Module
  • Dependency Walker : Module의 의존성 검사
3 module1
3. Module
  • PE Explorer : 실행파일 정보 분석
dynamic analysis
Ⅲ. Dynamic Analysis
  • 통제된 환경에서 프로그램을 실행시켜

모니터링을 통해 분석

dynamic analysis1
Ⅲ. Dynamic Analysis
  • Process Monitor :
  • Process Explorer :
  • RegMon :Registry monitor
  • TCP View : Port monitor
  • WireShark : Packet monitor
static analysis
Ⅳ. Static Analysis
  • 프로그램을 실행시키지 않고

소스코드와 디버깅을 통해 분석

ollydbg1
OllyDBG

1. disassem 2. register 3. dump 4. stack

slide33

OllyDBG

1. disassem menu

slide34

OllyDBG

2. register menu

slide35

OllyDBG

3. dump menu

slide36

OllyDBG

4. stack menu

slide37

OllyDBG

Detail

slide38

OllyDBG

  • Address : 주소값
  • Opcode : 명령어
  • Assembler Code : 디스어셈블된 코드
  • Olly Analysis : Olly가 분석한 내용
  • Comment : 사용자 주석
  • Value : 변수 표시
  • Hex Dump : 16진수 바이너리
  • Register & Flag : 레지스터와 플래그 값 표시
slide39

OllyDBG

단축키

  • Edit Assemble : Double Click
  • Comment : ;
  • Go to Address : Ctrl + G
  • Search for Command : Ctrl + F
  • Search for (label) View Name : Ctrl + N
  • Follow in Disassembler : Enter
  • Go to Previous : -
slide40

OllyDBG

디버깅 단축키

  • Run : F9
  • Restart : Ctrl + F2
  • Step Into : F7
  • Step Over : F8
  • Execute till Return : Ctrl + F9
  • Pause : F12
  • Break Point : F2
slide42

IDA

  • Menu bar 9. Code Location
  • Toolbar : 분기점 표시
  • Subview 10. Code Reference
  • Window : 분기점으로 이동
  • Jump 11. Disassem Code
  • Virtual Address 12. Cursor Disassem Code
  • Stack Pointer
  • Opcode
slide43

IDA

SubView

slide44

IDA

디버깅 모드

slide45

IDA

  • Break Points
  • IDA View - EIP
  • Registers
  • Flags
  • Threads
  • IDA View - ESP
  • Menu bar
slide46

IDA

단축키

  • Space : Text view <->Layout Graph
  • Ctrl + P : Choose function to jump to
  • G : Jump to address
  • Ctrl + I : Choose a name
  • Alt + T : Text search
  • Shift + F12 : Strings Window
slide47

IDA

디버깅 모드 단축키

  • Break Point : F2
  • Run : F9
  • Debugging Exit : Ctrl + F2
  • Step Into: F7
  • Step Over : F8
  • Calculator : Shift + /
technique
Ⅴ. Technique
  • Back to User Mode
  • Search for
  • Cross References
  • Executable Modules
slide49

Back to User Mode

  • 특정 이벤트가 발생하기 전에 설정한 후,

이벤트를 발생시켜 Call 다음 위치를 잡는 기술

ex. scanf(), MessageBox() ......etc...

  • 사용법 :OllyDBG이용
  • 이벤트 전에서 pause 를 건다.
  • Alt + F9 로 back to user mode 를 설정한다.
  • 이벤트를 발생시킨다.
slide50

Back to User Mode

  • OllyDBG실행
  • Run (F9)
  • 이벤트 발생 전
slide51

Back to User Mode

4. Pause (F12)

5. Back to User Mode (Alt + F9)

6. Event Execute

7. Success

slide52

2. Search for

  • 여러 검색을 통해 원하는 정보를 획득

ex. All referenced text strings,

Name (label) in current module (Ctrl + N), etc...

  • 사용법 : OllyDBG이용
  • Disassem menu -> Search for
  • Choose
slide53

2. Search for

  • OllyDBG실행
  • Disassem Menu -> Search for

-> All referenced text strings

  • Success
slide54

3. Cross References

  • 함수가 사용된 곳을 교차하여

참고할 수 있게 표시를 해주는 것

(어떤 함수가 어디에서 또 쓰였는지를 찾기 쉽도록 표시를 해준다)

  • 사용법 : IDA 이용
  • 함수로 이동
  • SubView -> Cross References
  • Choose
slide55

3. Cross References

  • IDA 실행
  • 함수로 이동
slide56

3. Cross References

3. SubView -> Cross References

4.

5. Success

slide57

4. Executable Modules

  • 같이 로딩되는 실행 가능한 모듈을 출력

(용도 : 모듈을 골라서 중요한 코드에 Break Point 를 걸어

해당 코드가 실행될 때,제어권을 받아온다)

ex. Dll, Module, ......etc...

  • 사용법 : OllyDBG이용
  • Alt + E
  • Choose
slide58

4. Executable Modules

  • OllyDBG실행
  • Alt + E
  • Success
thanks
Thanks

도와주신 분들

hkpco,

onesider