[기술세미나 2차시] ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터...

16
1 / 16 IA-32레지스터 분석 및 abex’ crackme를 통한 파라미터 전달 실습 25-1 박성호 리버싱 #2

Upload: seongho-park

Post on 29-Jan-2018

52 views

Category:

Engineering


8 download

TRANSCRIPT

Page 1: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

1 / 16

IA-32레지스터 분석 및

abex’ crackme를 통한 파라미터 전달 실습

25-1 박성호

리버싱 #2

Page 2: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

2 / 16

목차

Register? – Register, IA-32 Register, Load & Store Design

메모리 구조 소개 (8086 Memory Architecture)

Stack, Stack 에 사용되는 레지스터 (ESP, EBP, Stack Frame, RET, FP, SFP)

실습

Q&A

Page 3: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

3 / 16

Register? _ Definition

Page 4: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

4 / 16

Register? _ Load & Store Design

int a = 10; // 0x10번지 할당int b = 20; // 0x20번지 할당int c = 0; // 0x30번지 할당

c = a + b;"0x10번지(a)에 저장된 값과 0x20번지(b)에 저장된 값을 더해서 0x30번지(c)에 저장해라"

메인메모리에 저장된 데이터를 레지스터로 일단 옮긴 후, 그 다음 덧셈을 진행해야 함.

-------------------------------------Register Set ---------> 메인 메모리

(STORE)<--------

(LOAD)-------------------------------------

Page 5: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

5 / 16

Register? _ Load & Store Design

-----------------------------------------------------예약(2) LOAD(3) destination(3) source(8)

110 011 00000111-----------------------------------------------------

- destination : 데이터를 저장한 레지스터 정보- source : 데이터를 읽어올 메모리 주소 정보

-----------------------------------------------------예약(2) STORE(3) source(3) destination(8)

110 010 00001000-----------------------------------------------------

LOAD r3, 0x07->0x07번지에 존재하는 데이터를 레지스터 r3에 저장STORE r2, 0x08->레지스터 r2에 존재하는 데이터를 메인 메모리의 0x80번지에 저장

Page 6: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

6 / 16

Register? _ Load & Store Design

int a = 10; // 0x10번지 할당int b = 20; // 0x20번지 할당int c = 0; // 0x30번지 할당c = a + b;

----------------------------------------------------

10 0x10----------------------------------------------------

20 0x20----------------------------------------------------

30 0x30----------------------------------------------------

LOAD r1, 0x10 // 0x10번지에 저장된 데이터를r1로 이동

LOAD r2, 0x20 // 0x20번지에 저장된 데이터를r2로 이동

ADD r3, r1, r2 // r1, r2에 저장된 값을 더해서r3에 결과를 저장

STORE r3, 0x30 // r3에 저장된 값을0x30번지에 저장

피연산자가 레지스터가 되게끔 하기 위해서 메모리에저장된 값을 레지스터에 옮겨다 놓은 후 연산!!

Conclusion : CU는 명령어를 해석한다.메모리에서 나와 입출력 버스를 타고, 레지스터에 저장된다.

ALU에 의해 연산이 진행되고, 그 결과값은 다시 입출력 버스를 타고 메모리에 STORE 된다.

Page 8: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

8 / 16

Register? _ 범용 Register

Page 9: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

9 / 16

메모리 구조 소개

Page 10: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

10 / 16

메모리 구조 소개

Page 11: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

11 / 16

Stack _ 스택이란

역할1. 로컬 변수 임시 저장.2. 함수 호출 시 파라미터 전달3. 리턴 어드레스 저장

스택이 높은 주소에서부터 쌓이는 이유

Page 12: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

12 / 16

Stack _ 스택에 사용되는 ESP, Stack Frame, RET, EBP, FP, SFP 레지스터

Page 13: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

13 / 16

Stack _ 스택에 사용되는 ESP, Stack Frame, RET, EBP, FP, SFP 레지스터

Page 14: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

14 / 16

실습소개

실습목표 : Disassem Code의 Debuging 연습

내용 : CD-ROM을 요구하는 프로그램이 있을 때, HDD 를 CD-Rom으로 크랙시켜 통과 메시지를 출력시키도록 함.

응용기술 : Stack에 파라미터를 전달하는 과정을 이해하여 크랙화Stack의 FIFO 구조의 이해

사용되는 명령 : PUSH, CALL, INC, DEC, JMP, CMP, JE

Page 15: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

15 / 16

실 습

Page 16: [기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습

16 / 16

Q & A