1 / 61

Dakuo ’ s Lecture

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

Download Presentation

Dakuo ’ s Lecture

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Dakuo’sLecture

  2. The Foundation ofReverse Engineering 김종민(dakuo)/ 부회장 hkdakuo@gmail.com

  3. What is the Reverse Engineering? Reverse Engineering • 이미 만들어진 대상을 역으로 추적하여 분석하는 기술 -> Point of view Software • 대상 소프트웨어를 역으로 추적하여 내부동작 & 설계개념 분석

  4. Contents Ⅰ. A basic knowledge Ⅱ. Binary Analysis Ⅲ. Dynamic Analysis Ⅳ. Static Analysis Ⅴ. Technique Ⅵ. Example

  5. Ⅰ. A basic knowledge • Register & Memory • 프로그램 실행과정 • Assembly

  6. 1. Register & Memory - 범용 레지스터 • EAX : 곱셈과 나눗셈 명령과 함수의 리턴값 저장. • EBX : ESI나 EDI와 결합하여 인덱스 표현. • ECX : 반복 명령어 사용시 카운터. • EDX : EAX와 같이 쓰이며 부호 확장 명령 등에 사용. • ESI : 데이터 복사나 조작 시 Source Data의 주소 저장. • EDI : 복사 시 Destination의 주소 저장. • ESP : 하나의 스택 프레임의 끝 지점 주소 저장에 사용. PUSH, POP 명령어에 따라서 ESP의 값이 4byte씩 변한다. • EBP : 하나의 스택 프레임의 시작 지점 주소 저장. 현재 사용되는 스택 프레임이 소멸되지 않는 동안 EBP의 값은 변하지 않는다. 현재의 스택 프레임 소멸 시 이전에 사용되던 스택 프레임을 가리킨다.

  7. 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)

  8. 1. Register & Memory 바이트 순서(Byte Order) - 리틀엔디안(Little – Endian) • 높은 주소에서 낮은 주소로 기록 • Intel Processor 사용 - 빅엔디안(Big – Endian) • 낮은 주소에서 높은 주소로 기록 • Risc Processor 사용, 네트워크 프로토콜에서 사용

  9. 1. Register & Memory 메모리(RAM) 프로세스 가상메모리 (32BIT 환경 -> 4GB 할당) • 유저영역(2GB) : 00000000 ~ 7FFFFFFF • 커널 영역(2GB) : 80000000 ~ FFFFFFFF

  10. 1. Register & Memory PE(Portable Executable) 섹션 • .text : 프로그램을 실행하기 위한 코드 섹션 • .rdata : 읽기 전용 데이터 섹션 (문자열) • .data : 초기화된 전역 변수 존재. 읽고 쓰기 가능한 섹션 • .idata : Import 할 DLL, API 정보를 담고 있는 섹션 IAT(Import Address Table)가 존재 • .rsrc : 리소스 데이터 존재 (절대적인 값이 아니며 프로그래머가 변경 가능)

  11. 1. Register & Memory 유저 영역 메모리

  12. 2.프로그램 실행 과정 Fetch -> Decode -> Execute • Hard Disk(Program) -> RAM(Process) • Fetch : RAM -> Register -> • Decode : Register -> Control Unit -> • Execution : Control Unit -> ALU

  13. 3. Assembly

  14. 3. Assembly

  15. 3. Assembly 콜링컨벤션(Calling Conventions) : 함수의 파라미터의 전달과 해제에 대한 규약 • _cdecl • C, C++ default • 파라미터 전달 <- • 파라미터 해제는 프로시저를 호출한 것이 책임 • _stdcall • Windows API 프로시저 default • 파라미터 전달 <- • 파라미터 해제는 프로시저 복귀 전에 이뤄짐

  16. Ⅱ. Binary Analysis • Binary • String • Module

  17. 1. Binary • HEX-Editor: 파일 헤더 분석, 바이너리 수정

  18. 1. Binary • PEID: PE 헤더 분석(exe, dll)

  19. 2. String • Strings : string 추출 툴 strings target.exe> save.txt

  20. 3. Module • Dependency Walker : Module의 의존성 검사

  21. 3. Module • PE Explorer : 실행파일 정보 분석

  22. Ⅲ. Dynamic Analysis • 통제된 환경에서 프로그램을 실행시켜 모니터링을 통해 분석

  23. Ⅲ. Dynamic Analysis • Process Monitor : • Process Explorer : • RegMon :Registry monitor • TCP View : Port monitor • WireShark : Packet monitor

  24. Process Monitor

  25. Process Explorer

  26. RegMon

  27. TCP View

  28. WireShark

  29. Ⅳ. Static Analysis • 프로그램을 실행시키지 않고 소스코드와 디버깅을 통해 분석

  30. Ⅳ. Static Analysis • OllyDBG • IDA

  31. OllyDBG

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

  33. OllyDBG 1. disassem menu

  34. OllyDBG 2. register menu

  35. OllyDBG 3. dump menu

  36. OllyDBG 4. stack menu

  37. OllyDBG Detail

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

  39. 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 : -

  40. OllyDBG 디버깅 단축키 • Run : F9 • Restart : Ctrl + F2 • Step Into : F7 • Step Over : F8 • Execute till Return : Ctrl + F9 • Pause : F12 • Break Point : F2

  41. IDA

  42. 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

  43. IDA SubView

  44. IDA 디버깅 모드

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

  46. 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

  47. IDA 디버깅 모드 단축키 • Break Point : F2 • Run : F9 • Debugging Exit : Ctrl + F2 • Step Into: F7 • Step Over : F8 • Calculator : Shift + /

  48. Ⅴ. Technique • Back to User Mode • Search for • Cross References • Executable Modules

  49. Back to User Mode • 특정 이벤트가 발생하기 전에 설정한 후, 이벤트를 발생시켜 Call 다음 위치를 잡는 기술 ex. scanf(), MessageBox() ......etc... • 사용법 :OllyDBG이용 • 이벤트 전에서 pause 를 건다. • Alt + F9 로 back to user mode 를 설정한다. • 이벤트를 발생시킨다.

  50. Back to User Mode • OllyDBG실행 • Run (F9) • 이벤트 발생 전

More Related