์Šคํƒ ํ”„๋ ˆ์ž„(Stack Frame)

2022. 8. 28. 01:03ยทReverse Engineering

๐Ÿ“Œ์Šคํƒ ํ”„๋ ˆ์ž„(Stack Frame)์ด๋ž€?

 ESP(์Šคํƒ ํฌ์ธํ„ฐ)๊ฐ€ ์•„๋‹Œ EBP(๋ฒ ์ด์Šค ํฌ์ธํ„ฐ) ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ

์Šคํƒ ๋‚ด์˜ ๋กœ์ปฌ ๋ณ€์ˆ˜, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ณต๊ท€ ์ฃผ์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ธฐ๋ฒ•

 

โžก๏ธ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ์ฃผ์†Œ๊ฐ’, ์ง€์—ญ ๋ณ€์ˆ˜ ๋“ฑ

๋ฉ”๋ชจ๋ฆฌ์˜ ์Šคํƒ ์˜์—ญ์— ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ๋˜๋Š” ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ์ •๋ณด๋ฅผ ์Šคํƒ ํ”„๋ ˆ์ž„์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

 

 

 

โ—์งš๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ - ์Šคํƒ

 

(1) Push

์Šคํƒ์— Push๋ฅผ ํ•˜์—ฌ ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ์Šคํƒ์˜ ๋ฐ”๋‹ฅ(EBP)์—์„œ ์Šคํƒ ํƒ‘(ESP)์„ ํ–ฅํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ธ๋‹ค.

 

(2) Pop

์Šคํƒ์— Pop์„ ํ•˜์—ฌ ๊ฐ’์„ ๋นผ๋ฉด ์Šคํƒ์˜ ํƒ‘(ESP)์—์„œ ์Šคํƒ์˜ ๋ฐ”๋‹ฅ(EBP)์„ ํ–ฅํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ค„์–ด๋“ ๋‹ค.

โžก๏ธ ์ฆ‰, ๋ฐ์ดํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๋‚ฎ์€ ์ฃผ์†Œ์— ์ €์žฅ์ด ๋œ๋‹ค.

 

๋ฐ์ดํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๋‚ฎ์€ ์ฃผ์†Œ์— ์ €์žฅ์ด ๋˜๋Š” ์ด์œ ๋Š” ์ปค๋„(Kernel)๊ณผ ๋งŒ๋‚˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

 

 

 

 

๐Ÿ“ขํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ๋‹จ๊ณ„

  1. ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉํ•  ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋„ฃ๊ณ  ํ•จ์ˆ˜ ์‹œ์ž‘ ์ง€์ ์œผ๋กœ ์ ํ”„ํ•œ๋‹ค. โžก๏ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ
  2. ํ•จ์ˆ˜ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์Šคํƒ ํ”„๋ ˆ์ž„์„ ์„ค์ •ํ•œ๋‹ค. โžก๏ธ ํ•จ์ˆ˜ ํ”„๋กค๋กœ๊ทธ
  3. ํ•จ์ˆ˜์˜ ๋‚ด์šฉ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. โžก๏ธ ํ•จ์ˆ˜์˜ ๋ณธ์ฒด
  4. ์ˆ˜ํ–‰์„ ๋๋‚ด๋ฉด ์ฒ˜์Œ ํ˜ธ์ถœํ•œ ์ง€์ ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด ์Šคํƒ์„ ๋ณต์›ํ•œ๋‹ค. โžก๏ธ ํ•จ์ˆ˜ ์—ํ•„๋กœ๊ทธ

 

 

 

๐Ÿงฌ์Šคํƒ ํ”„๋ ˆ์ž„์˜ ๊ตฌ์กฐ

