Upload
others
View
28
Download
0
Embed Size (px)
Citation preview
Windows API
Hooking Reversing ์๋์ฐ ์ด์์ฒด์ ์์ ์ฌ์ฉํ ์ ์๋ API ํํน์ ๋ํด ์์๋ณด์
4/13/2016
By Kali KM
ํ์ด์ง 2 / 27
2 Windows API Hooking
๋ชฉ์ฐจ
1 Intro .............................................................................................................................................................. 4
2 Prior Knowledge...................................................................................................................................... 5
2.1 What is an API? .......................................................................................................................... 5
2.2 What is an API Hooking? ....................................................................................................... 6
3 User Mode Hooking.............................................................................................................................. 7
3.1 IAT Hooking ................................................................................................................................. 7
3.2 Message Hooking ................................................................................................................... 13
4 Kernel Mode Hooking ....................................................................................................................... 15
4.1 System Call ................................................................................................................................ 15
4.2 INT 0x2E Hooking ................................................................................................................... 16
4.3 SYSENTER Hooking ................................................................................................................ 19
4.4 SSDT Hooking .......................................................................................................................... 22
5 Conclusion .............................................................................................................................................. 26
6 Reference ................................................................................................................................................ 27
๊ทธ๋ฆผ
๊ทธ๋ฆผ 1. User Mode & Kernel Mode ............................................................................................. 5
๊ทธ๋ฆผ 2. ์ ์ํธ์ถ๊ณผ ํํน๋ ํธ์ถ .................................................................................................. 6
๊ทธ๋ฆผ 3. PE View๋ก ๋ณธ IAT................................................................................................................ 7
๊ทธ๋ฆผ 4. Sleep API .................................................................................................................................. 7
๊ทธ๋ฆผ 5. ๋ฉ๋ชจ๋ฆฌ์์ Sleep API ........................................................................................................ 8
๊ทธ๋ฆผ 6. Sleep API in IAT .................................................................................................................... 8
๊ทธ๋ฆผ 7. ์ฝ๋ ํจ์น ................................................................................................................................ 9
๊ทธ๋ฆผ 8. ํธ์ถํ ํจ์ ์ฃผ์ ๋ณ๊ฒฝ ..................................................................................................... 9
๊ทธ๋ฆผ 9. ํจ์ ํธ์ถ - Debugger ................................................................................................... 10
ํ์ด์ง 3 / 27
3 Windows API Hooking
๊ทธ๋ฆผ 10. Sleep์ด ํธ์ถํ๋ ์ฃผ์ ๋ณ๊ฒฝ ................................................................................... 10
๊ทธ๋ฆผ 11. Code Cave๋ฅผ ์ฌ์ฉํ ํํน ........................................................................................ 11
๊ทธ๋ฆผ 12. (C) ๋จ๊ณ ์๋ ๋ช ๋ น์ด์ ์กฐ์๋ ๋ช ๋ น์ด ............................................................... 11
๊ทธ๋ฆผ 13. ์กฐ์ ์ฝ๋ ........................................................................................................................... 12
๊ทธ๋ฆผ 14. Ntdll.dll์ API ................................................................................................................. 12
๊ทธ๋ฆผ 15. ๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์ ........................................................................................................... 13
๊ทธ๋ฆผ 16. SetWindowsHookEx API .............................................................................................. 14
๊ทธ๋ฆผ 17. DLL Injection ..................................................................................................................... 14
๊ทธ๋ฆผ 18. System Call ๊ณผ์ ............................................................................................................. 15
๊ทธ๋ฆผ 19. INT 0x2E์ SYSENTER ................................................................................................. 16
๊ทธ๋ฆผ 20. IDT ๊ตฌ์กฐ .............................................................................................................................. 17
๊ทธ๋ฆผ 21. INT 0x2E์ ISR(KiSystemService) ........................................................................... 17
๊ทธ๋ฆผ 22. IDT ์ฃผ์์ ๊ฐ ์ํธ๋ฆฌ ๊ตฌ์กฐ ....................................................................................... 18
๊ทธ๋ฆผ 23. IDT 0x2E ๋ฒ์งธ Entry ...................................................................................................... 18
๊ทธ๋ฆผ 24. IDT Entry 0x2E ํํน ...................................................................................................... 19
๊ทธ๋ฆผ 25. Read MSR 0x176 ............................................................................................................. 20
๊ทธ๋ฆผ 26. Write MSR 0x176 ............................................................................................................ 20
๊ทธ๋ฆผ 27. ์ ์์ ์ธ SYSENTER ์ง์ .......................................................................................... 21
๊ทธ๋ฆผ 28. ํํน ๋ SYSENTER ์ง์ ............................................................................................. 21
๊ทธ๋ฆผ 29. ์ ์ฒด์ ์ธ ์์คํ ํธ์ถ ๊ณผ์ ...................................................................................... 22
๊ทธ๋ฆผ 30. SSDT Hooking ๊ณผ์ ....................................................................................................... 23
๊ทธ๋ฆผ 31. KeServiceDescriptorTable ๊ตฌ์กฐ ................................................................................ 24
๊ทธ๋ฆผ 32. SSDT๋ฅผ ํตํ Native API ์ ๊ทผ ................................................................................. 24
๊ทธ๋ฆผ 33. SSDT Hooking .................................................................................................................. 25
ํ์ด์ง 4 / 27
4 Windows API Hooking
1 Intro
๋ฆฌ๋ฒ์ฑ์ ํ๋ ๋ฐ ์์ด ํํ โArt of Reversing is an API Hookingโ์ด๋ผ๋ ๋ง๊ณผ ๊ฐ์ด
API ํํน์ ๋ฆฌ๋ฒ์ฑ์ ๊ฝ์ด๋ผ ์ผ์ปฌ์ด์ง๋ค. ์ด๋ค ์๋์ฐ ์์ฉํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๊ธฐ ์ํด์
์ฐ๋ฆฌ๋ ๋ค์ํ ์ข ๋ฅ์ ์ธ์ด1๋ ๋๊ตฌ2๋ฅผ ์ฌ์ฉํ ์๊ฐ ์๋ค. ์ด๋ฐ ์ธ์ด๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ
๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฅด๋๋ผ๋ ๊ฒฐ๊ตญ, ๊ฐ๋ฐ๋ ํ๋ก๊ทธ๋จ์ ๋ด๋ถ๋ก ๋ค์ด๊ฐ๋ฉด ์๋์ฐ
์ด์์ฒด์ ๊ฐ ์ ๊ณตํ๋ API๋ฅผ ํธ์ถํ๋ค.
์ด๋ฌํ API ๋ ์ฌ์ฉ์ ์์ญ๋ฟ๋ง ์๋๋ผ ์ปค๋ ์์ญ์์๋ Native API ์ ํํ๋ก
์กด์ฌํ๊ธฐ ๋๋ฌธ์ API ํํน์ ์ดํดํ๋ ๊ฒ์ ์๋์ฐ์ ๋ง์ ๋ถ๋ถ์ ์กฐ์ํ ์ ์์์
์๋ฏธํ๋ค. ๋ฐ๋ผ์ ์ด๋ฒ ๋ฌธ์์์๋ API ํํน์ ๋ํ ์ดํด๋ฅผ ๋๋ชจํ๋ฉฐ, ๊ธฐ๋ณธ์ ์ธ ํํน์
๋ฐฉ๋ฒ์ ๋ํด ์ดํดํ๋ฏ๋ก ๋ค๋ฅธ ํํน ๋ฐฉ๋ฒ ๋ํ ๋ฏ์ค์ง ์๋๋ก ํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค.
๋จ, ํํน์ ์งํํ๋ ์์ธํ ์ฝ๋๋ค์ ํฌํจํ์ง ์๊ณ , ์ด๋ ๋ถ๋ถ์ ์ด๋ ํ ๋ฐฉ์์ผ๋ก
ํํน ํ๋์ง ์ค์ ์ ์ผ๋ก ์ดํด๋ณผ ๊ฒ์ด๋ค. ์ฝ๋๋ค์ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ข์ ์์ค๊ฐ ๋ง์ผ๋ฏ๋ก
๊ทธ๋ฌํ ์์๋ค์ ์ฐพ์๋ณด๋ฉด ์ข์ ๊ฒ์ด๋ค. ์ด์ ๋ถํฐ API ํํน์ ๋ํด ์์๋ณด์.
1 C๋ C++, C#๊ณผ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
2 Visual Studio์ GCC์ ๊ฐ์ ์ปดํ์ผ ๋๊ตฌ ๋ฑ
ํ์ด์ง 5 / 27
5 Windows API Hooking
2 Prior Knowledge
์ด๋ฒ ์ฅ์์๋ ๊ตฌ์ฒด์ ์ธ API ํํน์ ๋ํ์ฌ ์์๋ณด๊ธฐ ์ ์ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ API ๊ฐ
๋ฌด์์ธ์ง ๋ค์ ํ ๋ฒ ์ ๋ฆฌํด๋ณด๊ณ API ํํน์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ๋ํ์ฌ ์์๋ณผ ๊ฒ์ด๋ค.
2.1 What is an API?
API ๋ Application Programming Interface ์ ์ฝ์๋ก ๋จ์ด ์์ฒด๋ง์ผ๋ก๋ ๋ฌด์จ ๋ป์ธ์ง
์ดํดํ๊ธฐ ํ๋ค๋ค. ์ฝ๊ฒ ๋งํด ์ด์์ฒด์ ๊ฐ ์์ฉํ๋ก๊ทธ๋จ์ ์ํด ์ ๊ณตํ๋ ํจ์์ ์งํฉ์ผ๋ก
์์ฉํ๋ก๊ทธ๋จ๊ณผ ๋๋ฐ์ด์ค๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํ๋ค. ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์์ฉํ๋ก๊ทธ๋จ์ด
๋ฉ๋ชจ๋ฆฌ, ํ์ผ, ๋คํธ์ํฌ, ๋น๋์ค, ์ฌ์ด๋ ๋ฑ ์์คํ ์์์ ์ฌ์ฉํ๊ณ ์ถ๋๋ผ๋ ์ด๋ค์
๋ํด ์ง์ ์ ๊ทผํ ์๊ฐ ์๋ค. ์ด๋ฌํ ์์คํ ์์์ ์ด์์ฒด์ ๊ฐ ์ง์ ๊ด๋ฆฌํ๋ฉฐ ๋ณด์์ด๋
ํจ์จ ๋ฑ ์ฌ๋ฌ ๋ฉด์์ ์ฌ์ฉ์ ์์ฉํ๋ก๊ทธ๋จ์ด ์ ๊ทผํ ์ ์๋๋ก ๋ง์๋์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ์ฌ์ฉ์ ์์ฉํ๋ก๊ทธ๋จ์ด ์์คํ ์ปค๋์๊ฒ ์ด๋ฌํ ์์คํ ์์์ ์ฌ์ฉ์
์์ฒญํด์ผ ํ๋ฉฐ, ์ด ๋ฐฉ๋ฒ์ด ๋ฐ๋ก MS ์ ๊ณตํ Win32 API ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๋ค. ์ฆ API ํจ์
์์ด๋ ํ๋ก์ธ์ค, ์ค๋ ๋, ๋ฉ๋ชจ๋ฆฌ, ํ์ผ, ๋คํธ์ํฌ, ๋ ์ง์คํธ๋ฆฌ ๋ฑ ์์คํ ์์์ ์ ๊ทผํ
์ ์๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ์๊ฐ ์๋ค. ์๋ ๊ทธ๋ฆผ์ 32 ๋นํธ Windows OS ์ ํ๋ก์ธ์ค
๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ตํ ๋ํ๋ธ ๊ทธ๋ฆผ์ด๋ค.
๊ทธ๋ฆผ 1. User Mode & Kernel Mode
์ค์ ์์ฉํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด์๋ ๋ง์ DLL ์ด ๋ก๋ฉ๋๋ค. ๋ชจ๋
ํ๋ก์ธ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก kernel32.dll ์ด ๋ก๋ฉ๋๋ฉฐ, kernel32.dll ์ ntdll.dll ์ ๋ก๋ฉํ๋ค.
ํ์ด์ง 6 / 27
6 Windows API Hooking
๋ฐ๋ก ์ด ntdll.dll ์ ์ญํ ์ด ์ฌ์ฉ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋ก ์์ฒญํ๋ ์์ 3์ ์ํํ๋ค.
์ด๋ฌํ ๋ฐฉ์์ ํตํด ์์คํ ์์์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
2.2 What is an API Hooking?
API ํํน์ ๊ดํด ์ด์ผ๊ธฐํ๊ธฐ ์ ์ ํํน์ ๋ํ์ฌ ๋จผ์ ์์๋ณด์. ํํน์ด๋ ์ด๋ฏธ
์์ฑ๋์ด ์๋ ์ฝ๋์ ํน์ ์ง์ ์ ๊ฐ๋ก์ฑ์ ๋์ ๋ฐฉ์์ ๋ณํ๋ฅผ ์ฃผ๋ ๊ธฐ์ ์ด๋ผ ํ ์
์๋ค. Hook ์ด๋ผ๋ ๋จ์ด ์์ฒด๊ฐ ๋์ฏ๋ฐ๋ ๊ฐ์ ๊ฐ๊ณ ๋ฆฌ ๋ชจ์์ ๊ฐ์ง๋๋ฐ ์ด๋ฅผ ํตํด
๋ฌด์์ธ๊ฐ๋ฅผ ๋์์ฑ๋ ๊ฒ๊ณผ ๊ฐ์ด ์ปดํจํฐ์์๋ ๋ฌด์์ธ๊ฐ๋ฅผ ๋์์ฑ๋ ํํ๋ก ์ฌ์ฉ๋ ์
์๋ค.
๊ทธ๋ ๋ค๋ฉด API ๋ฅผ ํํน ํ๋ค๋ ๋ง์ ๋ฌด์จ ๋ป์ผ๊น? ๋ฐ๋ก Win32 API ๊ฐ ํธ์ถ๋๋
์ค๊ฐ์์ ๊ฐ๋ก์ฑ์ด ์ ์ด๊ถ์ ์ป์ด๋ธ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ ์์ ์ ๊ฐ๋ก์ฑ๋์ง
๊ถ๊ธํ ์๊ฐ ์๋ค. API ํํน์๋ ๋ง์ ๊ธฐ๋ฒ์ด ์กด์ฌํ๋๋ฐ ์ด๋ฌํ ๋ถ๋ฅ๊ฐ ์ฃผ๋ก ์ด๋ค
๋ฐฉ์์ ์ฌ์ฉํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ก ์ด๋ ์ง์ ์์ ๊ฐ๋ก์ฑ๋์ง์ ๋ฐ๋ผ ๋ถ๋ฅ๋๋ฏ๋ก ์ด์
๋ํด์๋ ๊ฐ ๋ฐฉ์์์ ์์ธํ ์์๋ณผ ๊ฒ์ด๋ค. ๊ธฐ๋ณธ์ ์ธ ํํน์ ๊ฐ๋ ์ ์๋์ ๊ทธ๋ฆผ๊ณผ
๊ฐ๋ค.
๊ทธ๋ฆผ 2. ์ ์ํธ์ถ๊ณผ ํํน๋ ํธ์ถ
์ ์์ ์ธ ๊ฒฝ์ฐ A ๋จ๊ณ๊ฐ ์งํ๋ ๋ค์์ B ๊ฐ ์งํ๋์ด์ผ ํ์ง๋ง, ํํน ๋ ํธ์ถ์
๊ฒฝ์ฐ A ๋จ๊ณ ๋ค์์ B ๊ฐ ์งํ๋๋ ๊ฒ์ด ์๋๋ผ C ๊ฐ ์งํ๋ ๋ค B ๊ฐ ์งํ๋๋ค. ์ด๋ฅผ
ํตํด A ์ ์์ฒญ์ ์กฐ์ํ๊ฑฐ๋ ํน์ ํ ์กฐ๊ฑด์๋ง B ๊ฐ ์คํ๋๋๋ก ์กฐ์ํ ์๊ฐ ์๋ค. ์์
๊ฐ์ ๋ฐฉ์์ผ๋ก API ๋ฅผ ํํน ํ๋ฉด ๊ทธ ํจ์์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ํ ์๋ ์๊ณ
์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๊ฐ์๋ง ํ ์๋ ์๋ค. ์ฌ์ง์ด ์ ํ ๋ค๋ฅธ ๋ด์ฉ์ผ๋ก ๋ฐ๋๊ฒ๋ ํ ์๋
์๋ค.
3 ์์คํ ํธ์ถ(System Call)๋ก ์ปค๋ ์์ญ ํํน์์ ๋ ์์ธํ ๋ค๋ฃฐ ๊ฒ์ด๋ค.
ํ์ด์ง 7 / 27
7 Windows API Hooking
3 User Mode Hooking
Windows ์์๋ ํฌ๊ฒ ์ฌ์ฉ์ ๋ชจ๋(User Mode)์ ํํน๊ณผ ์ปค๋ ๋ชจ๋(Kernel Mode)์
ํํน์ผ๋ก ๋๋์ด์ง๋ค. ์ด๋ฒ ์ฅ์์๋ ์ฌ์ฉ์ ์์ญ์์ ์ด๋ป๊ฒ API ํธ์ถ์ด ์ด๋ฃจ์ด์ง๋์ง,
๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ์ด๋ค์ ํํนํ ์ ์๋์ง์ ๋ํ์ฌ ์์๋ณด์.
3.1 IAT Hooking
3.1.1 IAT(Import Address Table)
IAT ํํน์ IAT(Import Address Table)๋ฅผ ํํน ํ๋ ๊ฒ์ผ๋ก, IAT ๋ ์ฝ๊ฒ ๋งํด ํด๋น
ํ๋ก๊ทธ๋จ์ด ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ด๋ค ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง๋ฅผ ๊ธฐ์ ํ ํ ์ด๋ธ์ด๋ค.
์๋ฅผ ๋ค์ด, ์ด๋ค ํ๋ก๊ทธ๋จ์ด Kernel32.dll ์ GetDriveType API ๋ฅผ ํธ์ถํ๋ค๋ฉด ํด๋น API ๋ฅผ
์ฌ์ฉํ๊ธฐ ์ํ ์ฃผ์๋ฅผ IAT์์ ์ฐธ์กฐํ ์ ์๋ค.
๊ทธ๋ฆผ 3. PE View ๋ก ๋ณธ IAT
IAT ํํน์ ๋ฐ๋ก ์ด IAT ์์ ํํนํ๊ณ ์ ํ๋ ํจ์ ์ฃผ์๋ฅผ ๋ด๊ฐ ์ํ๋ ํจ์(์ดํ
ํํน ํจ์)๋ก ๊ต์ฒดํ๊ณ , ํํน ํจ์์์ ํ๋ผ๋ฏธํฐ๋ ๋ฆฌํด ๊ฐ์ ์กฐ์ํ๊ณ ์๋ ํจ์๋ฅผ
ํธ์ถํ๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก IAT ํํน์ด๋ค. ๊ฐ์ฅ ์ฌ์ฐ๋ฉด์๋ ์์ ์ ์ธ ๋ฐฉ๋ฒ์ด๋ผ ์ผ๋ฐ์ ์ผ๋ก
์์ฃผ ์ฌ์ฉ๋๋ ํํน ๋ฐฉ์์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก API๊ฐ ํธ์ถ๋๋ ์ํฉ์ ๋ณด์.
๊ทธ๋ฆผ 4. Sleep API
Sleep()๋ฅผ ํธ์ถํ ๋ ์ง์ ํธ์ถํ์ง ์๊ณ 0x43B168 ์ฃผ์์ ์๋ ๊ฐ์ ๊ฐ์ ธ์์
ํธ์ถํ๋ค. 0x43B168 ์ฃผ์๋ ํด๋น ํ๋ก๊ทธ๋จ์ IAT ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก 0x76AE7990 ์ด๋ผ๋
๊ฐ์ด ์กด์ฌํ๊ณ ์๋ค. ์ด์ ์ด ๊ฐ์ด ๋ฐ๋ก ํด๋น ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ๋ Kernel32.dll ์
Sleep ํจ์์ ์ฃผ์์ด๋ค.
ํ์ด์ง 8 / 27
8 Windows API Hooking
๊ทธ๋ ๋ค๋ฉด ์ 0x40104F ์์๋ CALL 0x76AE7990 ์ด๋ผ ํ์ง ์๊ณ ๋ค๋ฅธ ๊ณณ์ ์ฐธ์กฐํ๋
ํ์ฌ ์ ๊ทผํ๋ ๊ฒ์ผ๊น? ์ด๋ ์ด์์ฒด์ ๋ฒ์ ์ด๋, ์ด๋ค ์ธ์ด, ์๋น์ค ํฉ์ด๋์
๋ฐ๋ผ DLL ์ ๋ฒ์ ์ด ๋ค๋ฅด๋ฉฐ, ํด๋น ํจ์์ ์์น๊ฐ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ด๋ค. ๋ชจ๋ ํ๊ฒฝ์์
Sleep() ํจ์ ํธ์ถ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ปดํ์ผ๋ฌ๋ Sleep()์ ์ค์ ์ฃผ์๊ฐ ์ ์ฅ๋
์์น(0x43B168)๋ฅผ ์ค๋นํ๊ณ CALL DWORD PTR DS:[43B168]์ ์ ์ด๋๊ธฐ๋ง ํ๋ค. ๊ทธ ํ
ํ์ผ์ด ์คํ๋๋ ์๊ฐ PE Loader๊ฐ 0x43B168 ์์น์ Sleep() ํจ์์ ์ฃผ์๋ฅผ ์ ๋ ฅํด์ค๋ค.
3.2.2 Hook
๊ทธ๋ ๋ค๋ฉด ์ด๋ฌํ IAT ์ ๊ฐ๋ ์ ๋ํด ์์๋ณด์์ง๋ง, ๋์ฒด ์ด ๋ถ๋ถ ์ค ์ด๋ ๊ณณ์ ํํน
ํด์ผ ํ๋ค๋ ๊ฒ์ธ๊ฐ ์๋ฌธ์ ๊ฐ์ง ์ ์๋ค. ์์ Sleep ํจ์๋ฅผ ์๋ก, ์ฌ์ฉ์ ๋ชจ๋์์
Sleep API๊ฐ ํธ์ถ๋๋ ๊ณผ์ ์ ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค.
๊ทธ๋ฆผ 5. ๋ฉ๋ชจ๋ฆฌ์์ Sleep API
(A)๋ 3.2.1 ์์ ์ด์ผ๊ธฐํ ๋ฐ์ ๊ฐ์ด ํด๋น ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ฃผ์ ๊ณต๊ฐ์ ๋ง๋ค์ด
๋์ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ๋ง๋ค์ด ๋์ ์ฃผ์์ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉฐ PE ๋ก๋๊ฐ Sleep ํจ์์
์ฃผ์๋ฅผ ์ฑ์ ๋ฃ๋๋ค. ์ฌ๊ธฐ์ ๋ง๋ค์ด์ง ์ฃผ์ ๊ณต๊ฐ 43B168 ์ RVA ๊ฐ์ด๋ฉฐ, ์ด์ ํด๋นํ๋
ํ์ผ Offset4์ 39168์ด๋ค. 39168์ ๋ฐ๋ก IAT ์ Sleep ํจ์๊ฐ ์์นํ Offset์ด๋ค.
๊ทธ๋ฆผ 6. Sleep API in IAT
๋ง์ฝ (A)์ ์กด์ฌํ๊ณ ์๋ ๊ฐ์ธ 43B168 ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ฐ๊พธ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ง์
Sleep ํจ์๋ฅผ ํธ์ถํ๋ ๋ถ๋ถ์ IsDebuggerPresent API ์ IAT ์ฃผ์๋ฅผ ๋ฃ์ด๋ณด์. ์ฃผ์๋
4 RVA๋ ๋ฉ๋ชจ๋ฆฌ์์์ ์๋์ฃผ์์ด๋ฉฐ Offset์ ํ์ผ์์์ ์์น์ด๋ค.
ํ์ด์ง 9 / 27
9 Windows API Hooking
์ ๊ทธ๋ฆผ์์์ ๊ฐ์ด Offset 39164 ์ด๋ฏ๋ก ์ด๋ RVA 43B164 ๊ฐ ๋๋ค. ์ด์ ์๋์ ๊ฐ์ด
์ฝ๋๋ฅผ ํจ์นํด๋ณด์.
๊ทธ๋ฆผ 7. ์ฝ๋ ํจ์น
์๋ Sleep()์ ํธ์ถํ๋ ๋ถ๋ถ์ IsDebuggerPresent()์ IAT ์ฃผ์๋ก ๋ณ๊ฒฝ์ ํด์ฃผ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด์ ์์์ ์ธ๊ธํ ๋ฐ์ ๊ฐ์ด PE ๋ก๋๊ฐ 0x40104F ์์ ํธ์ถํ๋ ํจ์์
์ฃผ์๋ฅผ 0x43B164 ์์ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ทธ๋ฆผ์ฒ๋ผ IsDebuggerPresent()๊ฐ
์์นํ๊ฒ ๋๋ค.
๊ทธ๋ฆผ 8. ํธ์ถํ ํจ์ ์ฃผ์ ๋ณ๊ฒฝ
์ด๋ฅผ ์ ๋ฆฌํ์๋ฉด, ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ๊ณ ์ ํ๋ API ๋ฅผ ํธ์ถํ ๋ ํด๋น ๋ช ๋ น์ด์๋
โCALL DWORD PTR DS:[IAT ์ ์กด์ฌํ๋ ํด๋น ํจ์์ RVA]โ๋ก ๋ํ๋ด๋ฉฐ, ํ๋ก๊ทธ๋จ์ด
์คํ๋๋ฉด์ ์ค์ ์ฃผ์๊ฐ ํด๋น DS:[RVA]์ ์ฌ๋ผ์ค๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์์ ๊ฐ์ด (A)๋ฅผ ํํน
ํ๊ธฐ ์ํด์ DS:[HookFunc]๋ก ๋ฐ๊ฟ์ฃผ์ด์ผ ํ๋ค..
์ด๋ฒ์๋ (B)์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์. (A)๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๊ธฐ ์ด์ ํ์ผ์ ํํ์์
์กฐ์์ด ๊ฐ๋ฅํ์์ง๋ง (B)์ ๊ฒฝ์ฐ ํ์ผ์ด ์คํ๋๋ฉด์ 43B168 ์ ์ค์ Sleep API ์ ์ฃผ์๋ฅผ
๊ฐ์ง๊ณ ์จ๋ค. ๊ทธ๋ฌ๋ฏ๋ก (B) ๋ถ๋ถ์ ํ์ผ์ด ์๋ ํ๋ก์ธ์ค์ผ ๊ฒฝ์ฐ์๋ง ์กฐ์์ด ๊ฐ๋ฅํจ์ ์
์๊ฐ ์๋ค. ๋ฐ๋ผ์ ์ฝ๊ฒ DLL Injection ๊ณผ ๊ฐ์ ๊ธฐ๋ฒ์ ํตํด ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์กฐ์ํ
์ ์์ง๋ง, ์ด๋ฒ ๋ฌธ์๋ ์ฝ๋์ ๊ด๋ จ๋ ๋ถ๋ถ์ ์ต๋ํ ์ ์ธํ๊ณ ์๋ฆฌ๋ฅผ ์ดํดํจ์
๋ชฉ์ ์ผ๋ก ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ์๋ ๋๋ฒ๊ฑฐ๋ฅผ ํตํด์ ์ ๊ทผํ ๊ฒ์ด๋ค.
ํ์ด์ง 10 / 27
10 Windows API Hooking
๊ทธ๋ฆผ 9. ํจ์ ํธ์ถ - Debugger
์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด Sleep ํจ์๋ฅผ ํธ์ถํ ๋ 43B168 ์ ์ฐธ์กฐํ๋ฉฐ, IsDebuggerPresent
ํจ์๋ฅผ ํธ์ถํ ๋๋ 43B164 ๋ฅผ ์ฐธ๊ณ ํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์๋ ๋คํ ์์ญ์ ๋ณด๋ฉด
๊ฐ๊ฐ ํด๋นํ๋ ํจ์์ ์ฃผ์๊ฐ PE ๋ก๋์ ์ํด ์ง์ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. Sleep
ํจ์๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณณ์๋ 76AE7990์ด ์์นํ๋ฉฐ ๋ค๋ฅธ ๊ณณ์๋ 76AEB0B0๊ฐ ์์นํ๊ณ ์๋ค.
ํด๋น ์ง์ ์๋ ๊ฐ ํจ์์ ์ค์ ์คํ๊ณผ ๊ด๋ จ๋ ๋ถ๋ถ์ด ์กด์ฌํ๊ณ ์๋ค. ๋ฐ๋ผ์ ์ด ์์น๋ฅผ
๋ณ๊ฒฝํ๋ฉด ํํน์ ์งํํ ์ ์๋ค. ๋ง์ฝ 43B168(Sleep)์ 76AEB0B0 ๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ์ด๋ป๊ฒ
๋ ๊น?
๊ทธ๋ฆผ 10. Sleep ์ด ํธ์ถํ๋ ์ฃผ์ ๋ณ๊ฒฝ
์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ถ๋ช ๋๋ฒ๊ฑฐ๋ Sleep()์ด๋ผ๊ณ ๋ํ๋ด์ง๋ง ํ๋จ์ DS ์์ ๊ฐ๋ฆฌํค๋ ๊ณณ์
KERNEL32.IsDebuggerPresent ์ด๋ค. ์ด๋ฅผ ํตํด ๋๋ฒ๊ฑฐ ๋ํ IAT ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฃผ์์
๋ํ๋ด์ฃผ๋ ๊ฒ์์ ์ ์๊ฐ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ์ข ๋ ์ฌํ ํ์ต์ ์งํํด๋ณด์. ํํ ์ฝ๋
์ผ์ด๋ธ5(Code Cave)๋ผ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฌ๊ธฐ์ ์ ์ฉํด๋ณผ ์๊ฐ ์๋ค.
์ฝ๋ ์ผ์ด๋ธ์ ๋ํด ๊ฐ๋จํ ์ค๋ช ํ์๋ฉด ํด๋น ํ๋ก์ธ์ค์ ๋น ๊ณต๊ฐ์ ์ฌ์ฉ์๊ฐ ์ ์ํ
์ฝ๋๋ฅผ ๋ฃ์ด์ค ๋ค, ์ด ๋ถ๋ถ์ผ๋ก ํ๋ก๊ทธ๋จ์ด ์ ๊ฐ๋๋๋ก ํ๋ ๋ฐฉ์์ด๋ค. ์์
ํ๋ก๊ทธ๋จ์์ ๋น ๊ณต๊ฐ์ Sleep ์ด ํธ์ถ๋๋ ์๋ถ๋ถ์ ์กด์ฌํ๊ณ ์๋ค. ๋ฐ๋ผ์ Call
๋ช ๋ น์ด๋ฅผ ํตํด DS:[43B168]์ ์ฐธ์กฐํ๊ฒ ๋๋๋ฐ, ์ด๋ 43B168 ์ ์ฝ๋ ์ผ์ด๋ธ์ ์์น์ธ
401023 ์ด ์กด์ฌํ๊ณ ์๋ค. 401023 ์์ Sleep API ์ ์ธ์๋ก ์ฌ์ฉ๋๊ธฐ ์ํด ์คํ์
์ ์ฅ๋์ด ์๋ ๊ฐ์ ์ฆ๊ฐ์ํค๋ฏ๋ก ํ๋ฆ์ ๋ฐฉํดํ๋ค. ADD ๋ช ๋ น ๋ค์์๋ ์๋์ ๊ธฐ๋ฅ์
์ํํ๊ธฐ ์ํด ์กฐ์๋๊ธฐ ์ด์ ๊ฐ์ธ 76AE7990๋ก ์ ํ๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
5 Inline Patch ๊ธฐ๋ฒ๊ณผ ์ ์ฌํ ๊ฐ๋ ์ผ๋ก ์ด๋ฆ๋ง ๋ค๋ฅด๊ฒ ๋ถ๋ฆฌ๋ ๊ฒ ๊ฐ๋ค.
ํ์ด์ง 11 / 27
11 Windows API Hooking
๊ทธ๋ฆผ 11. Code Cave ๋ฅผ ์ฌ์ฉํ ํํน
์ด๋ ๊ฒ ์กฐ์์ ํ๋๋ฐ ๊ณผ์ฐ ์ ๋๋ก ํ๋ก๊ทธ๋จ์ด ๋์ํ ๊น? ๋น์ฐํ ์ ๋๋ก ๋์ํ๋ค.
์ด์ (A)์์๋ IAT ์ ์กด์ฌํ๋ ๋ค๋ฅธ API ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ๋ง ์งํํ์ง๋ง, ์ด๋ฒ ๊ณผ์ ์์๋
์ธ์๋ก ์ ๋ฌ๋๋ ๊ฐ์ ์ง์ ์์ ํ ์๊ฐ ์๋ค. ์ด๋ ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ ๋ฐ์ ๊ฐ์
์กฐ์ํ์ฌ ํน์ ํ ํจ์์ ํ๋ฆ์ ์กฐ์ํ ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ด ๋ค๋ฅธ ๋ฉด์๋ ์ ์ฉํ๊ฒ ํ์ฉํ
์ ์๋ค. (B)์ ์ ์ฉํ ๋ฐฉ์์ (C)์ ์์ ๋ถ๋ถ์ JMP Hook_Address ๋ก ์ด๋ํ์ฌ
์ ์ฌํ๊ฒ ์ ์ฉํ ์ ์๋ค.
(C)์ ๊ฒฝ์ฐ ์ค์ ํจ์์ ๋ช ๋ น์ด๋ค์ด ์์นํ๊ณ ์๋ค. ๋ฐ๋ผ์ ์ด ๋ถ๋ถ์ ํํน ํ๊ธฐ
์ํด์๋ ๋ช ๋ น์ด๋ฅผ ์กฐ์ํ์ฌ์ผ ํ๋๋ฐ ์ด๋ป๊ฒ ์กฐ์ํด์ผ ํ ๊น? (C)์ ๋ด์ฉ์ ๋ฐ์ ๊ทธ๋ฆผ๊ณผ
๊ฐ๋ค. ์์ธํ ๋ณด๋ฉด ์๋จ์ ์ธ ๋ช ๋ น์ด์ OPCODE ๋ ์ด 5 ๋ฐ์ดํธ์ด๋ค. ๋ฐ๋ก ์ด ๋ถ๋ถ์
์กฐ์ํ๋ฏ๋ก ์ฐ๋ฆฌ๋ ์ํ๋ ํจ์๋ฅผ ํํนํ ์ ์๋ค. ์๋์ ๊ทธ๋ฆผ์ ๋ณด์.
๊ทธ๋ฆผ 12. (C) ๋จ๊ณ ์๋ ๋ช ๋ น์ด์ ์กฐ์๋ ๋ช ๋ น์ด
Sleep() ํจ์์ ์๋ ์ฃผ์ 7673A6B0 ์ ๋ช ๋ น์ด๋ฅผ JMP ๋ช ๋ น์ด๋ก ๋ณ๊ฒฝํ ๊ฒ์ ํ์ธํ
์ ์๋ค. ์ด๋ ๊ฒ ๋ณ๊ฒฝ๋ Sleep()ํจ์๋ ํธ์ถ๋ ๋๋ง๋ค ํด๋น ๋ถ๋ถ์ผ๋ก ์ด๋ํ๊ฒ ๋๋ฉฐ
๊ณต๊ฒฉ์๊ฐ ์๋ํ ๋๋ก ํ๋ฆ์ด ๋ณ๊ฒฝ๋ ๊ฒ์ด๋ค. ํ์๊ฐ ์๋ํ ์กฐ์์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด
ํ์ด์ง 12 / 27
12 Windows API Hooking
Sleep() ํจ์์ ์๊ฐ ๊ฐ์ ์ฆ๊ฐ์ํจ ๋ค์, ์๋๋๋ก ์ฝ๋๋ฅผ ๋ณต์ํ๊ณ ๋ณต์๋ ์ง์ ์ผ๋ก
์ด๋ํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆผ 13. ์กฐ์ ์ฝ๋
์ด๋ ๊ฒ ์ฝ๋๊ฐ ์๋ ์ด์ ๋ธ๋ฆฌ๋ก ์กฐ์ํ ๊ฒ์ ๊ธ์ ์ฝ๋ ์ฌ๋๋ค์ ์ดํด๋ฅผ ๋๊ณ ์
์งํํ ๊ฒ์ด๋ค. ์ค์ ๋ก ์ด๋ ๊ฒ ํ๋ ์ฌ๋์ ๊ฑฐ์ ์์ผ๋ฉฐ, ํนํ 42000E ์์ ์๋๋๋ก
์ฝ๋๋ฅผ ๋ณต์ํ๋ ๋ถ๋ถ์ VirtualProtect ๋ก ๊ถํ์ ๋ณ๊ฒฝํ์ฌ ์งํํ๋ ๋ฑ ์ด์ ๋ธ๋ฆฌ๋ก
์งํํ ๊ฒฝ์ฐ ๋ณต์กํ๊ฒ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ๋ฃ์ง ์์๋ค. ํ์ง๋ง ์ค์ C/C++์ ๊ฐ์
์ธ์ด๋ก ํํน ํจ์๋ฅผ ์ ์ํ ๋๋ ๋์ฑ ํธ๋ฆฌํ ๊ฒ์ด๋ค.
๋ง์ง๋ง์ผ๋ก ์์ ๋ฅผ ํตํด ์งํํ ๊ฐ ๋ฐฉ์์ ์ฐจ์ด์ ๋ํ์ฌ ์์๋ณด์. (A)๋ฅผ ํํน ํ ๋
ํด๋น ์ฃผ์์ ์ฝ๋๋ฅผ ์ง์ ๋ณ๊ฒฝํ์๋๋ฐ, ์ด๋ก ์ธํด ํด๋น ์ฃผ์๊ฐ ์๋ ์ง์ ์์ Sleep()์
ํธ์ถํ ๊ฒฝ์ฐ ์ ์์ ์ธ Sleep()์ด ํธ์ถ๋๋ค. ๋ฐ๋ฉด์ (B)์ ๊ฒฝ์ฐ IAT ๊ฐ ๊ฐ๋ฆฌํค๋ DS ์
์กด์ฌํ๋ ๊ฐ์ ๋ณ๊ฒฝํ์๊ณ , ์ด๋ก ์ธํด Sleep() ํจ์๋ฅผ ํธ์ถํ๋ ๋ชจ๋ ๊ณณ์ด ์กฐ์๋ DS ๋ฅผ
๊ฐ๋ฆฌํจ๋ค. ๋ฐ๋ผ์ (B)์ ๋ฐฉ์์ ๊ฒฝ์ฐ ํด๋น ํ๋ก์ธ์ค์์ Sleep() ํจ์๋ ํํน ๋ ์ฝ๋
์ผ์ด๋ธ๋ฅผ ์ง๋๊ฐ๊ฒ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก (C) ๋ํ ์ค์ Sleep() ํจ์์ ๋ถ๋ถ์ JMP ๋ช ๋ น์ด๋ก
์กฐ์ํ์๊ธฐ ๋๋ฌธ์ ํด๋น ํ๋ก์ธ์ค์ ๋ชจ๋ Sleep() ํจ์๊ฐ ํํน๋ ๊ฒ์ด๋ค.
ํนํ (C)์ ๋ฐฉ์์ Ntdll.dll ์ ํจ์๋ ์กฐ์์ด ๊ฐ๋ฅํ๋ค. ์๋์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ค์
Ntdll.ZwDelayExecution ์ ํธ์ถํ๋ ๊ฒ์ ํ์ธํ ์ ์์ผ๋ฉฐ, ํด๋น ๋ถ๋ถ์ ์ค์ ์ฝ๋์ 5
๋ฐ์ดํธ๋ฅผ JMP ๋ช ๋ น์ด๋ก ์์ ํ์ฌ ์ํ๋ ํํน์ ์งํํ ์๊ฐ ์๋ค.
๊ทธ๋ฆผ 14. Ntdll.dll ์ API
๋จ, ์ด๋ฌํ IAT ํํน์ ๊ฒฝ์ฐ, ํํน ํ๊ณ ์ ํ๋ ํจ์๊ฐ IAT ์ ์กด์ฌํด์ผ๋ง6 ํํนํ ์
์๊ธฐ ๋๋ฌธ์ ๋์ ์ผ๋ก API ๋ฅผ ๋ก๋(์๋ก, GetProcAddress API ๋ฑ์ ํตํด)ํ๋ ๊ฒฝ์ฐ IAT๋ฅผ
์ฐธ์กฐํ์ง ์์ IAT ํํน์ ์ฌ์ฉํ ์๋ค. ๋ํ IAT ๋ ํ๋ก์ธ์ค๋ง๋ค ๊ฐ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์
a.exe์ IAT๋ฅผ ํํนํ์๋ค๊ณ b.exe๊น์ง ํํน ๋ ๊ฒ์ด ์๋์ ์ ์ํด์ผ ํ๋ค.
6 (C)๋ฐฉ์์ Ntdll ํํน์ IAT์ ๋ํ๋์ง ์์ Detours ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋ค.
ํ์ด์ง 13 / 27
13 Windows API Hooking
3.2 Message Hooking
์๋์ฐ ์ด์์ฒด์ ๋ ์ฌ์ฉ์์๊ฒ GUI ๋ฅผ ์ ๊ณตํด์ฃผ๊ณ , ์ฌ์ฉ์๋ ์ ๊ณต๋ฐ์ GUI ๋ฅผ
์ด์ฉํ์ฌ ์ํ๋ ๋์์ ํ ์ ์๋ค. ๋์์ ์ํํ๋๋ฐ ์์ด ๋ง์ฐ์ค๋ฅผ ์์ง์ด๊ฑฐ๋ ํด๋ฆญ,
๋๋ ํค๋ณด๋ ๋ฒํผ์ ๋๋ฅด๊ฒ ๋๋๋ฐ ์ด๋ฌํ ๋์์ ์๋์ฐ ์ด์์ฒด์ ๊ฐ Event Driven
๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ค. ๋ค์ ๋งํด ์ด๋ฌํ ๋์์ ์ด๋ฒคํธ๋ก ๋ฐ์์์ผ ์ด์์ฒด์ ๊ฐ ๊ทธ
์ด๋ฒคํธ์ ๋ง๋ ๋ฉ์์ง๋ฅผ ํด๋น ์์ฉํ๋ก๊ทธ๋จ์๊ฒ ์ ๋ฌํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
์๋ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ๋ฉ์์ง ํํน์ด ์ด๋ค ์ง์ ์์ ์ด๋ฃจ์ด์ง๋์ง ๋ํ๋ธ ๊ฒ์ด๋ค.
์ฌ์ฉ์๊ฐ ์ด๋ ํ ํ์๋ฅผ ํ์ ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋๊ณ , ์ด๋ฒคํธ ๋ฐ์์ผ๋ก ์ธํด OS ์์
์์ฉํ๋ก๊ทธ๋จ์ผ๋ก ๋ณด๋ผ ๋ฉ์์ง๋ค์ด OS Message Queue ์ ์กด์ฌํ๊ณ ์๋ค. ์๋ฅผ ๋ค์ด
ํค๋ณด๋ ์ ๋ ฅ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด WM_KEYDOWN ๋ฉ์์ง๊ฐ OS Message Queue ์
์ถ๊ฐ๋๋ค. ์ด์์ฒด์ ๋ ํด๋น ์ด๋ฒคํธ๊ฐ ์ด๋ ์์ฉํ๋ก๊ทธ๋จ์์ ๋ฐ์ํ๋์ง ํ์ ํ ๋ค์,
ํ์์ ๋ฉ์์ง๋ฅผ ๊บผ๋ด์ด ํด๋น ์์ฉํ๋ก๊ทธ๋จ์ ๋ฉ์์ง ํ์ ์ ๋ฌํ๋ค. ํด๋น
์์ฉํ๋ก๊ทธ๋จ์ ์์ ์ Application Message Queue ์ WM_KEYDOWN ๋ฉ์์ง๊ฐ ์ถ๊ฐ๋
๊ฒ์ ํ์ธํ๊ณ ํด๋น ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํธ์ถํ๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์๋์ฐ๋ ๋ฉ์์ง๋ฅผ
์ ๋ฌํ๋ค.
๊ทธ๋ฆผ 15. ๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์
์ฌ๋ฏธ์๋ ์ฌ์ค์ ์๋์ฐ ์ด์์ฒด์ ์์ ์ด๋ฌํ ๋ฉ์์ง ํ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ผ๋ก
์ ๊ณตํ๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ก SetWindowsHookEx API ๊ฐ ๊ทธ ์ฃผ์ธ๊ณต์ผ๋ก ํ ์ฒด์ธ์
์์ฉํ๋ก๊ทธ๋จ์ด ์ ์ํ ํํฌ ํ๋ก์์ ๋ฅผ ์ค์นํ๋ฉฐ ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ํน์ ์ ํ์
์ด๋ฒคํธ๋ฅผ ๋ชจ๋ํฐ๋ง ํ ์ ์๋ค.
ํ์ด์ง 14 / 27
14 Windows API Hooking
HHOOK WINAPI SetWindowsHookEx(
_In_ int idHook // ํ ์ข ๋ฅ
_In_ HOOKPROC lpfn, // ์ง์ ํ ์ด๋ฒคํธ ๋ฐ์์ ์ฒ๋ฆฌํ๋ ํ๋ก์์ ์ฃผ์
_In_ HINSTANCE hMod, // lpfn ์ด ์๋ DLL์ ํธ๋ค
_In_ DWORD dwThreadId
);
๊ทธ๋ฆผ 16. SetWindowsHookEx API
๋ง์ฝ ํด๋น API ๋ฅผ ๊ตฌํํ๋ HookKey.dll ์ด ์กด์ฌํ๋ฉฐ ์ด๋ฅผ ์คํํ๊ธฐ ์ํ
HookMain.exe ๋ฅผ ์ ์ํ์๋ค๊ณ ๊ฐ์ ํ์. HookMain.exe ๋ฅผ ์คํํ๋ฉด HookKey.dll ์ด
ํด๋น ํ๋ก์ธ์ค์ ๋ก๋๋๋ฉฐ SetWindowsHookEx()๊ฐ ํธ์ถ๋๋ค. ์ด๋ ๊ฒ ๋ฉ์์ง ํํน์ด ๊ฑธ๋ฆฐ
์ํ์์, ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ํด๋น ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค๋ฉด HookKey.dll ์ ๊ทธ
ํ๋ก์ธ์ค์์๋ ๋ก๋ฉ์ด ๋๋ค.
๊ทธ๋ฆผ 17. DLL Injection
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ํ๋ผ ์ ์์ผ๋ฉฐ, ๋ค์ ๋งํด ํํน ๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ ๋ชจ๋
ํ๋ก์ธ์ค์ DLL ์ธ์ ์ ์ด ์ผ์ด๋๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ๋ฐฉ์์ ํตํด ๋ฉ์์ง๋ฅผ ํํนํ ์
์์ผ๋ฉฐ, ์ด๋ DLL ์ธ์ ์ ์ ํ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
ํ์ด์ง 15 / 27
15 Windows API Hooking
4 Kernel Mode Hooking
3 ์ฅ์์๋ ์ฌ์ฉ์ ๋ชจ๋ ํํน์ ๋ํ์ฌ ์์๋ณด์๋ค๋ฉด ์ด๋ฒ ์ฅ์์๋ ์ปค๋ ๋ชจ๋
ํํน์ ๋ํ์ฌ ์์๋ณผ ๊ฒ์ด๋ค. ์ปค๋ ๋ชจ๋์์ ์ด๋ฃจ์ด์ง๋ ํํน์ ๊ฒฝ์ฐ ๋จ์ํ JMP
๋ช ๋ น์ด๋ฅผ ์ค์นํ๋ ๊ฒ์ด ์๋๋ผ, ํน์ ํ ๊ตฌ์กฐ์ฒด์ ํฌํจ๋ ๊ฐ์ ์์ ํ๋ ๋ฑ ์์ ์
์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์๋ฌด๋๋ ์ฌ์ฉ์ ๋ชจ๋์ ํํน๋ณด๋ค ๋ณต์กํ๋ค. ์ด์ ์ด๋ฌํ ์ปค๋
๋ชจ๋ ํํน์ ๋ํ์ฌ ์์๋ณด์.
4.1 System Call
์ด์์ฒด์ ๋ ์ฌ์ฉ์ ๋ชจ๋(Ring 3)์ ์ปค๋ ๋ชจ๋(Ring 0)๋ผ๋ ๋ ๊ฐ์ง ํํ์ ๊ถํ์ด
์กด์ฌํ๊ณ ์๋ค. ์ด๋ ๊ฒ ๋ถ๋ฆฌ๋๋ ์ด์ ๋ ๋ค์ํ์ง๋ง, ์๋ฌด๋๋ ๋ณด์๊ณผ ๊ด๋ จ๋ ์ ๋ํ
๋งค์ฐ ์ค์ํ๋ค. ๋ง์ฝ ๋ถ๋ฆฌ๋์ด ์์ง ์์ ๊ฒฝ์ฐ ์ด๋ ํ ํ๋ก์ธ์ค๋ ์ง ์ด์์ฒด์ ์ ํต์ฌ
๊ธฐ๋ฅ์ ์กฐ์ํ ์ ์๊ฒ ๋๋ฏ๋ก ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ ๋ถ๋ฆฌ๋๋ ๊ฒ์ด ์ข๋ค. ๊ทธ๋ ๊ธฐ์
์ปค๋ ๋ชจ๋์์๋ ์ฌ์ฉ์ ๋ชจ๋๋ฅผ ์กฐ์ํ ์ ์์ง๋ง, ๋ฐ๋๋ก ์ฌ์ฉ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋
์กฐ์ํ ์๊ฐ ์๋ค.
ํ์ง๋ง ์ปค๋ ์์ญ์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ ํด๋น ํ๋ก์ธ์ค๊ฐ ๋์คํฌ์ ๋ด์ฉ์ ์ฝ์
์๊ฐ ์๊ฒ ๋๊ณ ๊ทธ ์ธ์๋ ํ๋์จ์ด๋ ํ๋ก์ธ์ค์ ์ง์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด
์ด๋ป๊ฒ ์ฐ๋ฆฌ๊ฐ ์ ์ํ ์ฌ์ฉ์ ๋ชจ๋์ ํ๋ก๊ทธ๋จ์ด ํ๋ก์ธ์ค๋ ๋์คํฌ์ ๊ด๋ จ๋ ์์ ์
์ํํ ์ ์์๊น? ์ด๋ ๋ฐ๋ก ์์คํ ํธ์ถ(System Call)์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ๋ชจ๋์
ํ๋ก์ธ์ค๊ฐ ์ปค๋ ์์ญ์ ์ ๊ทผ์ ์์ฒญํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆผ 18. System Call ๊ณผ์
ํ์ด์ง 16 / 27
16 Windows API Hooking
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์์ฉํ๋ก๊ทธ๋จ์ด Kernel32.dll ์ API ๋ฅผ ํธ์ถํ๋ฉด ํด๋น API ๋
Ntdll.dll ์ ํจ์๋ฅผ ํธ์ถํ๋ค. ๊ทธ๋ฆฌ๊ณ ํธ์ถ๋ Ntdll.dll ์ ์์ ์ด ์ปค๋์ ์์ฒญํด์ผ ํ
์๋น์ค ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ ์์คํ ํธ์ถ์ ์งํํ๋ฉฐ ์ด ๊ณผ์ ์ด ๋ฐ๋ก ์์ฉํ๋ก๊ทธ๋จ์ด ์ปค๋์๊ฒ
์์คํ ์์ ์ ๊ทผ์ ์์ฒญํ๋ ๊ณผ์ ์ด๋ค. ์ด๋ ์ง์ ํ ์๋น์ค๋ฅผ ์์ฒญํ๊ธฐ ์ํด EAX ์
์ํ๋ ์๋น์ค ๋ฒํธ๋ฅผ ์ ์ฅํ๊ณ EDX ์๋ ์ด ์๋น์ค์ ์ฌ์ฉ๋ ์ธ์๋ฅผ ๊ฐ๋ฆฌํค๋
ํฌ์ธํฐ๋ฅผ ๋๊ฒจ์ค๋ค. ์ด๋ฌํ ๊ณผ์ ์ ํตํด ์ปค๋์์๋ ์ด๋ ํ ์๋น์ค๊ฐ ํ์ํ์ง, ์ด๋ ํ
์ธ์๋ฅผ ๋๊ฒจ์ฃผ์๋์ง ์ ์๊ฐ ์๋ค.
System Call ์ โINT 0x2Eโ์ โSYSENTERโ ๋ ๊ฐ์ง ๋ช ๋ น์ด๋ก ๋๋์ด์ง๋ค. ์ด๋ ๊ฒ
๋๋์ด์ง๋ ๊ธฐ์ค์ ๋ฐ๋ก Windows XP ์ด์ ๊ณผ ์ดํ๋ก, ์ด์ ์๋ INT 0x2E ๋ฅผ
์ฌ์ฉํ์์ผ๋ฉฐ, XP ๋ถํฐ๋ SYSENTER ๋ฅผ ์ฌ์ฉํ๋ค. INT 0x2E ์ ๊ฒฝ์ฐ ์๋์ ์ผ๋ก ๋ฌด๊ฑฐ์ด
์ธํฐ๋ฝํธ๋ฅผ ์งํํ๋ฏ๋ก ํด๋ญ ์๋ฅผ ๋ง์ด ์๋ชจํ์๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด
SYSENTER ๊ฐ ๋์จ ๊ฒ์ด๋ค. ์ด๋ฌํ ์ฐจ์ด ์ธ์ ์์ผ๋ก ์งํํ ํํน ๊ณผ์ ์์๋ ์ฐจ์ด์ ์
๊ฐ์ง๋ฏ๋ก ์ด์ ๋ํ์ฌ ์์๋ณด์.
๊ทธ๋ฆผ 19. INT 0x2E ์ SYSENTER
์ฐ์ INT 0x2E ์ ๊ฒฝ์ฐ IDT(Interrupt Descriptor Table)์ ์ฐธ์กฐํ์ฌ ๋ฐ๋ก System
Service Dispatch(KiSystemService)๋ก ๊ฐ๋ค. ํ์ง๋ง SYSENTER ๋ SYSENTER_EIP(MSR)๋ฅผ
์ฐธ์กฐํ์ฌ KiFastCallEntry ๋ก ์งํํ ๋ค์ KiSystemService ๋ก ๊ฐ๋ค. ๋ง์ง๋ง์ผ๋ก INT
0x2E ์ ๊ฒฝ์ฐ IRET ๋ผ๋ ๋ช ๋ น์ด๋ก ์ปค๋ ๋ชจ๋์์ ๋ค์ ์ฌ์ฉ์ ๋ชจ๋๋ก ๋ณต๊ทํ๊ณ ,
SYSENTER ์ ๊ฒฝ์ฐ SYSEXIT ๋ผ๋ ๋ช ๋ น์ด๋ฅผ ํตํด ์ฌ์ฉ์ ๋ชจ๋๋ก ๋ณต๊ทํ๋ค. ์ด๊ฒ์ด ๋ณ๋ก
์ค์ํ๊ฒ ๋๊ปด์ง์ง ์์ ์ ์์ง๋ง, ํํน์ ์งํํ ๋ ๋ ๋ช ๋ น์ด์ ๋ฐ๋ผ ํํน ์ง์ ์ด
๋ฌ๋ผ์ง๋ค. ์ด๋ฌํ ๊ฐ ํํน ๋ฐฉ๋ฒ์ ๋ํด์๋ ๋ฐ๋ก ๋ค์์ ์์๋ณด์.
4.2 INT 0x2E Hooking
INT 0x2E ๋ ์ธํฐ๋ฝํธ 0x2E ๋ก IDT ์ ์ ์๋ ์ธํฐ๋ฝํธ ์๋น์ค ๋ฃจํด(ISR)์ ์ํํ๋ค.
์ฌ๊ธฐ์ IDT ๋ 256 ๊ฐ์ Entry ๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด๋ก ์ํธ๋ฆฌ ํ๋๋น ํ๋์ ์ธํฐ๋ฝํธ์
ํ์ด์ง 17 / 27
17 Windows API Hooking
๋์ํ๋ฉฐ ๊ฐ ์ธํฐ๋ฝํธ๋ IDT ๋ก๋ถํฐ ์ฒ๋ฆฌํ ํจ์์ ์ฃผ์(ISR)์ ์ ๋ฌ๋ฐ๋๋ค. ๊ฐ
์ํธ๋ฆฌ์๋ ์ง์ ๋ ๊ฐ์ด ๋ด๊ฒจ ์์ผ๋ฉฐ WinDBG7๋ก ํ์ธํ์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ๋ชจ์ต์ ๋ณผ
์๊ฐ ์์ผ๋ฉฐ INT 0x2E ์ ๊ฒฝ์ฐ IDT ์์ ๋ฐ๋ก KiSystemService ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ์
ํ์ธํ ์ ์๋ค.
kd> !idt
Dumping IDT: 8003f400
โฆ(skip)
2e: 8053f481 nt!KiSystemService
37: 806d3728 hal!PicSpuriousService37
3d: 806d4b70 hal!HalpApcInterrupt
41: 806d49cc hal!HalpDispatchInterrupt
50: 806d3800 hal!HalpApicRebootService
โฆ(skip)
๊ทธ๋ฆผ 20. IDT ๊ตฌ์กฐ
์ด ๊ณผ์ ์ ์์ฝํ๋ฉด, XP ์ด์ ๋ฒ์ ์๋ ์์ฉํ๋ก๊ทธ๋จ์ด API ๋ฅผ ํธ์ถํ๋ฉด Ntdll.dll ์
Zw*, Nt* ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ค. ์ด๋ฌํ ํจ์๋ ๊ฒฐ๊ตญ INT 0x2E ๋ฅผ ํตํด ์ด์์ฒด์ ์๊ฒ
์ปค๋ ๋ชจ๋ ์์ ์ ์์ฒญํ๋ค. ์ด๋ INT 0x2E ๊ฐ IDT ์์ KiSystemService ์ ์ฃผ์๋ฅผ
์ฐธ์กฐํ์ฌ ์งํํ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ํํน ํด์ผ ํ ๋ถ๋ถ์ ๋ฐ๋ก IDT8์ด๋ค. IDT ๊ฐ
๊ฐ๋ฆฌํค๋ 2E ์ ์ฃผ์๋ก ๊ฐ๋ณด๋ฉด ์ค์ ๋ก KiSystemSerive ๊ฐ ์กด์ฌํ๊ณ ์๋ ๊ฒ์ ์๋์
๊ฐ์ด ํ์ธํ ์ ์๋ค.
nt!KiSystemService:
8053f481 6a00 push 0
8053f483 55 push ebp
8053f484 53 push ebx
8053f485 56 push esi
8053f486 57 push edi
8053f487 0fa0 push fs
8053f489 bb30000000 mov ebx,30h
๊ทธ๋ฆผ 21. INT 0x2E ์ ISR(KiSystemService)
7 ์ปค๋ ๋๋ฒ๊น ์ด๋ฏ๋ก ์ ์ ๋ชจ๋ ๋๋ฒ๊น ์ผ๋ก๋ ์ ๊ทผํ ์ ์์ด WinDBG๋ฅผ ์ฌ์ฉํ๋ค.
8 INT 0x2E Hooking์ ๊ฒฐ๊ตญ IDT๋ฅผ ํํน ํ๋ ๊ฒ์ผ๋ก IDT Hooking์ด๋ผ๊ณ ๋ ํ๋ค.
ํ์ด์ง 18 / 27
18 Windows API Hooking
IDT ๋ฅผ ํํน ํ ๊ฒ์ด๋ฏ๋ก ์ฐ์ IDT ์ ์ฃผ์๋ฅผ ์์์ผ ํ๋๋ฐ, IDTR ๋ ์ง์คํฐ์ IDT ์
Base Address์ IDT์ ํฌ๊ธฐ๊ฐ ์ ์ฅ๋์ด ์๋ค. WinDBG๋ฅผ ํตํด ์ ์ ์๋ ๋ฐฉ๋ฒ์ IDTR
๋ ์ง์คํฐ์ ๊ฐ(์ฃผ์)๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋ โ!idtโ๋ฅผ ํตํด ํด๋น ์ฃผ์9๋ฅผ ์์๋ผ ์๊ฐ ์๋ค. IDT ์
Entry ๊ตฌ์กฐ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 8 ๋ฐ์ดํธ์ฉ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ Entry ๊ฐ ๊ฐ๋ฆฌํค๋
ISR์ ์ฃผ์๊ฐ ํ์ 2๋ฐ์ดํธ, ์์ ์ฃผ์ 2๋ฐ์ดํธ๋ก ๋๋์ด์ ธ ์๋ค.
kd> r idtr
idtr=8003f400
kd> !idt
Dumping IDT: 8003f400
kd> dt _KIDTENTRY
ntdll!_KIDTENTRY
+0x000 Offset : Uint2B // ํ์ ์คํ์
+0x002 Selector : Uint2B
+0x004 Access : Uint2B
+0x006 ExtendedOffset : Uint2B // ์์ ์คํ์
๊ทธ๋ฆผ 22. IDT ์ฃผ์์ ๊ฐ ์ํธ๋ฆฌ ๊ตฌ์กฐ
ํ๋์ ์ํธ๋ฆฌ๊ฐ 8 ๋ฐ์ดํธ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค๋ ๊ฒ์ ํ์ธํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ
์ฐพ๊ณ ์ ํ๋ ์ํธ๋ฆฌ๋ 0x2E ๋ฒ์งธ ์ํธ๋ฆฌ์ด๋ฏ๋ก IDT Base Address ์ 0x170 ์ ๋ํ
์์น์ ์กด์ฌํ๊ณ ์๋ค. ์๋ ๊ฒฐ๊ณผ์ ๊ฐ์ด 8003f570 ๋ถํฐ ํด๋น ์ํธ๋ฆฌ๊ฐ ์กด์ฌํ๊ณ ์๋ค.
ํ์ 2 ๋ฐ์ดํธ์ ์์ 2 ๋ฐ์ดํธ๋ฅผ ์กฐํฉํ์ฌ INT 0x2E ์ ISR ์ 8053f481 ์ด๋ผ๋ ๊ฒ์ ์
์ ์๋ค.
kd> db 8003f400 8003fC00
8003f400 9c 01 08 00 00 8e 54 80-14 03 08 00 00 8e 54 80 ......T.......T.
8003f410 3e 11 58 00 00 85 00 00-e4 06 08 00 00 ee 54 80 >.X...........T.
โฆ(skip)
8003f560 80 fc 08 00 00 ee 53 80 - c0 05 08 00 00 ee 54 80 ......S.......T.
8003f570 81 f4 08 00 00 ee 53 80-80 27 08 00 00 8e 54 80 ......S..'....T.
โฆ(skip)
๊ทธ๋ฆผ 23. IDT 0x2E ๋ฒ์งธ Entry
9 Assembly์ ๊ฒฝ์ฐ โsidtโ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ IDT์ ์ฃผ์๋ฅผ ์ ์ ์๋ค.
ํ์ด์ง 19 / 27
19 Windows API Hooking
์ด์ ์ฐ๋ฆฌ๊ฐ ์ด๋ค ์ฃผ์(8003f570)๋ฅผ ํํน ํด์ผ ํ๋์ง ์์์ผ๋, ๋ณธ๊ฒฉ์ ์ธ ํํน์
์งํํด๋ณด์. ์ด๋ฒ ํํน ์ญ์ ํ๋ก๊ทธ๋๋ฐ์ ํตํด ์งํํ๋ ๊ฒ์ด ์๋๋ผ ์๋ฆฌ๋ฅผ ์ดํดํ๊ธฐ
์ํด ์ปค๋ ๋๋ฒ๊ฑฐ WinDBG ๋ฅผ ํตํด ์งํํ ๊ฒ์ด๋ค. ํด๋น 0x2E ์ ISR ์ FFFFFFFF ๋ก
์กฐ์ํ๋ ๊ณผ์ ์ผ๋ก โ0000โ์ผ๋ก ์ฑ์ด ๊ณณ์ ์คํ์ ์ด ์๋ ๋ถ๋ถ์ผ๋ก ๊ตฌ๋ถ์ ์ํด โ0โ์ผ๋ก
์ฑ์ด ๊ฒ์ด๋ค.
kd> !idt 2e // ๊ธฐ์กด 2E์ ISR ํ์ธ
2e: 8053f481 nt!KiSystemService
kd> ed 8003f570 // Windbg๋ฅผ ํตํด ์ง์ ์์
8003f570 0008f481 0000ffff
8003f574 0000ffff ffff0000
kd> !idt 2e // ์กฐ์๋ 2E์ ISR ํ์ธ
2e: ffffffff
kd> db 8003f570 8003f580 // ์กฐ์๋ IDT 2E Entry ํ์ธ
8003f570 ff ff 00 00 00 00 ff ff-80 27 08 00 00 8e 54 80 .........'....T.
๊ทธ๋ฆผ 24. IDT Entry 0x2E ํํน
์ด์ฒ๋ผ IDT ๊ฐ ํํน ๋ ์ํฉ์์ INT 0x2E ๋ฅผ ํตํ ์์คํ ํธ์ถ(System Call)์ด
๋ฐ์ํ๋ฉด ์ฌ์ฉ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋ก ๋์ด๊ฐ ๋ ํํน๋ ์ฃผ์๋ก ๊ฐ๊ฒ ๋๋ค. ์ค์
ํํน๋ ์ด์ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์งํ๋๋ฉฐ, ๋์ IDT ์ ์ฃผ์๋ฅผ ์ป์ ๋ โsidtโ ๋ช ๋ น์ด๋ฅผ
์ฌ์ฉํ์ฌ ์ฃผ์๋ฅผ ์ป๋๋ค. Sidt ๋ช ๋ น์ด๋ IDT ์ ์ฃผ์๋ฅผ ์ ์ฅํ๊ณ ์๋ IDTR ๋ ์ง์คํฐ์
๊ฐ์ ์ฐธ์กฐํ์ฌ ๊ฐ์ ์ป์ด ์จ๋ค. ๋ํ ๋๋ฒ๊ฑฐ๋ฅผ ํตํด ์์ ํ๋ ๊ฒ์ด ์๋๋ผ ํ๋ก๊ทธ๋๋ฐ์
ํตํด ์์ ํ๊ณ ์ ํ ๋, ์ธํฐ๋ฝํธ๋ฅผ ๋นํ์ฑํ(โCLIโ ๋ช ๋ น์ด)ํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํํน์ด
์๋ฃ๋๋ฉด ์ธํฐ๋ฝํธ๋ฅผ ๋ค์ ํ์ฑํ(โSTIโ ๋ช ๋ น์ด) ์์ผ ์ ์์ ์ผ๋ก ๊ตฌ๋๋๊ฒ๋ ํด์ผ ํ๋ค.
4.3 SYSENTER Hooking
์๋์ฐ XP ์ด์์ ๋ฒ์ ์์๋ INT 0x2E ๊ฐ ์๋ SYSENTER ๋ฅผ ์ฌ์ฉํ๋ค. ์์คํ
ํธ์ถ์ด ์์ฒญ๋๋ฉด NTDLL ์ EAX ๋ ์ง์คํฐ์ ํด๋น ์์คํ ํธ์ถ์ ๋ฒํธ๋ฅผ ์ ์ฅํ๊ณ EDX
๋ ์ง์คํฐ์๋ ์ธ์๋ก ์ฌ์ฉ๋ ์ฃผ์๋ฅผ ๋ฃ์ด์ค๋ค. ๊ทธ๋ฆฌ๊ณ SYSENTER ๋ช ๋ น์ ์คํํ์ฌ ์ปค๋
์์ญ์ผ๋ก ๋ค์ด์ค๊ฒ ๋๋๋ฐ, ์ด๋ ๋ฐ๋ก ์ปค๋๋ก ๋ค์ด๊ฐ๋ ๊ฒ์ด ์๋๋ผ ์คํ๋ ์ปค๋์
์ฃผ์(KiFastCallEntry)๋ฅผ SYSENTER_EIP(MSR 0x176 ๋ ์ง์คํฐ)์์ ์ฐธ์กฐํ์ฌ KiFastCallEntry
๋ก ๋์ด๊ฐ๊ฒ ๋๋ ๊ฒ์ด๋ค.
MSR ์ Model-Specific Register ๋ก ๋๋ฒ๊น ์ด๋ ํ๋ก๊ทธ๋จ ์คํ ์ถ์ , ์ปดํจํฐ ์ฑ๋ฅ
๋ชจ๋ํฐ๋ง, ํน์ CPU ๊ธฐ๋ฅ ์ ํ์ ์ฌ์ฉ๋๋ ๊ฐ์ข ์ ์ด ๋ ์ง์คํฐ x86 ๋ช ๋ น์ด์ ์งํฉ์ด๋ค.
ํ์ด์ง 20 / 27
20 Windows API Hooking
์ด๋ฌํ ์งํฉ ์ค MSR 0x176 ์๋ IA_SYSENTER_EIP(KiFastCallEntry)๊ฐ ์กด์ฌํ๊ณ ์์ผ๋ฉฐ,
MSR ์ ์ ๊ทผํ๊ณ ์ ํ ๋๋ โrdmsrโ, โwrmsrโ ๋ช ๋ น์ด๋ฅผ ํตํด ์ ๊ทผํ ์๊ฐ ์๋ค. ์ฐ๋ฆฌ๊ฐ
์ฐพ์์ผ ํ ๊ฒ์ MSR 0x176์ด๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์๊ฐ ์๋ค.
kd> rdmsr 176
msr[176] = 00000000`8053f540
kd> u 8053f540
nt!KiFastCallEntry:
8053f540 b923000000 mov ecx,23h
8053f545 6a30 push 30h
โฆ(skip)
๊ทธ๋ฆผ 25. Read MSR 0x176
MSR 0x176์ด ์ ๋๋ก KiFastCallEntry๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๋ฐ๋ก ์ด
๋ถ๋ถ์ ๊ฐ์ ๋ฐ๊พธ์ด SYSENTER ๋ฅผ ํํน10 ํ ์ ์๋ค. MSR ๋ ์ง์คํฐ๋ฅผ ์ฝ์ ๋๋ rdmsr
๋ช ๋ น์ด๋ก ์ฝ์๋ค๋ฉด, MSR ๋ ์ง์คํฐ์ ๊ฐ์ ๋ณ๊ฒฝํ ๋๋ โwrmsrโ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์๋์ ๊ทธ๋ฆผ์ ๋ณด์.
kd> wrmsr 176 11111111 // MSR 0x176์ ๊ฐ์ ๋ณ๊ฒฝ
kd> rdmsr 176 // MSR 0x176 ๊ฐ ๋ณ๊ฒฝ ํ์ธ
msr[176] = 00000000`11111111
๊ทธ๋ฆผ 26. Write MSR 0x176
์ค์ ๋ก ์์ ๊ฐ์ด ์ณ์ง ์์ ์ฃผ์๋ก ๋ณ๊ฒฝํ๋ฉด ๋น์ฐํ ๋ธ๋ฃจ ์คํฌ๋ฆฐ์ ๋ง์ดํ ์ ์์
๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด abexโsCrackMe01.exe ๋ฅผ ๊ฐ์ง๊ณ ์ง์ ์ฝ๋์ ํ๋ฆ์ ์กฐ์ํ์ฌ ๋ณด์.
์ฐ์ ์๋์ ์ฝ๋๋ ์ ์์ ์ธ ํ๋ฆ์ ๋ํ๋ธ๋ค. Ntdll.dll ์ ํจ์๋ฅผ ์ถ์ ํ์ฌ ๋ค์ด๊ฐ๋ณด๋ฉด
KiFastSystemCall ์ด๋ผ๋ ๋ถ๋ถ์ ๋ณผ ์ ์๋๋ฐ ์ด๋ SYSENTER ๋ช ๋ น์ด๋ฅผ ํตํด
KiFastCallEntry ๋ก ๊ฐ๊ธฐ ์ํ ๋ถ๋ถ์ด๋ค. KiFastSystemCall ์๋ SYSENTER ๋ช ๋ น์ด๊ฐ
์์นํ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ntdll!KiFastSystemCall:
001b:7c93e4f0 8bd4 mov edx,esp
001b:7c93e4f2 0f34 sysenter
10 SYSENTER Hooking์ ๊ฒฐ๊ตญ MSR์ ํํน ํ๋ฏ๋ก MSR Hooking์ด๋ผ๊ณ ๋ ํ๋ค.
ํ์ด์ง 21 / 27
21 Windows API Hooking
kd> rdmsr 176 // MSR 0x176์ ์ฃผ์๋ฅผ ํ์ธ
msr[176] = 00000000`8053f540
kd> bp 8053f540 // MSR 0x176์ ์ฃผ์์ BP ์ค์
kd> p // Kernel์ KiFastCallEntry ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ง์
Breakpoint 3 hit
nt!KiFastCallEntry:
8053f540 b923000000 mov ecx,23h
๊ทธ๋ฆผ 27. ์ ์์ ์ธ SYSENTER ์ง์
์ ์์ ์ธ SYSENTER ์ ํ๋ฆ์ wrmsr ์ ํตํด ์กฐ์ํด๋ณด์. MSR 0x176 ๋ฅผ 11111111
๋ก ์์ ํ๋ฏ๋ก ๋น์ ์์ ์ธ ํ๋ฆ์ผ๋ก ๋์ํ๋๋ก ์์ ํ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ๊ณผ ๊ฐ์ด
SYSENTER ๋ช ๋ น์ด๋ฅผ ์คํํ๊ธฐ ์ ์ ์๋ MSR 0x176(KiFastCallEntry)์ ์ฃผ์์ BP ๋ฅผ
์ค์ ํ ๋ค์ ์งํ์ ํด๋ณด์. ์ ์์ ์ธ ํ๋ฆ์ด๋ผ๋ฉด KiFastCallEntry ์์ ๋ฉ์ถ์ด์ผ ํ์ง๋ง,
์กฐ์๋ MSR 0x176์ด ๊ฐ๋ฆฌํค๋ ์ฃผ์ 11111111๋ก ํ๋ฆ์ด ๋ฐ๋์๋ค.
ntdll!KiFastSystemCall:
001b:7c93e4f0 8bd4 mov edx,esp
001b:7c93e4f2 0f34 sysenter
kd> bp 8053f540 // ๊ธฐ์กด KiFastCallEntry์ BP ์ค์
kd> wrmsr 176 11111111 // MSR 0x176 ์ฃผ์ ์กฐ์
kd> p // ์กฐ์ํ ์ฃผ์๋ก ์ด๋
Access violation - code c0000005 (!!! second chance !!!)
11111111 ?? ???
๊ทธ๋ฆผ 28. ํํน ๋ SYSENTER ์ง์
์ด๋ฌํ ๋ฐฉ๋ฒ์ ํตํด SYSENTER Hooking(๋๋ MSR Hooking)์ ์งํํ ์ ์์ผ๋ฉฐ,
์ค์ 11111111 ์ ํํน ํจ์๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ์์คํ ํธ์ถ์ด ๋ฐ์ํ ๋๋ง๋ค ํํน ํจ์๋ฅผ
์ง๋๊ฐ๊ฒ ๋๋ค. ๊ณต๊ฒฉ์์ ์ ์ฅ์์ ์ด๋ฌํ System Call Hooking์ ์งํํ๋ฉฐ ํํน ํจ์์
๊ณผ๋ํ ์กฐ๊ฑด์ ๊ฑธ์ด๋๋๋ค๋ฉด ์์คํ ์ฑ๋ฅ์ด ํฌ๊ฒ ํ๋ฝํ์ฌ ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ์์์ฐจ๋ฆด ์
์์ ๊ฒ์ด๋ค.
ํ์ด์ง 22 / 27
22 Windows API Hooking
4.4 SSDT Hooking
SSDT(System Service Dispatch Table)๋ ์์คํ ํธ์ถ์ ์์ฒญํ ๋ค, ์ ๋ฌ๋๋ ์๋น์ค
๋ฒํธ์ ๋ง๋ ํจ์๋ฅผ ์ฐพ์ ๋ ์ฐธ์กฐํ๋ค. ์ ๊ณผ์ ์์ ์์คํ ํธ์ถ์ ์์ฒญํ๋ ๋ ๊ฐ์ง
๋ช ๋ น์ด(INT 0x2E ์ SYSENTER)์ ๋ํ์ฌ ์์๋ณด์๋๋ฐ, ๊ฒฐ๊ตญ ๋ ๋ช ๋ น์ด ๋ชจ๋
KiSystemService(System Service Dispatcher)๋ฅผ ํธ์ถํ๋ค๊ณ ์ธ๊ธํ์๋ค.
KiSystemService ๊ฐ ํธ์ถ๋ ๋ EAX ์๋ ์ฌ์ฉ์ ์์ญ์์ ์์ฒญํ ์๋น์ค ๋ฒํธ๊ฐ
์ ์ฅ๋์ด ์์ผ๋ฉฐ, EDX์๋ ์ด๋ฌํ ์๋น์ค์ ์ฌ์ฉ๋ ์ธ์๊ฐ ์ ์ฅ๋์ด์๋ค. ์ด๋ฌํ ์์คํ
ํธ์ถ ๋ฒํธ(EAX)์ ๋ง๊ฒ KeServiceDescriptorTalbe ์์ Native API ์ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์จ๋ค.
๊ทธ ํ ์์คํ ํธ์ถ์ ์ข ๋ฃํ๊ณ ๋ค์ ์ฌ์ฉ์ ๋ชจ๋๋ก ๋ณต๊ทํ๊ฒ ๋๋๋ฐ, ์ด๋ฌํ ๊ณผ์ ์
์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
๊ทธ๋ฆผ 29. ์ ์ฒด์ ์ธ ์์คํ ํธ์ถ ๊ณผ์
๊ฒฐ๊ตญ SSDT(KiServiceTable)์์ ์๋น์ค ํธ์ถ ๋ฒํธ์ ๋ง๋ ์ฃผ์๋ฅผ ์ป์ ๋ค์ ์ด๋ฅผ
ํธ์ถํ๋ ํํ๋ก ์งํ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด SSDT Hooking ์ ์ด๋ ๋ถ๋ถ์ ํํนํด์ผ
ํ๋ ๊ฒ์ผ๊น? ์ ๊ทธ๋ฆผ์ ๊ณผ์ ์์ ์ค๋ช ํ์๋ฉด ๋ฐ๋ก GetFuncAddress ๊ณผ์ ์์
ํํนํ๋ค๊ณ ํ ์ ์๋ค. SYSENTER ๋ฅผ ํตํด KiFastCallEntry ๋ก ์ง์ ํ ํ ์๋น์ค ๋ฒํธ์
ํ์ด์ง 23 / 27
23 Windows API Hooking
๋ง๋ ์๋น์ค ๋ฃจํด์ SSDT ์์ ์ป์ด์จ๋ค. ๋ฐ๋ผ์ SSDT ์ ์กด์ฌํ๊ณ ์๋ ๊ฐ ์๋น์ค
๋ฃจํด์ ์ฃผ์๋ฅผ ์กฐ์ํ๋ฏ๋ก ํํน์ ์งํํ ์ ์๋ค. ์ด๋ฅผ ํํํ ๊ทธ๋ฆผ์ ์๋์ ๊ฐ๋ค.
๊ทธ๋ฆผ 30. SSDT Hooking ๊ณผ์
ํด๋น ์์คํ ํธ์ถ์ ์๋น์ค ๋ฃจํด์ ๊ฐ์ง๊ณ ์ค๋ ๊ณผ์ ์์ SSDT ๋ฅผ ์ฐธ์กฐํ๋๋ฐ,
SSDT ์ ํด๋น ๋ฒํธ๊ฐ ๋ํ๋ด๋ ์ฃผ์๋ฅผ ํํนํ๋ฏ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํ๋ฆ์ผ๋ก ์กฐ์ํ ์
์๋ค. ์ ๊ทธ๋ฆผ์ ์๋ก ์์คํ ํธ์ถ์ด ์์ฒญ๋์์ ๋ ์๋น์ค ๋ฒํธ๊ฐ ์ ์ฅ๋์ด ์๋
EAX ์ ๊ฐ์ด 0xAD ๋ผ๋ฉด SSDT ์์ 0xAD ๊ฐ ๊ฐ๋ฆฌํค๋ ์๋น์ค ๋ฃจํด์ ์ฃผ์
0xCCCCCCCC ๊ฐ ๋ฐํ๋์ด ์ด๋ฅผ ํธ์ถํ๋ค. ํ์ง๋ง ๋ง์ฝ ๊ณต๊ฒฉ์๊ฐ SSDT ๋ฅผ ํํนํ์ฌ
0xDDDDDDDD ๋ก ์๋น์ค ๋ฃจํด์ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ์๋ค๋ฉด, ์์คํ ํธ์ถ 0xAD ๊ฐ ๋ฐ์ํ
๋๋ง๋ค 0xDDDDDDDD๋ฅผ ์ง๋๊ฐ๊ฒ ๋๋ค.
KeServiceDescriptorTable ์ ๋ค ๊ฐ์ง ํญ๋ชฉ์ ๊ฐ์ง๊ณ ์๋ ๊ตฌ์กฐ์ฒด๋ก ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด
๋ํ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ผ๋ฉฐ ์ค์ํ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ๊ณผ ๋ค ๋ฒ์งธ ํญ๋ชฉ์ ๋ํ์ฌ
์์๋ณด์. ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ KiServiceTable(SSDT)์ ์ฃผ์๋ฅผ ๋ด๊ณ ์๋ ํญ๋ชฉ์ผ๋ก ์ด ๊ฐ์
ํตํด SSDT ์ ์ ๊ทผํ์ฌ Native API ์ ์ฃผ์๋ฅผ ์ป์ ์๊ฐ ์์ผ๋ฉฐ. ๋ค ๋ฒ์งธ ํญ๋ชฉ์
ParamTableBase ๋ KiArgumentTable ์ ์ฃผ์ ๊ฐ์ ๋ด๊ณ ์๋๋ฐ, ์ด๋ค ๊ฐ๊ฐ์ SSDT ์
Native API์ ์ผ ๋ ์ผ๋ก ๋์ํ๋ค.
ํ์ด์ง 24 / 27
24 Windows API Hooking
kd> dd KeServiceDescriptorTable
80554fa0 80503b8c 00000000 0000011c 80504000 //ServiceDescriptor[0]
80554fb0 00000000 00000000 00000000 00000000 //ServiceDescriptor[1]
80554fc0 00000000 00000000 00000000 00000000 //ServiceDescriptor[2]
80554fd0 00000000 00000000 00000000 00000000 //ServiceDescriptor[โฆ]
โฆ(skip)
๊ทธ๋ฆผ 31. KeServiceDescriptorTable ๊ตฌ์กฐ11
SSDT ์ ์ฃผ์๋ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ๊ฐ์ธ 0x80503b8c ๋ก ํด๋น ์ฃผ์๋ฅผ ํ์ธํด๋ณด๋ฉด ์ฌ๋ฌ
์ฃผ์๋ค์ด ์กด์ฌํ๊ณ ์๋ ๊ฒ์ ์๋์ ๊ฐ์ด ํ์ธํ ์ ์๋ค. ๊ฐ ๊ฐ๋ค์ Native API ์
์ค์ ์ฃผ์์ด๋ฉฐ ํด๋น ์ฃผ์๋ฅผ ํ์ธํด๋ณด๋ฉด Native API์ ์ด๋ฆ์ ๊ฐ์ด ๋ณผ ์ ์๋ค.
kd> d 80503b8c // SSDT Base
80503b8c 8059b948 805e8db6 805ec5fc 805e8de8
80503b9c 805ec636 805e8e1e 805ec67a 805ec6be
80503bac 8060ddfe 8060eb50 805e41b4 805e3e0c
80503bbc 805ccde6 805ccd96 8060e424 805ad5ae
80503bcc 8060da3c 8059fdbe 805a7a00 805ce8c4
โฆ(skip)
kd> u 8059b948
nt!NtAcceptConnectPort:
8059b948 689c000000 push 9Ch
8059b94d 6838b14d80 push offset nt!_real+0x128 (804db138)
8059b952 e8b9e5f9ff call nt!_SEH_prolog (80539f10)
๊ทธ๋ฆผ 32. SSDT ๋ฅผ ํตํ Native API ์ ๊ทผ
์์คํ ํธ์ถ์ ํตํด ์ปค๋ ๋ชจ๋๋ก ์ง์ ํ ๋ EAX ์๋ ์์ฒญํ ์๋น์ค ๋ฒํธ๋ฅผ
์ ์ฅํ๊ณ ์๊ณ EDX ์๋ ์ธ์๋ก ์ฌ์ฉ๋ ํฌ์ธํฐ๋ฅผ ํฌํจํ๊ณ ์๋ค๊ณ ํ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก
์ด๋ ํ Native API ๋ฅผ ์์ฒญํ๋์ง ์๊ธฐ ์ํด์ SSDT ์ ์ฃผ์์ [EAX*4]๋ฅผ ๋ํด์ฃผ๋ฉด ๊ทธ
์ฃผ์๋ฅผ ์ ์ ์๋ค. ์ค์ SSDT Hooking ๋ ์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์งํํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด์
์ค์ SSDT์ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํด๋ณด์.
11 Windows ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค ๊ฐ์ SSDT ๋ฅผ ๊ฐ์ง๋ง, Native ํจ์๋ฅผ ์ํ ๊ฒ๊ณผ
win32k.sys์ GUI ํจ์๋ฅผ ์ํ SSDT๋ง์ ์ฌ์ฉํ๋ค.
ํ์ด์ง 25 / 27
25 Windows API Hooking
SSDT๋ฅผ ํตํด ์ ๊ทผํ ์ ์๋ Native API ํจ์ 5๊ฐ์ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํด๋ณด์. WinDBG๋ฅผ
์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํน์ ์ฃผ์ ๊ฐ์ ์์ ํ๊ธฐ ์ํ โedโ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์์ผ๋ฉฐ, ๊ธฐ์กด์
์ฃผ์๋ฅผ ์๋ฌด ์๋ฏธ ์๋ ๊ฐ๋ค๋ก ๋ณ๊ฒฝํ์๋ค. ๊ทธ ํ SSDT ๋ฅผ ํ์ธํด๋ณด๋ฉด ์ ๊ทธ๋ฆผ 32 ์์
ํ์ธํ ์ ์๋ ์ฃผ์๋ค์ด ๋ด๊ฐ ์์ ํ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
kd> ed 80503b8c
80503b8c 8059b948 ffffffff
80503b90 805e8db6 00000000
80503b94 805ec5fc ffffffff
80503b98 805e8de8 00000000
80503b9c 805ec636 ffffffff
80503ba0 805e8e1e 11111111
kd> d 80503b8c
80503b8c ffffffff 00000000 ffffffff 00000000
80503b9c ffffffff 11111111 805ec67a 805ec6be
80503bac 8060ddfe 8060eb50 805e41b4 805e3e0c
80503bbc 805ccde6 805ccd96 8060e424 805ad5ae
๊ทธ๋ฆผ 33. SSDT Hooking
์ด๋ ๊ฒ ํํน์ ํ๋ฉด ํด๋น Native API ๊ฐ ์์ฒญ๋ ๋๋ง๋ค ํํน๋ ์ฃผ์๋ก ๋์ด๊ฐ๊ฒ ๋๋ค.
์ ์ค์ต์ ์์ฃผ ๊ทน๋จ์ ์ธ ์๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๊ณผ์ ์ผ๋ก ๋ฐ๋ก ๋ธ๋ฃจ ์คํฌ๋ฆฐ์ด ๋ํ๋๋ค.
์ค์ ํํน ๊ณต๊ฒฉ์ ์งํํ๊ธฐ ์ํด์ ๋ฉ๋ชจ๋ฆฌ ์ฐ๊ธฐ ๋ณดํธ(Write Protect)๋ฅผ ํด์ ํ๋ ์์ ์
์ถ๊ฐํด์ผ ํ๋ฉฐ, ๋งคํฌ๋ก์ ๊ฐ์ ๋ฐฉ์์ ํตํด ๊ณต๊ฒฉ์ ์งํํ๋ค.
ํ์ด์ง 26 / 27
26 Windows API Hooking
5 Conclusion
์ฌ์ฉ์ ์์ญ ํํน๊ณผ ์ปค๋ ์์ญ ํํน์ ๋ํด ๋๋ฒ๊ฑฐ๋ฅผ ํตํด ์ ๊ทผํด๋ณด๋ฉฐ ์ด๋ป๊ฒ
ํํน์ด ์ด๋ฃจ์ด์ง๋์ง ์์๋ณด์๋ค. ์ค์ ๊ณต๊ฒฉ์ ํ๋๋ฐ ์์ด ๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค๋
ํ๋ก๊ทธ๋๋ฐ์ ํตํด ์ฝ๊ฒ ๊ณต๊ฒฉ์ด ์ด๋ฃจ์ด์ง ์ ์๋๋ก ํ๋ค. ๊ทธ๋ ๊ธฐ์ ๋ค๋ฅธ ์ฌ๋๋ค์ ๊ธ
๋๋ถ๋ถ์ด ์ด๋ฌํ ํ๋ก๊ทธ๋๋ฐ์ ์ด์ ์ ๋ง์ถ๊ณ ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ์ค๊ณํ๋์ง, ์ฝ๋๊ฐ
์๋ฏธํ๋ ๊ฒ์ด ์ด๋ค ๋ด์ฉ์ธ์ง ์ ์ค๋ช ํ๊ณ ์์ผ๋ฏ๋ก ์ดํ์ ์ฝ๋์ ๊ด๋ จ๋ ๋ด์ฉ์
ํ์ตํ๋ฉด ๋ ์ข์ ๊ฒ์ด๋ค.
ํ์๋ ์ฝ๋๋ฅผ ํตํด ์ด๋ป๊ฒ ๋์ํ๊ฒ ๊ตฌ๋ ์๊ฐํด๋ณผ ์ ์์์ง๋ง ์ง์ ๋๋ฒ๊ฑฐ๋ฅผ ํตํด
์ ๊ทผํด๋ณผ ๋๋ง๋ค โ์ฌ๊ธฐ๋ฅผ ์์ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?โ๋ผ๋ ๋ฑ ์ข ๋ ๊น์ด ์๋ ์๊ฐ์ ํด๋ณผ
์๊ฐ ์์๋ค. ์ดํ์๋ ์ฌ๊ธฐ์ ๋ค๋ฃจ์ง ๋ชปํ ํํน๋ค์ ๋ํ์ฌ ์ถ๊ฐ๋ก ํ์ตํด๋ณผ ๊ฒ์ด๋ฉฐ
์๋์ฐ ์ด์์ฒด์ ์ ๊ด๋ จ๋ ๋ด์ฉ์ ๋ ๊ณต๋ถํด๋ณด์์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ ์๊ฐ ์์๋ค.
ํ์ด์ง 27 / 27
27 Windows API Hooking
6 Reference
[+] ๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ(์ ์ฑ ์ฝ๋ ๋ถ์๊ฐ์ ๋ฆฌ๋ฒ์ฑ ์ด์ผ๊ธฐ) |์ด์น์|์ธ์ฌ์ดํธ|2012.09.30
[+] http://blog.naver.com/ikariksj/140056467421
[+] http://www.codeproject.com/Articles/2082/API-hooking-revealed
[+] http://www.reversecore.com/23
[+] http://yokang90.tistory.com/58
[+] http://xcoolcat7.tistory.com/542
[+] http://egloos.zum.com/maxtrain/v/2775961
[+] http://kernel32.tistory.com/15
[+] https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx
[+] https://blogs.msdn.microsoft.com/kocoreinternals/2009/03/16/idt-isr/
[+] https://en.wikipedia.org/wiki/Model-specific_register
[+] http://amur.tistory.com/entry/์ปค๋๋ชจ๋์์-์ ์ ๋ชจ๋-๋ถ์ํ๊ธฐ