Information Security

Windows Message Hooking 본문

Reverse Engineering

Windows Message Hooking

leeeeye321 2019. 6. 17. 20:02

[ DLL Injection - Windows Message Hooking ]

Windows는 Event Driven 방식으로 동작한다. 이벤트가 발생하면 OS는 응용프로그램에게 메시지를 보낸다.

이 메시지가 이동하는 중간에 엿보거나 가로채가는 것을 Message Hook이라고 한다.

메시지 후킹은 DLL 인젝션 기법의 하나로 사용된다.


아래의 파일을 이용하여 후킹 실습을 진행한다.

(리버싱 핵심 원리 https://reversecore.com/104)

HookMain.exe은 KeyHook.dll을 최초로 로딩한 후, SetWindowsHookEx()을 이용하여 훅을 설치하는 프로그램이다.


SetWindowsHookEX()는 훅을 설치하는 API이고, 정의는 위와 같다.


KeyHook.dll에서 확인한 SetWindowsHookEx() API의 호출이다. 첫 번째 파라미터 idHook(훅 타입)의 값은 WH_KEYBOARD로, 키 입력 메시지를 모니터하여 훅을 설치한다.


KeyHook.dll은 내부에 훅 프로시저가 존재한다. 이 dll의 프로시저는, notepad.exe의 메시지를 가로채도록 프로그래밍되어 있다. 키보드 입력이 발생하면 프로세스 이름을 확인하고, notepad.exe(DEF_PROCESS_NAME)과 같다면 1을 리턴하여 KeyboardProc() 함수를 종료시킨다. 결과적으로 키보드 메시지는 notepad 프로세스에게 전달되지 못하여 화면에 아무것도 출력되지 않을 것이다.

이제 이 파일들로 실습을 해봅시다.


HookMain.exe를 실행하면, 시스템에 훅이 설치된다.  

설치 후 메모장(notepad.exe)를 실행하고, 키보드를 입력해본다. 인터넷 익스플로러(iexplore.exe)도 실행하고 입력을 발생시켰다. 이제 OS가 이 프로세스들에게 Keyhook.dll을 강제로 로딩했을 것이다.

 

Process Explorer에서 해당 프로세스에게 KeyHook.dll이 인젝션된 것을 확인할 수 있다.


notepad.exe를 열어서 입력해보면, 메시지가 출력되지 않는다. 


q를 눌러 후킹을 종료시킨다.


후킹이 종료되며 dll이 언로딩된 것을 확인했다.


  

'Reverse Engineering' 카테고리의 다른 글

DLL Ejection  (0) 2019.06.21
DLL Injection - Remote Thread 생성 & 레지스트리 이용  (0) 2019.06.20
EAT(Export Address Table)  (0) 2019.06.12
IAT(Import Address Table)  (0) 2019.06.12
PE File Format  (0) 2019.06.12