Fascination
article thumbnail

x86 Assembly๐Ÿค–: Essential Part(2)


# ์„œ๋ก 

- ์šด์˜์ฒด์ œ์˜ ํ•ต์‹ฌ ์ž๋ฃŒ๊ตฌ์กฐ์ธ ์Šคํƒ, C์–ธ์–ด์˜ ํ•จ์ˆ˜์— ๋Œ€์‘๋˜๋Š” ํ”„๋กœ์‹œ์ €, ๊ทธ๋ฆฌ๊ณ  ์‹œ์Šคํ…œ ํ•ดํ‚น์˜ ๊ด€์ ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ์ฝœ๊ณผ ๊ด€๋ จ๋œ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋ฐฐ์›€

  1. ์Šคํƒ: push, pop
  2. ํ”„๋กœ์‹œ์ €: call, leave, ret
  3. ์‹œ์Šคํ…œ์ฝœ: syscall

 

 

# x86-64 ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์–ด

1. Opcode: ์Šคํƒ ๐Ÿงฑ

- x64 ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋กœ ์Šคํƒ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ

push val // val์„ ์Šคํƒ ์ตœ์ƒ๋‹จ์— ์Œ“์Œ

 

์Šคํƒ์€ ํ™•์žฅ ๋  ๋•Œ ๊ธฐ์กด ์ฃผ์†Œ๋ณด๋‹ค ๋‚ฎ์€ ์ฃผ์†Œ๋กœ ํ™•์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜๋กœ ์ž๋žŒ

pop reg // ์Šคํƒ ์ตœ์ƒ๋‹จ์˜ ๊ฐ’์„ ๊บผ๋‚ด์„œ reg์— ๋Œ€์ž…

 

 

2. Opcode: ํ”„๋กœ์‹œ์ € ๐Ÿ“œ

- ํ”„๋กœ์‹œ์ €(Procedure): ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ ์กฐ๊ฐ

- ํ”„๋กœ์‹œ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜๋ณต๋˜๋Š” ์—ฐ์‚ฐ์„ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ „์ฒด ์ฝ”๋“œ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ๋Šฅ๋ณ„๋กœ ์ฝ”๋“œ ์กฐ๊ฐ์— ์ด๋ฆ„์„ ๋ถ™์ผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Œ

- call(ํ˜ธ์ถœ): ํ”„๋กœ์‹œ์ €๋ฅผ ๋ถ€๋ฅด๋Š” ํ–‰์œ„

- return(๋ฐ˜ํ™˜): ํ”„๋กœ์‹œ์ €์—์„œ ๋Œ์•„์˜ค๋Š” ๊ฒƒ

- ํ”„๋กœ์‹œ์ €๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋Š” ํ”„๋กœ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋‚˜์„œ ์›๋ž˜์˜ ์‹คํ–‰ ํ๋ฆ„์œผ๋กœ ๋Œ์•„์™€์•ผ ํ•˜๋ฏ€๋กœ, call ๋‹ค์Œ์˜ ๋ช…๋ น์–ด ์ฃผ์†Œ(return address)๋ฅผ ์Šคํƒ์— ์ €์žฅํ•˜๊ณ  ํ”„๋กœ์‹œ์ €๋กœ rip๋ฅผ ์ด๋™

- x64์–ด์…ˆ๋ธ”๋ฆฌ์–ธ์–ด์—๋Š” ํ”„๋กœ์‹œ์ €์˜ ํ˜ธ์ถœ๊ณผ ๋ฐ˜ํ™˜์„ ์œ„ํ•œ call, leave, ret ๋ช…๋ น์–ด๊ฐ€ ์žˆ์Œ

call addr // addr์— ์œ„์น˜ํ•œ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ

 

leave // ์Šคํƒํ”„๋ ˆ์ž„ ์ •๋ฆฌํ•˜๋ฉฐ leave ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆ˜ํ–‰์„ ํฌํ•จํ•จ

 

๐Ÿ’ก ์Šคํƒ ํ”„๋ ˆ์ž„์ด๋ž€?

- ์Šคํƒ์€ ํ•จ์ˆ˜๋ณ„๋กœ ์ž์‹ ์˜ ์ง€์—ญ๋ณ€์ˆ˜ ๋˜๋Š” ์—ฐ์‚ฐ๊ณผ์ •์—์„œ ๋ถ€์ฐจ์ ์œผ๋กœ ์ƒ๊ฒจ๋‚˜๋Š” ์ž„์‹œ ๊ฐ’๋“ค์„ ์ €์žฅํ•˜๋Š” ์˜์—ญ

- ๋งŒ์•ฝ ์ด ์Šคํƒ ์˜์—ญ์„ ์•„๋ฌด๋Ÿฐ ๊ตฌ๋ถ„ ์—†์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ํ•จ์ˆ˜๊ฐ€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ

  ex) A๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ B๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, ์ด ๋‘˜์ด ๊ฐ™์€ ์Šคํƒ ์˜์—ญ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, B์—์„œ A์˜ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ๋ชจ๋‘ ์˜ค์—ผ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ

  ์ด ๊ฒฝ์šฐ, B์—์„œ ๋ฐ˜ํ™˜ํ•œ ๋’ค A๋Š” ์ •์ƒ์ ์ธ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Œ

- ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜๋ณ„๋กœ ์„œ๋กœ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์Šคํƒ์˜ ์˜์—ญ์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์Šคํƒํ”„๋ ˆ์ž„์ด ์‚ฌ์šฉ๋จ

- ์šฐ๋ถ„ํˆฌ 18.04์—์„œ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ๋  ๋•Œ ์ž์‹ ์˜ ์Šคํƒํ”„๋ ˆ์ž„์„ ๋งŒ๋“ค๊ณ , ๋ฐ˜ํ™˜ํ•  ๋•Œ ์ด๋ฅผ ์ •๋ฆฌํ•จ

ret // return address๋กœ์˜ ๋ฐ˜ํ™˜

 

 

์Šคํƒ ํ”„๋ ˆ์ž„์˜ ํ• ๋‹น๊ณผ ํ•ด์ œ

 

3. Opcode: ์‹œ์Šคํ…œ ์ฝœ ๐Ÿ“Ÿ

- ์œˆ๋„์šฐ, ๋ฆฌ๋ˆ…์Šค, ๋งฅ ๋“ฑ์˜ ํ˜„๋Œ€ ์šด์˜์ฒด์ œ๋Š” ์ปดํ“จํ„ฐ ์ž์›์˜ ํ˜ธ์œจ์ ์ธ ์‚ฌ์šฉ์„ ์œ„ํ•ด, ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ํŽธ๋ฆฌํ•œ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด, ๋‚ด๋ถ€์ ์œผ๋กœ ๋งค์šฐ ๋ณต์žกํ•œ ๋™์ž‘์„ ํ•จ

- ์šด์˜์ฒด์ œ๋Š” ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ํ•˜๋“œ์›จ์–ด ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋“ค์„ ์ œ์–ดํ•  ์ˆ˜๋„ ์žˆ์Œ

- ํ•ดํ‚น์œผ๋กœ๋ถ€ํ„ฐ ์ด ๋ง‰๊ฐ•ํ•œ ๊ถŒํ•œ์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋„ ๋ชจ๋“œ์™€ ์œ ์ € ๋ชจ๋“œ๋กœ ๊ถŒํ•œ์„ ๋‚˜๋ˆ”

- ์ปค๋„ ๋ชจ๋“œ: ์šด์˜์ฒด์ œ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์Šคํ…œ ์†Œํ”„ํŠธ์›จ์–ด์— ๋ถ€์—ฌํ•˜๋Š” ๊ถŒํ•œ

  > ํŒŒ์ผ ์‹œ์Šคํ…œ, ์ž…๋ ฅ/์ถœ๋ ฅ, ๋„คํŠธ์›Œํฌ ํ†ต์‹ , ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋“ฑ ๋ชจ๋“  ์ €์ˆ˜์ค€์˜ ์ž‘์—…์€ ์‚ฌ์šฉ์ž ๋ชจ๋ฅด๊ฒŒ ์ปค๋„ ๋ชจ๋“œ์—์„œ ์ง„ํ–‰๋จ

  > ์ปค๋„ ๋ชจ๋“œ์—์„œ๋Š” ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ๋ถ€๋ถ„์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด์ปค๊ฐ€ ์ปค๋„ ๋ชจ๋“œ๊นŒ์ง€ ์ง„์ž…ํ•˜๊ฒŒ ๋˜๋ฉด ์‹œ์Šคํ…œ์€ ๊ฑฐ์˜ ๋ฌด๋ฐฉ๋น„ ์ƒํƒœ๊ฐ€ ๋จ

- ์œ ์ € ๋ชจ๋“œ: ์šด์˜์ฒด์ œ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌํ•˜๋Š” ๊ถŒํ•œ

  > ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ด์šฉํ•ด ๋“œ๋ฆผํ•ต์„ ๋ณด๊ฑฐ๋‚˜, ์œ ํŠœ๋ธŒ๋ฅผ ์‹œ์ฒญํ•˜๋Š” ๊ฒƒ, ๊ฒŒ์ž„์„ ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ๊ฒƒ ๋“ฑ์€ ๋ชจ๋‘ ์œ ์ € ๋ชจ๋“œ์—์„œ ์ด๋ฃจ์–ด์ง

  > ๋ฆฌ๋ˆ…์Šค์—์„œ ๋ฃจํŠธ ๊ถŒํ•œ์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ํŒจํ‚ค์ง€๋ฅผ ๋‚ด๋ ค ๋ฐ›๋Š” ํ–‰์œ„๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž„

  > ์œ ์ € ๋ชจ๋“œ์—์„œ๋Š” ํ•ดํ‚น์ด ๋ฐœ์ƒํ•ด๋„, ํ•ด์ปค๊ฐ€ ์œ ์ € ๋ชจ๋“œ์˜ ๊ถŒํ•œ๊นŒ์ง€ ๋ฐ–์— ํš๋“ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์ปค๋กœ๋ถ€ํ„ฐ ์ปค๋„์˜ ๋ง‰๊ฐ•ํ•œ

  ๊ถŒํ•œ์„ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ์Œ

