๐ ๋ถ์ ์ค์ต ๋ณด๊ณ ์ ์์ฑ
- ๋ฉ์ธํจ์ ์ฐพ๊ธฐ
- ์๋ธํจ์ ์ฐพ๊ธฐ
- ๋ ์ง์คํฐ(EAX, EIP) ๋ณ๊ฒฝ ํ์ธ
- ์คํ(RETURN์ฃผ์ ๋ฑ) ๋ณ๊ฒฝ ํ์ธ
๐ ์์ค ์ฝ๋ ๋ฐ ๋ถ์ ๋ฐฉ๋ฒ ์ค๋ช
์์ค ์ฝ๋: sum.c
#include <stdio.h>
int sum(int a, int b) {
return a + b;
}
int minus(int a, int b) {
return a - b;
}
int main() {
int x = 9;
int y = 7;
printf("sum: %d \n", sum(x, y));
printf("minus: %d \n", minus(x, y));
}
sum.c๋ฅผ ์ปดํ์ผํ์ฌ ์คํ ํ์ผ๋ก ๋ง๋ญ๋๋ค.
๊ทธ ์ดํ sum.exe๋ฅผ Immunity Debugger์์ ์คํ ์ํต๋๋ค.
1๏ธโฃ ๋ฉ์ธํจ์ ์ฐพ๊ธฐ
์ฒ์ sum.exe ํ์ผ์ ์คํ์ํค๋ฉด ์ด๋ฐ ํ๋ฉด์ด ๋ฌ๋ค.
step over(F8)๋ก ๋์ด๊ฐ๋ค ๋ณด๋ฉด 4๋ฒ์งธ ์ค์ CALL sum.00401000์ ๋ง๋ ํ
ํฐ๋ฏธ๋์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ณ ํจ์๊ฐ ์ข ๋ฃ๋๋ค.
๊ทธ๋ผ CALL sum.00401000์ break point๋ฅผ ๊ฑธ๊ณ ์ฌ์์(ctrl+F2) ํ
ํด๋น ๋ช ๋ น์ด์์ step into(F7)์ ํด์ ํด๋น ํจ์ ์์ผ๋ก ๋ค์ด๊ฐ๋ค.
๊ทธ๋ฌ๋ฉด ํด๋น ํ๋ฉด์ด ๋์จ๋ค. ์ฌ๊ธฐ์ main ํจ์๋ก ์ถ์ ๋๋ ๋ช ๋ น์์ step over๋ฅผ ํ๋ฉด์ ํฐ๋ฏธ๋์ ๊ฐ์ด ๋์ค๋์ง ํ์ธํ๋ค.
์ด ๋ ํจ์๋ฅผ ์คํํด๋ ํฐ๋ฏธ๋์ ๊ฒฐ๊ณผ๊ฐ์ด ๋์ค์ง ์์ผ๋ main ํจ์๊ฐ ์๋ ๊ฑธ ์ ์ ์๋ค.
Step over๋ก ๋์ด๊ฐ๋ค๊ฐ CALL sum.00401368์ ๋ง๋ ์คํํ๋ฉด
ํฐ๋ฏธ๋์ ๊ฒฐ๊ณผ๊ฐ์ด ์ถ๋ ฅ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก sum.00401368์ด main ํจ์์ด๋ค.
ํด๋น ๋ช
๋ น์ด์ break point๋ฅผ ๊ฑธ๊ณ ์ฌ์์ ํ step into(F7)์ ํด์ main ํจ์๋ก ๋ค์ด๊ฐ๋ค.
2๏ธโฃ ๋ฉ์ธ ํจ์ ์คํ ํ ์คํ, ๋ ์ง์คํฐ ๊ฐ ํ์ธ
Main ํจ์๋ก ๋ค์ด๊ฐ๋ฉด ๋จผ์ returnํด์ผํ๋ ์ฃผ์๋ฅผ ์คํ์ ์๊ณ ์ฒ์์ ์๋์ EBP๊ฐ์ ์คํ์ pushํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ ESP๊ฐ์ ์๋กญ๊ฒ EBP๊ฐ์ผ๋ก ์ง์ ํด์ค๋ค.
์ด EBP๊ฐ์ ํด๋น ํจ์๋ง์ EBP๊ฐ์ด๋ค. ์ดํ EBP๊ฐ์ 16์ง์ 20๋งํผ ๋๋ ค ๋๋๋ค.
์ด๋ ๋ณ์๋ฅผ ์ ์ฅํด ๋๋ ๊ณณ์ ํ๋ณดํ๋ ๊ฒ์ด๋ค.
์ค์ ๋ก immunity debugger์์ ๋ณด์๋ฉด
์๊น mainํจ์ ๋ค์ ๋ช ๋ น์ด ์ฃผ์์ธ 004010FD๊ฐ main ํจ์๊ฐ ์คํ๋์ ๋ง์ ์คํ์ ์์ด๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ํ 6, 7๋ฒ์งธ ์ค์ ์คํ์ํค๋ฉด int x = 9, int y = 7์ธ ์ฝ๋๊ฐ ์คํ๋๋ฉฐ ์คํ์ ์์ด๊ฒ ๋๋ค.
๋ ์ง์คํฐ ๊ฐ์ ๋ช ๋ น์ด์ ๋ฐ๋ผ ๋ฐ๋๊ฒ ๋๋ค.
์ฌ๊ธฐ์ ์ค์ํ ์ ์ ์คํ์ 9, 7 ์์ผ๋ก ์์๋๋ฐ ์คํ์ LIFO ๊ตฌ์กฐ์ด๋ฏ๋ก 7์ด ๋จผ์ EAX์ ๋ค์ด๊ฐ๋ค๋ ๊ฒ์ด๋ค.
EIP๊ฐ์ ๋ ๋ฐ๋ก ์ดํ์ ์คํํ ๋ช ๋ น์ด ์ฃผ์๋ฅผ ๋ด๊ณ ์๋ค.
3๏ธโฃ ์๋ธ ํจ์ ์ฐพ๊ธฐ (sum, minus)
์๋ธ ํจ์๋ ๋ฉ์ธ ํจ์ ์ฐพ๋ ๊ฒ๊ณผ ๊ฐ์ด ํฐ๋ฏธ๋์ ํ์ธํ๋ฉฐ ์งํํ๋ค.
์๋ธ ํจ์(sum, minus) ์ฐพ๋ ๊ฒ์ ๋น๊ต์ ์ฌ์ ๋๋ฐ, ์ค๋ฅธ์ชฝ์ ๋ณด๋ฉด ํ๋ฆฐํธ๋ฌธ์ด ๋์์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ญ์๋ ํด๋น ์ฝ๋๊น์ง ์คํํด๋ณด๋ ํฐ๋ฏธ๋์ sum()๊ณผ minus() ๊ฒฐ๊ณผ๊ฐ์ด ๋์๋ค.
์๋ธ ํจ์์ธ sum(), minus()์๋ breakpoint๋ฅผ ๊ฑธ๊ณ step into(F7)๋ก ๋ ์ง์คํฐ์ ์คํ์ ๋ณ๊ฒฝ์ ํ์ธํด๋ณด๋๋ก ํ๋ค.
4๏ธโฃ ์๋ธ ํจ์์ ๋ ์ง์คํฐ ์คํ ๊ฐ ํ์ธ
๋จผ์ sum() ํจ์์์ step into(F7)๋ก ๋ค์ด๊ฐ๋ค. ์ผ๋จ ๋์ ๊ฐ์ผ ํ ๋ฆฌํด ์ฃผ์ ๊ฐ์ ์คํ์ ๋ฃ๋๋ค.
์ดํ mainํจ์ ์คํํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์๋์ EBP๊ฐ์ ์คํ์ผ๋ก, ์๋์ ESP๊ฐ์ ์๋ก์ด EBP๊ฐ์ผ๋ก ๋ฃ์ด์ฃผ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
sumํจ์๋ฅผ ์ค์ ๋ก ๊ณ์ฐํ๋ ๋ถ๋ถ์ 5๋ฒ์งธ ์ค์ด๋ค. ๊ทธ ์ ์ EDX์ 9๋ฅผ, EAX์ 7์ ๋ฃ๋ ์์ ์ ํ๋ค.
์ด๊ฒ์ 4๋ฒ์งธ ์ค๊น์ง ์คํ์ํจ ํ์ ๋ ์ง์คํฐ ๊ฐ์ด๋ค.
5๋ฒ์งธ ์ค์ ์คํํ๋ฉด EAX, EDX๋ฅผ ๋ํด ๋ค์ EAX์ ์ ์ฅํ๋ค.
EIP๊ฐ์ ์ฌ์ ํ ๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
ํท๊ฐ๋ฆฌ์ง ๋ง์์ผํ ์ ์ ํ์ฌ ์คํ๋๊ณ ์๋ ๋ช ๋ น์ด๊ฐ ์๋๋ผ ๋ค์์ ์คํํ ๋ช ๋ น์ด๋ผ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด,
์ด๋ ๊ฒ 0030125B POP EBP๋ฅผ ์ํํ๋ฉด ๋ฐ์ ์ค์ ํ๋ ์ค์ด ์๊ธฐ๊ณ
๋ ์ง์คํฐ์๋ ์ด๋ ๊ฒ ๋์จ๋ค.
EIP๊ฐ์ด ํ๋ ์ค ์ฃผ์์ ๊ฐ์ผ๋ฏ๋ก ํผ๋์ด ์ฌ ์ ์๋ ์ ์ ์ ์ํ๋ค.
sum()์์ RETN์ ๋ง๋์ ๋์จ ํ print๋ฌธ์ ๋ง๋๋ฉด ํฐ๋ฏธ๋์ ์ถ๋ ฅ๋๋ค.
minusํจ์๋ sumํจ์์ ๋น์ทํ๊ฒ ์์ฉํ๋ค.
์ฌ๊ธฐ์ minus()ํจ์์ธ CALL sum.0040135D์์ step into(F7)์ ํ๋ค.
sum()๊ณผ์ ์ฐจ์ด์ ์ EDX๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ์์๋๋ก ๋ ์ง์คํฐ ๊ฐ์ ๋ณด๋ฉด
์ด๋ฐ ์์ผ๋ก ํด๋น ๋ช ๋ น์ด์ ๋ฐ๋ผ ESP, EBP, EAX๊ฐ ๋ณํํ๊ณ EIP๋ ๋ค์ ์คํํ ๋ช ๋ น์ด๋ก ๊ณ์ ๋ฐ๋๋ค.
์คํ ๊ฐ์ sum๊ณผ ๋๊ฐ์ด ์์ฉํ๋ค. ํ๋๋ง ๋ณด์๋ฉด
์ฒ์ minus ์คํํ๋ฉด ๋ฆฌํด ๊ฐ์ด ์คํ์ ์์ด๊ฒ ๋๋ค.
๋ฆฌํด ํ print๋ฌธ์ ๋ง๋๋ฉด ํฐ๋ฏธ๋์ ์ถ๋ ฅ๋๋ค.
์ดํ step over(F8)๋ก ์คํํ๋ค๊ฐ ExitProcess๋ฅผ ๋ง๋๋ฉด ์ข ๋ฃ๋๋ค.
๐ ๋๋ ์
์๋ฃ๊ตฌ์กฐ ๋ ๋ฐฐ์ ๋ ์คํ์ ํน์ง์ ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ํตํด ์ค์ตํ ์ ์์๋ค.
์คํ ํ์ผ์ด๋ค ๋ณด๋ ์ด๋ฏธ ์คํํ ์ฝ๋ ํ ์ค์ ๋ค์ ๋๋๋ฆด ์๊ฐ ์์ด์ ๋ค์ ์ฌ์์ ํ ์ฒ์๋ถํฐ ๋ด์ผํด์ ๊ท์ฐฎ์๋ค ,,
Immunity Debugger๋ ์ฒ์ ์ฌ์ฉํด๋ดค๋๋ฐ, ํ๋ ์ค๋ก ๋จ๋ ๊ฒ์ด ํ์ฌ ์คํํ ์ฝ๋๊ฐ ์๋ ๋ค์ ์คํํ ์ฝ๋์ธ ๊ฒ ์๋นํ ํท๊ฐ๋ ธ๋ค. ์ด๋ด ๋ EIP๋ฅผ ๊ผญ ์ฐธ๊ณ ํ๋ ๊ฑธ๋ก !
'Security > Windows' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Immunity Debugger] 1๋ถํฐ 100๊น์ง์ ํฉ ์ด์ ๋ธ๋ฆฌ์ด ์ฝ๋ ์์ฑ (0) | 2022.03.11 |
---|