PUSH EBP           # ํ•จ์ˆ˜์‹œ์ž‘ (EBP๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ธฐ์กด์˜ ๊ฐ’์„ ์Šคํƒ์— ์ €์žฅ) 
MOV EBP, ESP       # ํ˜„์žฌ์˜ ESP(์Šคํƒํฌ์ธํ„ฐ)๋ฅผ EBP์—์ €์žฅ 

                   # ํ•จ์ˆ˜ ๋ณธ์ฒด 
    ...            # ์—ฌ๊ธฐ์„œ ESP๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ EBP๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ 
                   # ์•ˆ์ „ํ•˜๊ฒŒ ๋กœ์ปฌ ๋ณ€์ˆ˜์™€ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์—‘์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Œ 


MOV ESP , EBP      # ESP๋ฅผ์ •๋ฆฌ(ํ•จ์ˆ˜ ์‹œ์ž‘ํ–ˆ์„๋•Œ์˜ ๊ฐ’์œผ๋กœ ๋ณต์›์‹œํ‚ด) 
POP EBP            # ๋ฆฌํ„ด๋˜๊ธฐ ์ „์— ์ €์žฅํ•ด ๋†“์•˜๋˜ ์›๋ž˜ EBP ๊ฐ’์œผ๋กœ ๋ณต์›
RETN               # ํ•จ์ˆ˜ ์ข…๋ฃŒ

 

(1) ํ•จ์ˆ˜ ํ”„๋กค๋กœ๊ทธ

PUSH EBP           # ํ•จ์ˆ˜์‹œ์ž‘ (EBP๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ธฐ์กด์˜ ๊ฐ’์„ ์Šคํƒ์— ์ €์žฅ) 
MOV EBP, ESP       # ํ˜„์žฌ์˜ ESP(์Šคํƒํฌ์ธํ„ฐ)๋ฅผ EBP์—์ €์žฅ

ํ•จ์ˆ˜ ์ˆ˜ํ–‰์„ ๋งˆ์น˜๋ฉด ๋‹ค์‹œ ์ œ์ž๋ฆฌ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด EBP์˜ ๊ฐ’์„ ์Šคํƒ PUSH ํ•˜์—ฌ ์ €์žฅํ•ด๋†“๋Š”๋‹ค.

EBP์— ESP๋ฅผ ์ €์žฅํ•ด์คŒ์œผ๋กœ์จ ์Šคํƒ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•ด์ค€๋‹ค.

 

(2) ํ•จ์ˆ˜ ์—ํ•„๋กœ๊ทธ

MOV ESP , EBP      # ESP๋ฅผ์ •๋ฆฌ(ํ•จ์ˆ˜ ์‹œ์ž‘ํ–ˆ์„๋•Œ์˜ ๊ฐ’์œผ๋กœ ๋ณต์›์‹œํ‚ด) 
POP EBP            # ๋ฆฌํ„ด๋˜๊ธฐ ์ „์— ์ €์žฅํ•ด ๋†“์•˜๋˜ ์›๋ž˜ EBP ๊ฐ’์œผ๋กœ ๋ณต์›
RETN               # ํ•จ์ˆ˜ ์ข…๋ฃŒ

ํ•จ์ˆ˜ ์ˆ˜ํ–‰์„ ๋งˆ์น˜๋ฉด ํ˜ธ์ถœ์„ ํ–ˆ๋˜ ์ง€์ ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ ํ•จ์ˆ˜๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์„ ๋•Œ์˜ ๊ฐ’์œผ๋กœ ๋ณต์›์‹œํ‚จ๋‹ค.

๊ทธ๋‹ค์Œ, ํ”„๋กค๋กœ๊ทธ์—์„œ PUSH ํ•ด๋†“์•˜๋˜ ๊ฐ’์„ ๋‹ค์‹œ POP ํ•˜์—ฌ EBP์— ๋„ฃ์–ด์ค€๋‹ค.

 

 

 

 

๐Ÿ“ธ์‹ค์Šตํ•˜๊ธฐ

C ์ฝ”๋“œ

#include <stdio.h>

int sub(int a, int b) {
	int x = a, y = b;
    
	return (x - y);
}

int main() {
	int a = 5, b = 1;
	printf("%d\n", sub(a, b));

	return 0;
}

์œ„์˜ C ์ฝ”๋“œ๋ฅผ Ollydbg๋กœ ์—ด์–ด๋ณด์ž.

 

