REVERSE ENGINEERING HeXA 1st

Slides:



Advertisements
Similar presentations
10-7 부동소수점 (Floating-Point) 계산  컴퓨터에서 숫자를 표기하는 방법  가수 (Fraction) : 부호화된 고정소수점 숫자 지수 (Exponent) : 소수점의 위치를 표시 ( 예 )10 진수 를 표기하면 Fraction Exponent.
Advertisements

L o g o TVM ver. Beta 설계 제안서 L o g o Contents 프로젝트 개요 1 프로젝트 진행일정 2 프로젝트 목표 3 프로젝트 구성 4.
컴퓨터와 인터넷.
3. 명령어 집합 구조 순천향대학교 정보기술공학부 이상정.
Shellcode 작성 김영성.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Lecture #2 제2장 CPU의 구조와 기능(1).
2.1 CPU의 기본 구조 2.2 명령어 실행 2.3 명령어 파이프라이닝 2.4 명령어 세트
제4장 어셈블리어.
어셈블리.
Lecture #5 어셈블리어 (2) 매크로 어셈블리어 시스템프로그래밍.
Lecture #7 어셈블리어 (4) 매크로 어셈블리어 시스템프로그래밍.
제7강 학습 내용 주소지정 방식의 예 값 즉시 지정 방식과 실행 예 레지스터 직접지정 방식 메모리 직접지정 방식과 실행 예
3장 MPU 내부구조 Slide 1 (of 28).
Lecture #3 인텔 프로세서의 내부구조 및 동작 방식 시스템프로그래밍.
12장. 제어 장치 다루는 내용 CPU속의 제어장치 마이크로 연산 제어장치의 동작.
출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
Cpu 구조 및 기능 Cpu의 동작 명령어 집합 명령어 형식 주소 지정 방식
어셈블리 문법 보강 4월 10일.
제 3장 컴퓨터 시스템의 구조.
System Programming 제1장 배경지식 시스템 프로그래밍.
Text LCD control.
시스템 보안 [Buffer Overflow] DEC, 15, 2013 By 박동혁.
컴퓨터 기본 원리 프로그래밍 언어 C 프로그래밍 환경 C 프로그래밍 작성, 컴파일, 링크 및 실행
Lecture #8 어셈블리어 (5) 매크로 어셈블리어 시스템프로그래밍.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
1 마이크로프로세서의 원리 마이크로컨트롤러 AVR ATmega128.
AT MEGA 128 기초와 응용 I 기본적인 구조.
제10강 중앙처리장치 1.
리버스 엔지니어링 안녕하십니까? 리버스 엔지니어링 발표를 맡은 정창하입니다. 지금부터 리버스 엔지니어링 발표를
어셈블리어 및 실습 금 1,2 (314) / 금 3,4 (307) RTDCS 이 종 태
Chapter 06 명령어와 번지지정 방식.
8086 프로세서의 구조 및 동작 방식 시스템 프로그래밍 - Lecture #2 신라대학교 컴퓨터공학과 시스템 프로그래밍.
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
타이머카운터 사용법 휴먼네트웍스 기술연구소
제3장 8086 프로세서의 내부구조.
PSW : PROGRAM STATUS WORD
10장. 중앙처리 장치의 명령어 다루는 내용 어셈블리 프로그램의 이해 인터럽트(interrupt) 명령어 세트 주소 지정 방식.
Buffer Overflow
Chap 6.Assembler 유건우.
어셈블리어 (2) 매크로 어셈블리어 시스템 프로그래밍 - Lecture #4
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Computer System Architecture
영상처리 실습 인공지능연구실.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
논리회로 설계 및 실험 5주차.
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
DK-128 실습 타이머카운터 사용법 아이티즌 기술연구소
1. 컴퓨터 시스템 구성요소 메모리(Memory) 캐시메모리 개념 캐시메모리의 특징 적중률(hit ratio)
제4강 처리장치 1.
ARM Development Suite v1.2
1. 2진 시스템.
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
Canary value 스택 가드(Stack Guard).
제2강 : 전자계산기구조-컴퓨터 시스템 구성.
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
Lecture #3 제2장 CPU의 구조와 기능(2).
AT MEGA 128 기초와 응용 I 기본적인 구조.
ARM Development Suite v1.2
공학도를 위한 C언어 프로그래밍실습1 -통합개발환경 사용법-
TVM ver 최종보고서
3.2 분기 명령어.
제10강 PC정비사 1급(필기) Lee Hoon Copyright(c) 2008 LeeHoon All rights reserved.
10장. 컴퓨터 구조에 대한 세 번째 이야기 작성자: 윤성우.
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
Assembly 05 방호남 07 반지훈 09 박상욱.
ARM Development Suite v1.2
Presentation transcript:

REVERSE ENGINEERING HeXA 1st

CPU Register, Assembly Language 실전 문제 CPU Register, Assembly Language ‘Ollydbg’ 사용법 ‘Reverse Engineering’ 이란?

REVERSE ENGINEERING Reverse Engineering 이란? - 거꾸로 분석하는 것 (소프트웨어를 ‘역’으로 분석) Reversing 이란? - Reverse Engineering 의 줄임말 :D

REVERSE ENGINEERING 소스 코드 (Source Code) 컴파일 (Compile) 디컴파일 (Decompile) 어셈블리어 (Assembly) 디어셈블 (Deassemble) 어셈블 (Assemble) 기계어 (Binary / 0,1)

