songining
article thumbnail

<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 ์‹œ์Šคํ…œํ•ดํ‚น ๊ต์œก์ž๋ฃŒ