- ์‹œ์Šคํ…œ ์ฝœ(system call, syscall): ์œ ์ € ๋ชจ๋“œ์—์„œ ์ปค๋„ ๋ชจ๋“œ์˜ ์‹œ์Šคํ…œ ์†Œํ”„ํŠธ์›จ์–ด์—๊ฒŒ ์–ด๋–ค ๋™์ž‘์„ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ

  > ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋Œ€๋ถ€๋ถ„์€ ์ปค๋„์˜ ๋„์›€์ด ํ•„์š”ํ•จ

  > ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ cat flag๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, cat์€ flag๋ผ๋Š” ํŒŒ์ผ์„ ์ฝ์–ด์„œ ์‚ฌ์šฉ์ž์˜ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด ์ค˜์•ผ ํ•จ

  > ๊ทธ๋Ÿฐ๋ฐ flag๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์กด์žฌํ•˜๋ฏ€๋กœ ์ด๋ฅผ ์ฝ์œผ๋ ค๋ฉด ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

  > ์œ ์ € ๋ชจ๋“œ์—์„œ๋Š” ์ด๋ฅผ ์ง์ ‘ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ปค๋„์ด ๋„์›€์„ ์ฃผ์–ด์•ผ ํ•จ

  > ์—ฌ๊ธฐ์„œ, ๋„์›€์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์š”์ฒญ์„ ์‹œ์Šคํ…œ ์ฝœ์ด๋ผ๊ณ  ํ•จ

  > ์œ ์ € ๋ชจ๋“œ์˜ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ•„์š”ํ•œ ๋„์›€์„ ์š”์ฒญํ•˜๋ฉด, ์ปค๋„์ด ์š”์ฒญํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์œ ์ €์—๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•จ

- x64์•„ํ‚คํ…์ฒ˜์—๋Š” ์‹œ์Šคํ…œ์ฝœ์„ ์œ„ํ•ด syscall ๋ช…๋ น์–ด๊ฐ€ ์žˆ์Œ

๋ฆฌ๋ˆ…์Šค ๊ณ„์ธต

- ์‹œ์Šคํ…œ ์ฝœ์€ ํ•จ์ˆ˜์ž„

  > ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๊ณผ ์ธ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ „๋‹ฌํ•˜๋ฉด, ์ปค๋„์ด ์ด๋ฅผ ์ฝ์–ด์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ

- ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” x64์•„ํ‚คํ…์ฒ˜์—์„œ rax๋กœ ๋ฌด์Šจ ์š”์ฒญ์ธ์ง€ ๋‚˜ํƒ€๋‚ด๊ณ , ์•„๋ž˜์˜ ์ˆœ์„œ๋Œ€๋กœ ํ•„์š”ํ•œ ์ธ์ž๋ฅผ ์ „๋‹ฌ

 

x64 syscall ํ…Œ์ด๋ธ”

 

 

# Epilogue

- ์ฝ”์Šค ์š”์•ฝ ๐Ÿ—’๏ธ

1. ์Šคํƒ

  • push val: rsp๋ฅผ 8๋งŒํผ ๋นผ๊ณ , ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์— val์„ ์Œ“์Œ
  • pop reg: ์Šคํƒ ์ตœ์ƒ๋‹จ์˜ ๊ฐ’์„ reg์— ๋„ฃ๊ณ , rsp๋ฅผ 8๋งŒํผ ๋”ํ•จ

2. ํ”„๋กœ์‹œ์ €

  • call addr: addr์˜ ํ”„๋กœ์‹œ์ €๋ฅผ ํ˜ธ์ถœํ•จ
  • leave: ์Šคํƒ ํ”„๋ ˆ์ž„์„ ์ •๋ฆฌ
  • ret: ํ˜ธ์ถœ์ž์˜ ์‹คํ–‰ ํ๋ฆ„์œผ๋กœ ๋Œ์•„๊ฐ

3. ์‹œ์Šคํ…œ ์ฝœ

  • syscall: ์ปค๋„์—๊ฒŒ ํ•„์š”ํ•œ ๋™์ž‘์„ ์š”์ฒญ

 

 

# Quiz

- ํ’€์ด

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ์–ด์„œ ๋‹ต์„ ๋„์ถœํ•˜๋ฉด ๋ฆฌํ‹€์—”๋””์•ˆ ๋ฐฉ์‹์œผ๋กœ ์ฝ์—ˆ์„ ๋•Œ r34dy 70 d3bu6?๊ฐ€ ๋‚˜์˜ด

'Hacking Tech > System Hacking' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Dreamhack] Tool: pwntools  (0) 2022.03.28
[Dreamhack] Tool: gdb  (0) 2022.03.27
[Dreamhack] x86 Assembly๐Ÿค–: Essential Part(1)  (0) 2022.03.26
[Dreamhack] Background: Linux Memory Layout  (0) 2022.03.25
[Dreamhack] Background: Computer Architecture  (0) 2022.03.25
profile

Fascination

@euna-319

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!