본문 바로가기

Hacking/System Hacking

<해킹: 공격의 예술> 1회차 스터디

728x90
반응형
<해킹: 공격의 예술> 책을 보고 공부한 내용입니다
X86 프로세서를 기준으로 합니다.

GDB 조사 명령 형식

o : 8진법

x : 16진법

u : 부호가 없는 표준 10진법 

t : 2진법 

 

메모리 단일 유닛의 기본 크기는 '워드' 라 불리는 4 byte (32bit 환경에서) 

b 단일 바이트

h 2byte의 하프워드

w 4byte의 워드

g 8byte의 자이언트 

 

eip 레지스터 : 프로세서가 읽고 있는 현재 명령의 위치를 가리키는 명령 포인터 레지스터 

i r eip : eip 레지스터의 현재 메모리 주소 

x/x $eip : 16진법으로 eip가 갖고 있는 값 출력 ($eip는 그 순간 eip가 갖고 있는 값을 의미한다.) 

x/xw $eip : 16진법으로 4byte만큼 출력 ( 리틀엔디안 x )

 x/i $eip :  eip 위치의 역어셈블된 어셈블리 언어의 명령 메모리 확인 ex) x/4i 이면 4줄 조사 

x/6xb 0x8048484 : 메모리 주소에 들어있는 값 16진수 바이트 단위로 6 byte 조사 ( 리틀엔디안 ) 

 

문자열 

- 문자 배열

- 배열의 마지막은 널 바이트로 저장 ( 문자열을 처리할 때 여기서 중단하라고 알리기 위함) 

 

Signed , Unsigned 

unsigned : 부호 없이 선언 

signed : 부호 존재 

 

포인터

- x86 아키텍처의 메모리는 32bit 주소를 사용하므로 포인터의 크기는 32bit(4byte)이다. 

Ex) 

int int_var = 5;
int *int_ptr; # 포인터 

int_ptr = &int_var; # int_var의 주소를 int_ptr에 넣는다. 

/**
int_ptr = 0xbffff834 # int_var의 위치
&int_ptr = 0xbffff830 # int_ptr의 위치
*int_ptr = 0x00000005 # int_var의 값 

int_ptr에는 int_var의 위치 주소 값이 들어있으며 가리키는 값은 int_var의 값이다. 
**/

 

형식 문자열 

%d , %u, %x -> 포인터가 아닌 값 자체를 받아들인다. 

%s, %n -> 포인터를 받아들인다. 

 

- %s 형식 인자는 주어진 메모리 주소에서부터 시작해 널 바이트가 나올 때까지 메모리에 있는 데이터를 출력한다. 

- %n 형식 인자는 지금까지 출력한 바이트의 수를 주어진 메모리 주소에 쓴다. 

 

scanf printf와 다른 점? 모든 인자가 포인터여야 한다. (인자가 변수 자체가 아니라 변수 주소여야 한다는 의미!!) 

 

형 변환 

char char_array[5] = {'a','b','c','d','e'}
int int_array[5] = {1,2,3,4,5} 

char *char_pointer;
int *int_pointer; 

# 타입을 제대로 맞춰주어야함 
char_pointer =  char_array;
int_pointer = int_array;

# 포인터 이동 
# 1->2
int_pointer = int_pointer + 1; # 정수 타입이므로 4byte 이동 
# a->b
char_pointer = char_pointer + 1; # char 타입이므로 1byte 이동
char char_array[5] = {'a','b','c','d','e'}
int int_array[5] = {1,2,3,4,5} 

# 타입이 없는 포인터를 사용 후 형 변환을 해주는 것도 가능 
void *void_pointer; 

void_pointer = (void *) char_array;

# 포인터가 가리키는 값 바꾸고 싶은 경우 
void_pointer = (void *)((char *) void_pointer + 1);


C의 변수에 대해 기억해야 할 중요한 점은, 컴파일러는 변수 타입에만 관심이 있다는 점

프로그램을 컴파일하고 나면 변수는 메모리 주소일 뿐이다. 

어떤 타입의 변수도 컴파일러가 원하는 타입으로 강제적으로 형 변환할 수 있다. 

 

728x90
반응형

'Hacking > System Hacking' 카테고리의 다른 글

<해킹: 공격의 예술> 3회차 스터디  (0) 2022.05.01
<해킹: 공격의 예술> 2회차 스터디  (0) 2022.04.28
[dreamhack] Return to Library  (0) 2022.04.10
[dreamhack] ssp_001 문제풀이  (0) 2022.04.04
카나리 우회기법  (0) 2022.04.02