main() ํ•จ์ˆ˜

 

sub() ํ•จ์ˆ˜

 

 

(1) main() ํ•จ์ˆ˜ ์‹œ์ž‘ & ์Šคํƒ ์ƒํƒœ

โฌ‡๏ธmain() ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ์˜ ์Šคํƒ ์ƒํƒœ 

EBP์˜ ๊ฐ’์„ ์Šคํƒ์— ์ง‘์–ด๋„ฃ๋Š” ๊ณผ์ •์€ EBP๊ฐ€  ์ด์ „์— ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๊ฐ’์„ ์Šคํƒ์— ๋ฐฑ์—…ํ•ด๋‘๊ธฐ ์œ„ํ•จ์ด๋‹ค.

 

 

(2) main() ํ•จ์ˆ˜ ์Šคํƒ ํ”„๋ ˆ์ž„ ์ƒ์„ฑ

EBP์—  ESP์˜ ๊ฐ’์„ ์˜ฎ๊ฒจ์คŒ์œผ๋กœ์จ ์„œ๋กœ ๊ฐ™์€ ๊ฐ’(012FFBB8)์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. 12FFBB8์˜ ์ฃผ์†Œ์—๋Š” 12FFC00์ด๋ผ๋Š” ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. 12FFC00์€ main() ํ•จ์ˆ˜์˜ ์‹œ์ž‘ ๋•Œ EBP๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ์ดˆ๊ธฐ ๊ฐ’์ด๋‹ค.

 

main() ํ•จ์ˆ˜๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ EBP ๊ฐ’์€ ๊ณ ์ •๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์Šคํƒ์— ์ €์žฅ๋œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜์™€ ์ง€์—ญ ๋ณ€์ˆ˜๋“ค์€ EBP๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๊ฒŒ ๋œ๋‹ค.

 

โžก๏ธ 2F10A0๊ณผ 2F10A1 ์ฃผ์†Œ์˜ ๋‘ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด main() ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์Šคํƒ ํ”„๋ ˆ์ž„์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค.

 

 

 

 

(3) ์ง€์—ญ ๋ณ€์ˆ˜ ์„ค์ •

โฌ‡๏ธํ•ด๋‹น C ์ฝ”๋“œ

int a = 5, b = 1;

์œ„์˜ C ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด intํ˜• ๋ณ€์ˆ˜ 2๊ฐœ๋ฅผ ์„ ์–ธํ•ด ์ฃผ์—ˆ๋‹ค.

์ด ๋‘ ๋ณ€์ˆ˜๋ฅผ ์Šคํƒ์— ์ €์žฅํ•˜๋ ค๋ฉด ๊ณต๊ฐ„์„ ๋งˆ๋ จํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, int๋Š” 4๋ฐ”์ดํŠธ๋‹ˆ ์ด 8๋ฐ”์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์ด ๊ณผ์ •์„ ESP์— 8์„ ๋นผ์คŒ์œผ๋กœ์จ ํ•„์š”ํ•œ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ด ์ฃผ์—ˆ๋‹ค.

 

 

์ด์ œ ๋งŒ๋“ค์–ด๋‘” ๊ณต๊ฐ„์— ๊ฐ๊ฐ 5์™€ 1์„ ๋„ฃ์–ด์ค„ ์ฐจ๋ก€์ด๋‹ค.

[EBP-8]์˜ ์ฃผ์†Œ์— 5๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ , [EBP-4]์˜ ์ฃผ์†Œ์— 1์„ ๋„ฃ์–ด์ค€๋‹ค.

๋”ฐ๋ผ์„œ [EBP-8]์€ ๋ณ€์ˆ˜ a์ด๊ณ , [EBP-4]๋Š” ๋ณ€์ˆ˜ b์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

โฌ‡๏ธ์ง€๊ธˆ๊นŒ์ง€ ์‹คํ–‰ํ•œ ํ›„์˜ ์Šคํƒ ์ƒํƒœ

5์™€ 1์ด ๋“ค์–ด ์žˆ๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