REVERSE ENGINEERING 정적분석 – 파일을 실행시키지 않고 분석 (파일의 종류, 크기, 헤더내용 등) //논리적 오류 수정에 적합 동적분석 – 파일을 실행시켜서 분석 (Registry, Network 등 모니터링/디버깅) // “Ollydbg”

‘Ollydbg’ 사용법

어셈블리 코트, 레지스터 상태, Dump 창(해당 주소를 16진법으로 보여줌), 스택

CPU구조 ALU(Arithmetic Logic Unit) CU(Control Unit) Register 산술연산, 논리연산 수행 CU(Control Unit) 명령어 해석, 장치 동작 지시 Register 기억장치 Bus Interface 데이터 전달

CPU 구조

Register란 중앙처리장치(CPU)에 있는 소규모 기억장치 내부Bus가 Register와 ALU, CU와 연결되어 있다 주기억장치(RAM) 보다 저장하는 속도가 빠르다

Register종류 범용 레지스터(general register) 명령 포인터(command pointer) 카운터, 데이터주소저장, 연산등의 목적 명령 포인터(command pointer) CU에서 액세스할 기억장치장소 저장 세그먼트 레지스터(segment register) 코드, 데이터, 스택의 주소 저장 플래그 레지스터(flag register) 연산 결과 상태를 표시

범용 레지스터 EAX(Extended Accumulator Register) EBX(Extended Base Register) ECX(Extended Counter Register) EDX(Extended Data Register) ESI(Extended Source Index) EDI(Extended Destination Index) ESP(Extended Stack Pointer) EBP(Extended Base Pointer) 16bit 에서는 앞에 E(Extended)를 빼면 됨 Ex. AX, SI, SP ….

범용 레지스터 EAX(or AX) : 산술연산에 사용, 함수의 리턴값 저장 EBX(or BX) : ESI, EDI와 결합하여 간접번지 지정 ECX(or CX) : 반복카운터로 사용 EDX(or DX) : EAX와 같이 쓰며 부호 확장 명령에 사용 ESI(or SI) : 데이터 복사시 Source의 주소 저장 EDI(or DI) : 데이터 복사시 Destination의 주소 ESP(or SP) : 스택의 TOP의 주소저장 EBP(or BP) : 스택의 BOTTOM의 주소저장

명령 포인터 EIP(Extended Instruction Pointer) 다음 명령어의 주소값을 저장한다

세그먼트 레지스터 CS(Code Segment) DS(Data Segment) SS(Stack Segment) 코드 영역을 가리키는 레지스터 DS(Data Segment) 데이터 영역을 가리키는 레지스터 SS(Stack Segment) 스택 영역을 가리키는 레지스터 세그먼트 레지스터는 16비트

플래그 레지스터 CF(Carry Flag) ZF(Zero Flag) OF(Overflow Flag) SF(sign Flag) 부호가 없는 연산시 결과가 용량보다 크면 세트(1) ZF(Zero Flag) 연산 결과가 0일때 세트(1), 0이 아니면 해제(0) OF(Overflow Flag) 부호 있는 연산시 결과가 용량보다 클면 세트(1) SF(sign Flag) 연산 결과가 음수일때 세트(1), 양수 이면 해제(0) DF(Direction Flag) 문자열 처리시 처리 방향에 따라 세트

어셈블리어란 저급언어의 하나로 기계와 1:1로 대응하는 언어로 사람이 이해하기 쉽게 변형한 언어

주요명령어 MOV destination, source ADD operand1, operand2 SUB operand1, operand2 Operand1 -= operand2 MUL operand1 EAX(or AX)레지스터값 *= opreand1 IMUL destination, operand1, operand2 Destination = operand1 * operand2 SHL/SHR operand1, operand2 Operand1 <</>> operand2

주요명령어 AND operand1, operand2 OR operand1, opearand2 각 비트가 모두 1일때 1, 아니면 0 OR operand1, opearand2 각 비트가 모두 0일때 0, 아니면 1 XOR operand1, operand2 각 비트가 서로 다를때 1, 아니면 0 CMP operand1, operand2 (Operand1 - operand2) == 0 결과는 0

주요명령어 CALL operand1 RET JMP operand1 PUSH operand1 PUSHAD/PUSHFD 호출되었던 부분으로 리턴 JMP operand1 Operand1 지점으로 이동 PUSH operand1 스택에 값을 넣는다 PUSHAD/PUSHFD 범용레지스터/플래그 레지스터 값을 스택에 PUSH한다 POP operand1 스택에 값을 가져온다 POPAD/POPFD 범용레지스터/플래그 레지스터 값을 스택에서 POP한다

Jump를 사용한 CrackMe1

Winapi를 사용한 INC, DEC 풀이 API INC : 1 증가 DEC : 1 감소 Application Programming Interface 운영체제가 응용 프로그램을 위해 제공하는 함수의 집합 INC : 1 증가 DEC : 1 감소

Return code/value drive_unknown 0 drive_no_root_dir 1 drive_removable 2 drive_fixed 3 drive_remote 4 drive_cdrom 5 drive_ramdisk 6

EAX ESI 3 0 3 1 2 1 2 2 2 3 1 3 DEC 2개를 NOP 처리

감사합니다