x86 Assembly๐ค: Essential Part(2)
# ์๋ก
- ์ด์์ฒด์ ์ ํต์ฌ ์๋ฃ๊ตฌ์กฐ์ธ ์คํ, C์ธ์ด์ ํจ์์ ๋์๋๋ ํ๋ก์์ , ๊ทธ๋ฆฌ๊ณ ์์คํ ํดํน์ ๊ด์ ์์ ๋งค์ฐ ์ค์ํ ์์คํ ์ฝ๊ณผ ๊ด๋ จ๋ ์ด์ ๋ธ๋ฆฌ๋ฅผ ๋ฐฐ์
- ์คํ: push, pop
- ํ๋ก์์ : call, leave, ret
- ์์คํ ์ฝ: 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 |