(4) sub() ํ•จ์ˆ˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ž…๋ ฅ & sub() ํ•จ์ˆ˜ ํ˜ธ์ถœ

โฌ‡๏ธํ•ด๋‹น C ์ฝ”๋“œ

printf("%d\n", sub(a, b));

 

EAX์—๋Š” [EBP-4] ์ฆ‰, 1์„ ์˜ฎ๊ฒจ์ฃผ๊ณ  ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค.

ECX์—๋Š” [EBP-8] ์ฆ‰, 5๋ฅผ ์˜ฎ๊ฒจ์ฃผ๊ณ  ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค.

์ด๋Š” ๋ณ€์ˆ˜ a, b๋ฅผ ์Šคํƒ์— ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค.

์ฃผ๋ชฉํ•  ๋‚ด์šฉ์€ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ C ์–ธ์–ด์˜ ์ž…๋ ฅ ์ˆœ ์„œ์™ธ๋Š” ๋ฐ˜๋Œ€๋กœ ์Šคํƒ์— ์ €์žฅ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ "ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์—ญ์ˆœ ์ €์žฅ"์ด๋ผ๊ณ  ํ•œ๋‹ค

 

โฌ‡๏ธ์ง€๊ธˆ๊นŒ์ง€ ์‹คํ–‰ํ•œ ํ›„์˜ ์Šคํƒ ์ƒํƒœ

 

 

๊ทธ๋‹ค์Œ sub ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

 

 

 

 

(5) sub() ํ•จ์ˆ˜ ์‹œ์ž‘ & ์Šคํƒ ํ”„๋ ˆ์ž„ ์ƒ์„ฑ

โฌ‡๏ธํ•ด๋‹น C ์ฝ”๋“œ

int sub(int a, int b) {

 

main() ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ sub() ํ•จ์ˆ˜๋„ ์ž์‹ ๋งŒ์˜ ์Šคํƒ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•œ๋‹ค.

์Šคํƒ ํ”„๋ ˆ์ž„์˜ ์ƒ์„ฑ ๊ณผ์ •์€ main() ํ•จ์ˆ˜์™€ ๊ฐ™๋‹ค.

 

 

โฌ‡๏ธ์ง€๊ธˆ๊นŒ์ง€ ์‹คํ–‰ํ•œ ํ›„์˜ ์Šคํƒ ์ƒํƒœ

 

main() ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ๋˜๋˜ EBP ๊ฐ’(12FFBB8)์„ ์Šคํƒ์— ๋ฐฑ์—…ํ•œ ํ›„ EBP๋Š” 12FFBA0๋กœ ์ƒˆ๋กญ๊ฒŒ ์„ธํŒ…๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

(6) sub() ํ•จ์ˆ˜์˜ ์ง€์—ญ ๋ณ€์ˆ˜ ์„ค์ •

โฌ‡๏ธํ•ด๋‹น C ์ฝ”๋“œ

	int a = 5, b = 1;

 

sub() ํ•จ์ˆ˜์˜ ์ง€์—ญ ๋ณ€์ˆ˜ x, y์— ๊ฐ๊ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ a, b๋ฅผ ๋Œ€์ž…์„ ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

์ด ์—ญ์‹œ intํ˜• ๋ณ€์ˆ˜ x์™€ y์— 8๋ฐ”์ดํŠธ์˜ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ด์ค€๋‹ค.

 

 

sub() ํ•จ์ˆ˜์—์„œ ์Šคํƒ ํ”„๋ ˆ์ž„์ด ์ƒ์„ฑ๋˜๋ฉด์„œ EBP์˜ ๊ฐ’์ด ๋ณ€ํ–ˆ๋‹ค.

๋”ฐ๋ผ์„œ [EBP+8], [EBP+C]๊ฐ€ ๊ฐ๊ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ a, b๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. (C๋Š” 16์ง„์ˆ˜)

[EBP-8], [EBP-4]๋Š” ๊ฐ๊ฐ sub() ํ•จ์ˆ˜์˜ ์ง€์—ญ ๋ณ€์ˆ˜ y, x๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

 

โฌ‡๏ธ์ง€๊ธˆ๊นŒ์ง€ ์‹คํ–‰ํ•œ ํ›„์˜ ์Šคํƒ ์ƒํƒœ

 

 

 

 

 

(7) sub() ์—ฐ์‚ฐ

	return (x - y);

์œ„์˜ ์ฝ”๋“œ์˜ ์—ฐ์‚ฐ ๋ถ€๋ถ„์ด๋‹ค.

EAX์— [EBP-4] ์ฆ‰, x๋ฅผ ์˜ฎ๊ฒจ์ค€๋‹ค.

๊ทธ๋‹ค์Œ, 5์˜ ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” EAX์— y์˜ ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” [EBP-8]๋ฅผ ๋นผ์ค€๋‹ค.

์ด ๊ณผ์ •์„ ์‰ฝ๊ฒŒ ์—ฐ์‚ฐ์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค๋ฉด

5 - 1

์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ EAX์˜ ๊ฐ’์ด 4๊ฐ€ ๋˜์—ˆ๋‹ค.

 

 

 

 

(8) sub() ํ•จ์ˆ˜ ์Šคํƒ ํ”„๋ ˆ์ž„ ํ•ด์ œ & ํ•จ์ˆ˜ ์ข…๋ฃŒ(๋ฆฌํ„ด)

	return (x - y);
}

