๐ API Hooking์ด๋?
Win32 API๋ฅผ ํํนํ๋ ๊ธฐ์ ์ API ํํน์ด๋ผ๊ณ ํ๋ค.
= Win32 API ํธ์ถ์ ์ค๊ฐ์์ ๊ฐ๋ก์ฑ์ ์ ์ด๊ถ์ ํ๋ํ๋ ๊ฒ
๐ข API์ด๋?
์ฌ์ฉ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์คํ
์ปค๋์ ์ ๊ทผ์ ์์ฒญํ๊ธฐ ์ํ ๋ฐฉ๋ฒ, Windows์์๋ Win32 API๋ฅผ ์ ๊ณตํ๋ค.
๐ข ์ ์ API ํธ์ถ vs Hooking API ํธ์ถ

์ ์์ ์ธ ํธ์ถ์ API๋ฅผ ํธ์ถํ๋ฉด ๊ทธ API๊ฐ ๋ด๊ฒจ ์๋ DLL์์ API๊ฐ ํธ์ถ๋๋ค.

Hooking API ํธ์ถ์ DLL Injection ๊ธฐ์ ๋ก hook.dll์ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฝ์
ํ๋ค. ๊ทธ๋ฆฌ๊ณ kernel32!CreateFile()๋ฅผ hook!MyCreateFile()๋ก ํํนํ์๋ค. ์ด๋ ๊ฒ ๋๋ฉด CreateFile API๋ฅผ ์คํํ ๋๋ง๋ค MyCreateFile์ด ์คํ๋๋ค.
๐ API Hooking Tech Map

๐ข Static vs Dynamic
| Static | Dynamic |
|---|
| ํ์ผ | ๋ฉ๋ชจ๋ฆฌ |
| ํ๋ก๊ทธ๋จ ์คํ ์ | ํ๋ก๊ทธ๋จ ์คํ ํ |
| ์ต์ด ํ ๋ฒ | ์คํ๋ ๋๋ง๋ค |
| ํน์ํ ์ํฉ | ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ |
| Unhook ๋ถ๊ฐ๋ฅ | ํ๋ก๊ทธ๋จ ์คํ ์ค์ Unhook ๊ฐ๋ฅ |
Hooking ๋ฐฉ์์ ๋ฐ๋ฅธ ๋ถ๋ฅ๋ก ์์
๋์์ ๋ฐ๋ผ Static ๋ฐฉ์๊ณผ Dynamic ๋ฐฉ์์ผ๋ก ๋๋ ์ ์๋ค. ์ฐธ๊ณ ๋ก Static ๋ฐฉ์์ API Hooking ๋ฐฉ์์์ ์ ์ฐ์ด์ง ์๋๋ค๊ณ ํ๋ค.
๐ข Location
๊ณต๋ต ์์น๋ฅผ ์๋ฏธํ๋ค.
1. IAT
- IAT์ ์๋ API ์ฃผ์๋ฅผ ํํน ํจ์ ์ฃผ์๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ
- ์ฅ์ : ๋จ์ํ๋ฉฐ ์ฝ๊ฒ ๊ตฌํ ํ ์ ์๋ค.
- ๋จ์ : IAT์ ์๋ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋๋ API๋ค์ ๋ํด์๋ ํํน ํ ์ ์๋ค. (= DLL์ ๋์ ์ผ๋ก ๋ก๋ฉํ๋ ๊ฒฝ์ฐ)
- Code
- API์ ์ค์ ์ฃผ์๋ฅผ ์ฐพ์ ์ฝ๋๋ฅผ ์ง์ ์์ ํ๋ ๋ฐฉ๋ฒ
- EAT
- EAT์ ๊ธฐ๋ก๋ API ์์ ์ฃผ์๋ฅผ ํํน ํจ์ ์ฃผ์๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ
๐ข Technique
๊ตฌ์ฒด์ ์ธ ๊ธฐ๋ฒ์ ์๋ฏธํ๋ค.
1. Debug
- ๋๋ฒ๊ฑฐ๋ ๋๋ฒ๊ธฐ์ ๋ชจ๋ ๊ถํ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ๋๋ฒ๊ธฐ์ ๋ชจ๋ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ์ ํํน ํจ์๋ฅผ ์์ ๋กญ๊ฒ ์ค์นํ ์ ์๋ค.
- ์๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ API Hooking์ ์๋ํํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง, ๋๋ฒ๊ฑฐ์ ๋ํ ์ง์๊ณผ ์์ ์ ์ธ ๋์์ ์ํ ๋ง์ ํ
์คํธ๊ฐ ์๊ตฌ๋๋ค.
- Injection
- DLL Injection
- ์ธ์ ์
ํ DLL์ ๋ฏธ๋ฆฌ ํํน ์ฝ๋์ ์ค์น ์ฝ๋๋ฅผ ๋ง๋ค๊ณ DllMain ํจ์์์ ์ค์น ์ฝ๋๋ฅผ ํธ์ถํ๋ฉด, ์ธ์ ์
๋๋ ์๊ฐ Hooking ์๋ฃ
- Code Injection
- ์คํ ์ฝ๋์ ๋ฐ์ดํฐ๋ง ์ธ์ ์
๋ ์ํ์์ ์์ ์ด ํ์ํ API ์ฃผ์๋ฅผ ์ง์ ๊ตฌํด์ ์ฌ์ฉํด์ผ ํ๋ค.