<ํดํน: ๊ณต๊ฒฉ์ ์์ > ์ฑ ์ ๋ณด๊ณ ๊ณต๋ถํ ๋ด์ฉ์ ๋๋ค
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์ ๋ณ์์ ๋ํด ๊ธฐ์ตํด์ผ ํ ์ค์ํ ์ ์, ์ปดํ์ผ๋ฌ๋ ๋ณ์ ํ์
์๋ง ๊ด์ฌ์ด ์๋ค๋ ์
ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ๊ณ ๋๋ฉด ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ผ ๋ฟ์ด๋ค.
์ด๋ค ํ์ ์ ๋ณ์๋ ์ปดํ์ผ๋ฌ๊ฐ ์ํ๋ ํ์ ์ผ๋ก ๊ฐ์ ์ ์ผ๋ก ํ ๋ณํํ ์ ์๋ค.
'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 |