์œ„์˜ ์ฝ”๋“œ์˜ ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

EBP ๊ฐ’์„ ESP์— ๋Œ€์ž…ํ•ด์ค€๋‹ค. ์ด๋Š” sub() ํ•จ์ˆ˜๊ฐ€ ์‹œ์ž‘๋  ๋•Œ์˜ ESP๊ฐ’์„ EBP์— ๋„ฃ์–ด ๋‘์—ˆ๋‹ค๊ฐ€ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ESP๋ฅผ ์›๋ž˜๋Œ€๋กœ ๋ณต์›์‹œํ‚ค๋Š” ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

sub() ํ•จ์ˆ˜๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด์„œ ์Šคํƒ์— ๋ฏธ๋ฆฌ ์ €์žฅํ•ด๋‘” EBP ๊ฐ’์„ ๋ณต์›ํ•ด์ค€๋‹ค.

์ด ๋ช…๋ น์–ด๋Š” ์•ž์˜ PUSH EBP ๋ช…๋ น์— ๋Œ€์‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

main() ํ•จ์ˆ˜์˜ EBP๊ฐ’์„ ๋ณต์›ํ•จ์œผ๋กœ์จ sub() ํ•จ์ˆ˜์˜ ์Šคํƒ ํ”„๋ ˆ์ž„์ด ํ•ด์ œ๋œ๋‹ค.

 

 

โฌ‡๏ธ์ง€๊ธˆ๊นŒ์ง€ ์‹คํ–‰ํ•œ ํ›„์˜ ์Šคํƒ ์ƒํƒœ

ESP๊ฐ€ 12 FFBA4์ด๊ณ , ์ด ์ฃผ์†Œ์˜ ๊ฐ’์€ F110C1์ด๋‹ค. 

์ด ๊ฐ’์€ CPU๊ฐ€ ์Šคํƒ์— ์ž…๋ ฅํ•œ ๋ณต๊ท€ ์ฃผ์†Œ์ด๋‹ค.

 

 

RETN  ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์Šคํƒ์— ์ €์žฅ๋œ ๋ณต๊ท€ ์ฃผ์†Œ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.

 

โฌ‡๏ธ์ง€๊ธˆ๊นŒ์ง€ ์‹คํ–‰ํ•œ ํ›„์˜ ์Šคํƒ ์ƒํƒœ

์Šคํƒ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, sub() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์˜ ์ƒํƒœ๋กœ ๋˜๋Œ์•„์™”๋‹ค.

(4) sub() ํ•จ์ˆ˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ž…๋ ฅ & sub() ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ sub() ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „์˜ ์Šคํƒ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด

์™„๋ฒฝํžˆ ์ผ์น˜ํ•œ๋‹ค.

 

ํ”„๋กœ๊ทธ๋žจ์€ ์ด๋Ÿฐ ์‹์œผ๋กœ ์Šคํƒ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ์•„๋ฌด๋ฆฌ ๋งŽ๋”๋ผ๋„ ์Šคํƒ์ด ๊นจ์ง€์ง€ ์•Š๊ณ  ์ž˜ ์œ ์ง€๋˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜, ๋ณต๊ท€ ์ฃผ์†Œ๊ฐ’ ๋“ฑ์„ ํ•œ ๋ฒˆ์— ๋ณด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ(Stack Buffer Overflow)์— ์ทจ์•ฝํ•˜๋‹ค.

 

 

 

 

(9) sub() ํ•จ์ˆ˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ œ๊ฑฐ(์Šคํƒ ์ •๋ฆฌ)

sub() ํ•จ์ˆ˜์—์„œ ๋‹ค์‹œ main() ํ•จ์ˆ˜๋กœ ๋Œ์•„์™”๋‹ค.

'ADD' ๋ช…๋ น์œผ๋กœ ESP์— 8์„ ๋”ํ•˜๋Š” ์ด์œ ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” sub() ํ•จ์ˆ˜์—๊ฒŒ ๋„˜๊ฒจ์ค€ ๋งค๊ฐœ ๋ณ€์ˆ˜์ธ a, b๋ฅผ ์ •๋ฆฌํ•ด์ฃผ๊ธฐ ์œ„ํ•จ์ด๋‹ค. 

 

'ADD' ๋ช…๋ น ์‹คํ–‰ ์ „์— ๋‹ค์Œ ์•„๋ž˜์˜ ์Šคํƒ ์ƒํƒœ๋ฅผ ์ž˜ ๋ณด๋ฉด 12FFBA8๊ณผ 12FFBAC ์ฃผ์†Œ์— 5์™€ 1, ์ฆ‰ ๋งค๊ฐœ ๋ณ€์ˆ˜ a, b๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

โฌ‡๏ธ์‹คํ–‰ ํ›„ ์Šคํƒ ์ƒํƒœ

 

 

 

 

(10) printf() ํ•จ์ˆ˜ ํ˜ธ์ถœ

โฌ‡๏ธํ•ด๋‹น C ์ฝ”๋“œ

	printf("%d\n", sub(a, b));

PUSH EAX : EAX์—๋Š” sub() ํ•จ์ˆ˜์—์„œ ์ €์žฅ๋œ ๋ฆฌํ„ด ๊ฐ’์ธ 4๊ฐ€ ๋“ค์–ด์žˆ๋‹ค. 

PUSH OFFSET ... : "%d\n"

CALL stackstu.printf : printf() ํ•จ์ˆ˜ ํ˜ธ์ถœ

ADD ESP, 8 : ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ •๋ฆฌ

 

 

 

 

 

(11) ๋ฆฌํ„ด ๊ฐ’ ์„ค์ •

โฌ‡๏ธํ•ด๋‹น C ์ฝ”๋“œ

	return 0;

main() ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ๊ฐ’(0)์„ ์„ค์ •ํ•ด์ฃผ๋Š” ์ฝ”๋“œ์ด๋‹ค.

XOR์€ ๋ฐฐํƒ€์  ๋…ผ๋ฆฌํ•ฉ์œผ๋กœ, ๋น„๊ตํ•˜๋Š” ๊ฐ’๋“ค์ด ์„œ๋กœ ๊ฐ™์œผ๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

๊ฐ™์€ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋น„๊ตํ–ˆ์œผ๋ฏ€๋กœ 0์ด ๋œ๋‹ค.

XOR์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” 'MOV' ๋ช…๋ น์–ด๋ณด๋‹ค ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”์‹œํ‚ฌ ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

 

 

 

 

(12) ์Šคํƒ ํ”„๋ ˆ์ž„ ํ•ด์ œ & main() ํ•จ์ˆ˜ ์ข…๋ฃŒ

