[์์คํ ]์ด์ ๋ธ๋ฆฌ์ด ๊ธฐ์ด, ๋ช ๋ น์ด ์ ๋ฆฌ
<x64๋ ์ง์คํฐ>
rax rbx rcx rdx rsi rdi
rbp r8 r9 r10 r11 r12 r13 r14 r15
rsp
rip
๋ฒ์ฉ ๋ ์ง์คํฐ
์ฉ๋๊ฐ ํน๋ณํ๊ฒ ์ ํด์ง์ง ์์ ๋ ์ง์คํฐ๋ก, ๋ณ์์ ๊ฐ์ ์ญํ ์ ํ๋ค.
์ฉ๋๊ฐ ์ ํด์ ธ ์์ง ์์ง๋ง ๋์ ๋ฐ๋ผ ๊ทธ ์ฐ์์๊ฐ ์ ํด์ ธ ์๋ ๊ฒฝ์ฐ๋ ์กด์ฌ
(rax๋ ํจ์ ๋ฆฌํด๊ฐ rsi๋ ํจ์ ํ๋ผ๋ฉํฐ)
ํจ์ ํธ์ถ ๊ท์ฝ
ํจ์๊ฐ ์คํ๋ ๋ ํ์ํ ์ธ์๋ค์ ์ ์ฅํ๋ ๋ ์ง์คํฐ๋ ์กด์ฌํ๋ค.
(rdi rsi rcx rdx ...)
์คํํฌ์ธํฐ
์คํ์ ๊ฐ์ฅ ์์ชฝ์ ๊ฐ๋ฆฌํจ๋ค. ์คํ์ ํจ์๊ฐ ์ฌ์ฉํ ์ง์ญ ๋ณ์๋ค์ ์ ์ฅํ๊ธฐ ์ํด ์ค๋นํด๋์ ๊ณต๊ฐ์ด๋ค.
(rsp)
ํ๋ก๊ทธ๋จ ์นด์ดํฐ
rip๋ ํ๋ก๊ทธ๋จ์นด์ดํฐ์ ์ญํ ์ ํ๋ค. ํ๋ก๊ทธ๋จ ์นด์ดํฐ๋ ๋ค์์ ์คํ๋ ๋ช ๋ น์ด๊ฐ ์์นํ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
<๋ช ๋ น์ด ํํ>
mov a, b b๋ฅผ a์ ๋ณต์ฌํ๋ค. (a=b)
lea a, [b] b์ ์ฃผ์์ ์๋ ๊ฐ์ a์ ๋ณต์ฌํ๋ค. (a=*b)
cmp a,b a์ b๋ฅผ ๋น๊ตํ๋ค. (if๋ฌธ์์ ์ฃผ๋ก ์ฌ์ฉ)
add a,b a์ b๋ฅผ ๋ํด์ a์ ๊ฒฐ๊ณผ๋ฅผ ๋ฃ๋๋ค. (a+=b)
sub a,b a์ b๋ฅผ ๋บ ๊ฒฐ๊ณผ๋ฅผ a์ ๋ฃ๋๋ค. (a-=b)
imul a,b a์ b๋ฅผ ๊ณฑํ ๊ฒฐ๊ณผ๋ฅผ a์ ๋ฃ๋๋ค.(a*=b)
xor a,b a์ b๋ฅผ xorํ ๊ฒฐ๊ณผ๋ฅผ a์ ๋ฃ๋๋ค. (a ^=b)
je ๋น๊ต๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ ์ ํ (zero flag๊ฐ 0์ด๋ฉด jump)
jne ๋น๊ต ๊ฐ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ ์ ํ (zero flag๊ฐ 1์ด๋ฉด jump)
call ํด๋น ํจ์ ํธ์ถ(๋ฆฌํด ๊ฐ์ ์ ์ฅ) -> ๋ค์ ์ ์ผ๋ก ๋์๊ฐ ์ ์๋ค.
jmp ํด๋น ์ฃผ์๋ก ์ ํ -> ์ ์ผ๋ก ๋์๊ฐ ์ ์์ ์์ ์ด๋.
๋ณ์ ์ ์ธ ๋ฐ ์ด๊ธฐํ
rbp-0x8 ์ด๋ผ๋ ๋ณ์์ 3๋ณต์ฌ
rbp-0x4 ์ด๋ผ๋ ๋ณ์์ 4๋ณต์ฌ
๊ฐ๊ฐ edx์ eax๋ก ์ฎ๊น
๋ง์
eax(3)๊ณผ edx(4)๋ฅผ ๋ํ ๊ฐ์ eax์ ๋ฃ๋๋ค. eax=7
ํจ์ ํธ์ถ ๊ท์ฝ
์ฒซ๋ฒ์งธ ์ธ์ rdi -> ๊ฐํ๋ฌธ์
๋๋ฒ์งธ ์ธ์ rsi(esi) -> a+b
ํจ์ ๋ฆฌํด
rax(eax)๋ ํจ์ ๋ฆฌํด๊ฐ(=0)
๋ฐ๋ณต๋ฌธ
์์คํ ํดํน ๊ณผ์
key์ overflowme์ฌ์ด์ ํฌ๊ธฐ์ฐจ์ด๋ฅผ ๊ตฌํ๋ฉด ๋๋ค.
key๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ cmp๋ฅผ ํ์ธํ๋ฉด ๋๋ค. ๋๋ 32๋นํธ ํ๊ฒฝ์์ ebp+0x8์ ์ฒซ๋ฒ์งธ ์ธ์๋ผ๋ ๊ฒ์ ๊ธฐ์ตํ๋ฉด ๋๋ค.
overflowme๋ lea๋ฅผ ํตํด ๊ตฌํ ์ ์๋ค. (ebp-0x2c)
ebp+0x8๊ณผ ebp-0x2c์ฌ์ด์ ํฌ๊ธฐ ์ฐจ์ด๋ 52byte์ด๊ธฐ ๋๋ฌธ์
A*52+ "\xbe\xba\xfe\xca(๊ฑฐ๊พธ๋ก ๋ฃ์ด์ผํจ) ์ ๊ฐ์ด ์ ์ผ๋ฉด ๋๋ค.
++) ๊ณผ์ (์ด์ ๋ธ๋ฆฌ๋ฅผ C์ฝ๋๋ก ๋ณํํด๋ณด๊ธฐ)
์์)
int a=0;
int b=0;
if(b<=9){ --> for๋ฌธ
eax=b;
b=b+1;
} -> ๋ค์ ์๋ก ์ ํ
๋ต)
b๋ฅผ 10๋ฒ ๋๋ฆฌ๋ for๋ฌธ์ผ๋ก
b๊ฐ ํ์๋ฉด(jump 54) b=b+1
b๊ฐ ์ง์๋ฉด ์๋๋ก ์ญ ์คํ
a=a+b ,b=b+1
-> a=2, 4 ,6 ,8
int a=0;
int b=0;
for(b=0;b<=9;b++){
if(b==์ง์){
a=a+b}
if(b==ํ์){
ํ ๊ฑฐ x}
}
printf(a)
a=2 , a=6, a=12, a=20
๋ฐ๋ผ์ ๋ต์ 20
์ด๋ ค์ด ๋ฌธ์ ์๋ค..ใ ใ
์ฐธ๊ณ : ARGOS ์์คํ ํดํน ๊ต์ก์๋ฃ