๐Ÿ“Œ 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

StaticDynamic
ํŒŒ์ผ๋ฉ”๋ชจ๋ฆฌ
ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ „ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ›„
์ตœ์ดˆ ํ•œ ๋ฒˆ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค
ํŠน์ˆ˜ํ•œ ์ƒํ™ฉ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ
Unhook ๋ถˆ๊ฐ€๋Šฅํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— Unhook ๊ฐ€๋Šฅ

Hooking ๋ฐฉ์‹์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜๋กœ ์ž‘์—… ๋Œ€์ƒ์— ๋”ฐ๋ผ Static ๋ฐฉ์‹๊ณผ Dynamic ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ Static ๋ฐฉ์‹์€ API Hooking ๋ฐฉ์‹์—์„œ ์ž˜ ์“ฐ์ด์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

๐Ÿ“ข Location

๊ณต๋žต ์œ„์น˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
1. IAT

  • IAT์— ์žˆ๋Š” API ์ฃผ์†Œ๋ฅผ ํ›„ํ‚น ํ•จ์ˆ˜ ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์žฅ์  : ๋‹จ์ˆœํ•˜๋ฉฐ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์  : IAT์— ์—†๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” API๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ํ›„ํ‚น ํ•  ์ˆ˜ ์—†๋‹ค. (= DLL์„ ๋™์ ์œผ๋กœ ๋กœ๋”ฉํ•˜๋Š” ๊ฒฝ์šฐ)
  1. Code
    • API์˜ ์‹ค์ œ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. EAT
    • EAT์— ๊ธฐ๋ก๋œ API ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ํ›„ํ‚น ํ•จ์ˆ˜ ์ฃผ์†Œ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•

๐Ÿ“ข Technique

๊ตฌ์ฒด์ ์ธ ๊ธฐ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค.
1. Debug

  • ๋””๋ฒ„๊ฑฐ๋Š” ๋””๋ฒ„๊ธฐ์— ๋ชจ๋“  ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋””๋ฒ„๊ธฐ์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ์— ํ›„ํ‚น ํ•จ์ˆ˜๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API Hooking์„ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ, ๋””๋ฒ„๊ฑฐ์— ๋Œ€ํ•œ ์ง€์‹๊ณผ ์•ˆ์ •์ ์ธ ๋™์ž‘์„ ์œ„ํ•œ ๋งŽ์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์š”๊ตฌ๋œ๋‹ค.
  1. Injection
    1. DLL Injection
      • ์ธ์ ์…˜ ํ•  DLL์— ๋ฏธ๋ฆฌ ํ›„ํ‚น ์ฝ”๋“œ์™€ ์„ค์น˜ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  DllMain ํ•จ์ˆ˜์—์„œ ์„ค์น˜ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ์ธ์ ์…˜๋˜๋Š” ์ˆœ๊ฐ„ Hooking ์™„๋ฃŒ
    2. Code Injection
      • ์‹คํ–‰ ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋งŒ ์ธ์ ์…˜๋œ ์ƒํƒœ์—์„œ ์ž์‹ ์ด ํ•„์š”ํ•œ API ์ฃผ์†Œ๋ฅผ ์ง์ ‘ ๊ตฌํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€