본문 바로가기

0x00 /0x01 Reversing

- Windows 메시지 후킹

# Windows 메시지 후킹 정리.





1. Hook (훅)

- 갈고리, 낚시바늘과 같은 뜻을 의미하며, Windows 메시지 후킹에서 의미하는 훅의 의미는 정보를 엿보거나 가로채는 경우를

  Hook이라는 말을 사용합니다.


# 중간에서 오고가는 정보를 엿보거나 가로채기 위해 초소를 설치하는 일을 훅(Hook)을 건다라고 하고, 실제로 정보를 엿보고 

  조작하는 행위를 후킹(Hooking)한다 라고 말합니다.




2. 메시지 훅

- Windows 운영체제는 사용자에게 GUI(Graphic User Interface)를 제공해주고, 사용자는 제공받은 GUI를 이용하여 하고자하는

  행위를 하게 됩니다. 예를 들면, 게임을 한다던가, 음악을 듣는다던가 이러한 행위는 Windows 운영체제에서 Event Driven 방식

  처리를 하게 됩니다. 즉 사용자가 게임을 하기 위해 게임프로그램을 더블클릭하여 실행하는 등 이러한 행위들이 이벤트를 발생

  시켜서 OS가 그 이벤트에 맞는 메시지를 해당 응용프로그램(게임프로그램)으로 통보하여 응용프로그램이 처리를 하는 방식입니다.

  메시지 훅이란, 사용자의 행위로 이벤트가 발생되어 OS가 응용프로그램으로 보내는 메시지를 엿보는 것을 말합니다.





[ 그림 1 - 메시지 후킹 동작 원리 ]


- 위 그림은 리버싱 핵심원리에 나와있는 메시지 후킹 동작원리 그림인데요. 공부할겸 그려봤습니다.


- 우선 그림을 보면 윗쪽이 OS message queue 입니다. 여기에는 사용자가 어떠한 행위를 했을 때, 이벤트가 발생하게 되고, 이벤트 발생으로

  인하여 OS에서 응용프로그램으로 보낼 메시지들이 들어가는 큐입니다. 


- 사용자가 키보드 입력을 했을 경우로 예를 들어보겠습니다.

1. 키보드 입력 이벤트가 발생하면 WM_KEYDOWN 메시지가 [OS message queue]에 추가가 됩니다.

2. OS는 어느 응용 프로그램에서 이벤트가 발생했는지 파악해서 [OS message queue]에서 메시지를 꺼내어 해당 응용 프로그램의

   [application message queue]에 추가합니다.

3. 응용프로그램(메모장)은 자신의 [application message queue]를 모니터링하고 있다가 WM_KEYDOWN 메시지가 추가된 걸 확인하고 

   해당 event handler를 호출합니다.


바로 위에서 예를 들었는 내용이 일반적인 경우의 Windows 메시지 흐름에 대한 내용입니다.


이러한 Windows 메시지 흐름에서 키보드 메시지 훅이 설치되었다면 OS 메시지 큐와 응용 프로그램 메시지 큐 사이에 설치된 훅 체인에 있는 

키보드 메시지 훅들이 응용 프로그램보다 먼저 해당 메시지를 볼 수 있습니다.


이러한 메시지 훅은 단순히 엿보는 기능뿐만 아니라 메시지 자체의 변경도 가능하며 또한 메시지를 가로채서 해당 응용프로그램으로 보내지

않게 할 수도 있습니다.


또한 이러한 메시지 훅 기능은 Windows 운영체제에서 제공하는 기본 기능입니다.







# 참고 도서 : 리버싱 핵심원리