๊น๋ง๋์ด๋ค.ใท
์ด๋ฒ ๊ธ์์๋ ๋ฆฌ๋ฒ์ฑ์ ํ์ํ ์ด์ ๋ธ๋ฆฌ ๋ด์ฉ ์ค ํจ์ ๋ถ๋ถ์ ๋ค๋ฃจ๊ณ ์ ํ๋ค.
'๊ฐ๋ณํ, ใ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง ๋ฐ์ด๋ธใ, ์ํค๋ถ์ค, 2014, 1p-127p.'์ ์ฐธ๊ณ ํ๋ค.
ํจ์์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
ํจ์์ ์์
push ebp
mov ebp, esp
ebp๋ ์คํ ๋ฒ ์ด์ค ํฌ์ธํฐ๋ค.
push ebp๋ ์ง๊ธ๊น์ง์ ๋ฒ ์ด์ค ์ฃผ์๋ฅผ ์คํ์ ๋ณด๊ดํ๊ธฐ ์ํด ํ์ํ๋ค.
์ด๋ ๊ฒ ๋ฒ ์ด์ค ํฌ์ธํฐ๋ฅผ ๋ฐฑ์ ํ ๋ค, mov ebp, esp๋ฅผ ํตํด ์คํ ํฌ์ธํฐ์ธ esp๋ฅผ ebp๋ก ๋ฐ๊พผ๋ค.
์๋ก์ด ํฌ์ธํฐ๋ฅผ ๋ฒ ์ด์ค๋ก ์ก๋๋ค๊ณ ํ ์ ์๋ค.
* ํจ์์ ์์๊ณผ ๋ ์ค๊ฐ์ rsp๋ก ํ ๋น๋ ๋ฐ์ดํธ๋งํผ์ ๊ณต๊ฐ์ ํ๋ณดํ๋ค.
ex:) 'sub rsp, 0x100'
ํจ์์ ๋
mov esp, ebp
pop ebp
ํจ์๊ฐ ์ข ๋ฃ๋ ๋๋ ์ง๊ธ๊น์ง ์ฌ์ฉํ ์คํ ์์น๋ฅผ ์๋๋๋ก ๋๋ ค๋์์ผ ํ๋ค.
์คํ ํฌ์ธํฐ๋ฅผ mov esp, ebp๋ก ๋๋ ค๋๊ณ , pop ebp๋ก ์คํ์์ ebp๋ฅผ ๋นผ๋ธ๋ค.
ํจ์์ ์คํํ๋ ์
์๋์ ํจ์ ํธ์ถ์ด ํฌํจ๋๋ C์ธ์ด ์ฝ๋๋ค.
#include<stdio.h>
int sum(int a, int b) {
return a+b;
}
int main(void) {
int c = sum(1, 2);
return c;
}
ํธ์ถํ ํจ์๋ main ํจ์์ด๋ฉฐ caller๋ผ๊ณ ๋ถ๋ฅธ๋ค. ํธ์ถ๋ ํจ์๋ sum() ํจ์์ด๋ฉฐ callee๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ก ๋ฐ๋์์ ๋ ์คํ์์๋ ์ด๋ค ๋ณํ๊ฐ ๋ํ๋๋์ง ํจ์ ํธ์ถ ์ ํ๋ก ๋๋์ด ์ดํด๋ณด๋ฉด,
ํจ์ ํธ์ถ ์ : main() ์ด๋ฐ์ ์คํ
caller ํจ์์ ๋ฒํผ |
main ํจ์์ ๋ณ์, ์ ์์์์๋ 'c' |
RBP: caller ํจ์์ ์คํ์ด ์์ด๊ธฐ ์์ํ๋ Base Pointer, (์ฌ๊ธฐ๋ถํฐ ์คํ์ด ์์ผ ๊ฒ์ด๋ผ๊ณ ์๋ ค์ฃผ๋ ์ญํ ) |
RET: caller ํจ์์ Return Address, main()์ด ๋๋ฌ์ ๋ ๋์๊ฐ ์์น |
์ผ์ชฝ ๊ทธ๋ฆผ์ main() ์ด๋ฐ์ ์คํํ๋ ์์
์ด๋ฏธ์งํํ์ฌ ๋ํ๋ธ ๊ทธ๋ฆผ์ด๋ค.
ํจ์์ ์์ ๋จ๊ณ์์ RBP์ RSP๊ฐ
๋์ผํ ์์น๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
RSP์์ 16์ด ๋น ์ ธ์ 16๋งํผ์ ๊ณต๊ฐ์ด ์๊ธด๋ค.
์ฐธ๊ณ ๋ก, ESI๋ 32๋นํธ์ง๋ฆฌ RSI,
EDI๋ 32๋นํธ์ง๋ฆฌ RDI์ด๋ค.
ํจ์ ํธ์ถ ํ: sum() (ํธ์ถ๋ ํจ์) ์ด๋ฐ์ ์คํ
์๋ ํ์์ ๋ฐ์ค ์ณ์ง ๋ถ๋ถ์ด ์คํ ์ค ํจ์ ํธ์ถ๋ก ์ถ๊ฐ๋ก ์๊ฒจ๋ ๋ถ๋ถ์ด๋ค.
callee ํจ์์ ๋ฒํผ |
RBP: callee ํจ์์ Base Pointer |
RET: callee ํจ์์ return address |
callee ํจ์์ ๋งค๊ฐ๋ณ์, ์์ ์์์์๋ y |
callee ํจ์์ ๋งค๊ฐ๋ณ์, ์์ ์์์์๋ x |
caller ํจ์์ ๋ฒํผ |
main ํจ์์ ๋ณ์ |
RPB: caller ํจ์์ ์คํ์ด ์์ด๊ธฐ ์์ํ๋ Base Pointer, ์ฌ๊ธฐ๋ถํฐ ์คํ์ด ์์ผ ๊ฒ์ด๋ผ๊ณ ์๋ ค์ฃผ๋ ์ญํ |
RET: caller ํจ์์ Return Address, ๋ฉ์ธ์ด ๋๋ฌ์ ๋ ๋์๊ฐ ์์น |
๊ทธ๋ฆผ์์ ๋งจ ์์ 1, 2 ๋ถ๋ถ์ ๋ณด๋ฉด
๋จผ์ ๊ฐ 1๊ณผ 2๋ฅผ
EDI, ESI ๋ ์ง์คํฐ์ ๋ฃ๊ณ
EDX, EAX ๋ ์ง์คํฐ์๋
1๊ณผ 2๋ฅผ ๋ฃ์ ๋ค
๊ณ์ฐํด์ 3์ด๋ผ๋ ๋ฐํ๊ฐ์
EAX์ ์ ์ฅํด
EAX์ ๊ฐ์ ๋ฐํํ๋ค.
์ดํ RBP ๊ฐ์ ๋นผ๋ด์ RET(Return Address)๋ก ๋์๊ฐ๋ค.
์ด๋ฏธ์ง ์ถ์ฒ: ๋๋น. “์์คํ ํดํน ๊ฐ์ข 4๊ฐ - ๋ ์ง์คํฐ์ ์ฉ๋์ ์์คํ ์ฝ ์ดํดํ๊ธฐ (System Hacking Tutorial 2017 #4)” 2017. Video. https://www.youtube.com/watch?v=PsXXjNL_ogc.
'๐ง ๋ฆฌ๋ฒ์ฑ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Dreamhack ๋ฆฌ๋ฒ์ฑ ๋ฌธ์ ํ์ด: rev-basic-2 (0) | 2023.10.31 |
---|---|
๊ธฐํ ๋ฆฌ๋ฒ์ฑ ๋ฌธ์ ํ์ด: easy-crackme1 (1) | 2023.10.09 |
Dreamhack ๋ฆฌ๋ฒ์ฑ ๋ฌธ์ ํ์ด: rev-basic-1 (1) | 2023.10.09 |
Dreamhack ๋ฆฌ๋ฒ์ฑ ๋ฌธ์ ํ์ด: rev-basic-0 (0) | 2023.08.05 |
๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง: ์ด์ ๋ธ๋ฆฌ (๋ ์ง์คํฐ, ์ต์ฝ๋) (0) | 2023.08.02 |