โฌ‡๏ธํ•ด๋‹น C ์ฝ”๋“œ

	return 0;
}

main() ํ•จ์ˆ˜์˜ ์Šคํƒ ํ”„๋ ˆ์ž„์„ ํ•ด์ œํ•œ๋‹ค.

main() ํ•จ์ˆ˜์˜ ์ง€์—ญ ๋ณ€์ˆ˜ ์—ญ์‹œ ์œ ํšจํ•˜์ง€ ์•Š๊ฒŒ ๋˜์—ˆ๋‹ค.

 

POP EBP๊นŒ์ง€ ์‹คํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด main() ํ•จ์ˆ˜๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ์˜ ์Šคํƒ ๋ชจ์Šต๊ณผ ํ˜„์žฌ์˜ ์Šคํƒ ํ”„๋ ˆ์ž„์ด ๋™์ผํ•ด์ง„๋‹ค.

 

 

์ด์ œ ๋ฉ”์ธ ํ•จ์ˆ˜๊ฐ€ 'RETN' ๋˜๋ฉด์„œ ๋ฆฌํ„ด ์ฃผ์†Œ๋กœ ์ ํ”„ํ•œ๋‹ค.

๊ทธ ์ดํ›„์—๋Š” ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ ์ตœ์ข…์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๊ฐ€ ๋œ๋‹ค.

 

 

 


 

์ฐธ๊ณ 

https://oopsys.tistory.com/165

 

[๋ฆฌ๋ฒ„์‹ฑ] ํ•จ์ˆ˜: ํ”„๋กค๋กœ๊ทธ&์—ํ•„๋กœ๊ทธ์™€ ํ˜ธ์ถœ ๊ทœ์•ฝ

ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ณผ์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. 1. ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉํ•  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ํ•จ์ˆ˜ ์‹œ์ž‘์ง€์ ์œผ๋กœ ์ ํ”„(ํ•จ์ˆ˜ ํ˜ธ์ถœ) ํ•œ๋‹ค. 2. ํ•จ์ˆ˜ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์Šคํƒํ”„๋ ˆ์ž„์„ ์„ค์ •ํ•œ๋‹ค. (ํ”„๋กค๋กœ๊ทธ) 3. ํ•จ์ˆ˜์˜ ๋‚ด์šฉ

oopsys.tistory.com

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Reverse Engineering' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Dreamhack | Reverse Engineering | Stage 2 | Background: Static Analysis vs. Dynamic Analysis  (0) 2022.07.09
Dreamhack | Reverse Engineering | Stage 2 | Binary  (0) 2022.07.08
'Reverse Engineering' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Dreamhack | Reverse Engineering | Stage 2 | Background: Static Analysis vs. Dynamic Analysis
  • Dreamhack | Reverse Engineering | Stage 2 | Binary
602zzang
602zzang
  • 602zzang
    yks_STUDY
    602zzang
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (77)
      • Programming Language (36)
        • C (15)
        • PYTHON (9)
        • RUST (12)
      • Reverse Engineering (3)
      • OS (17)
        • LINUX (17)
      • ๋ณด์•ˆ ์ด์Šˆ (6)
      • Digital Forensics (1)
      • CTF (8)
      • ๊ธฐํƒ€ (6)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    picoCTF
    ๋ฐฑ์ค€
    rustling
    umassctf2025
    bandit
    ๊ณต๊ธ‰๋ง
    ๋ณด์•ˆ๋™ํ–ฅ
    TeamH4C
    cyberdefenders
    ๋นก๊ณตํŒŸ
    ์†Œ์ผ“ ํ†ต์‹ 
    Rocky Linux
    P4C
    ๋ณด์•ˆ์ด์Šˆ
    c
    rust
    ํŒŒ์ด์ฌ
    ์ฝ”๋“œ์—…
    ๋“œ๋ฆผํ•ต
    python
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
602zzang
์Šคํƒ ํ”„๋ ˆ์ž„(Stack Frame)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”