Notice
Recent Posts
관리 메뉴

Hacking Arts

메세지 후킹 (Message Hooking) - 1 본문

Reversing/Hooking

메세지 후킹 (Message Hooking) - 1

Rakehell 2014. 9. 19. 03:23

-윈도우에서 메세지란?

일단 메세지 후킹에 대해 작성하기전에 메세지에 대해 알아보자.

어떤 책에서 읽은 내용인데 윈도우는 이벤트 지향,메세지 기반 운영체제이다. 

여기서 말하는 메세지란 마우스를 움직이거나 키보드로 입력하는 행위라고 할 수 있다.


윈도우의 메시지 처리 과정은

 1

이벤트 발생

 2

메세지 전송 

 3

메세지 처리 

 4

화면 출력 

이런식으로 이루어진다고 생각하면 된다.

이벤트는 주로 입력장치(키보드,마우스)에서 발생되면 이를 CPU에 알리기 위해 메세지를 생성후 전송하고 이를 처리하여 다시 출력장치(모니터,프린터)로 결과 값을 보여주는 등의 과정이 윈도우에서 메세지 처리 방식이다.


메세지 처리하는 두가지 방법

1.에플리케이션이 가지고 있는 메시지 큐에 메세지를 추가하는 방법

2.에플리케이션의 윈도우 프로시저에 직접 메시지를 전달하는 방법


[그림 1 윈도 메시지 전달 흐름]


메시지 큐는 FIFO(First In First Out)구조로 동작하며 임시로 메시지를 저장한다. 저장된 메세지들은 WinMain함수에서 큐에 저장된 순서대로 처리되며 WinMain함수는 지속적으로 메시지 큐를 검사하여 적절한 윈도에 메시지를 전달하고 그메세지를 메세지 큐에서 삭제한다.애플리케이션의 각 윈도우들은 메세지를 실제로 처리해 주는 윈도우 프로시저라는 것을 가지고 있다.


위의 내용을 읽고 명확하게 이해가 가지 않아 찾아봤다. 일단 OS에 자체로 가지고 있는 시스템 큐라는 메세지 저장소가 존재한다. 여기에 저장된 메세지들을 어플리케이션마다 가지고 있는 어플리케이션 큐로 넘겨준다. 아래 그림은 명확하게 그린 그림이다. 책중에 API programing 혜지원 책이 있는데 이 책에 그림이 명확하게 나와있어 따라 그렸습니다.

[그림 2 윈도우 이벤트 발생시 그림]


편집기 프로그램 내부를 WinMain과 WndProc같은 함수를 이용하여 프로그래밍을 통해 구현하여 사용된다. 

http://gatsby-study.tistory.com/category/Programing/API%20Programing

위 URL쪽에 API 프로그래밍에 대해 읽으면 이해가 될 겁니다.


-윈도우 메시지 후킹이란?

[그림 3 메세지 훅 원리]


(1) 정상적인 경우 메시지 처리 흐름

1. 키보드 입력 이벤트가 발생하면 WM_KEYDOWN 메시지가 [OS message queue(시스템 큐)]에 추가된다.

2. OS는 어느 응용프로그램에서 이벤트가 발생하였는지 파악해서 메시지를 해당 [응용프로그램(application message queue(어플리케이션 큐)]에 추가한다.

3. 응용프로그램은 자신의 [응용프로그램(application message queue(어플리케이션 큐)]를 모니터링 하고 있다가 WM_KEYDOWN 메시지가 추가된 걸 확인 후 처리한다.


이때 메시지 hook chain은 2,3번 사이에 설치되어 응용프로그램이 받기전에 message를 받아서 내용을 보게 됩니다.

hook chain의 경우 message 삭제,수정,도청 등이 가능하다.


-SetWindwosHookEx()


HHOK SetWindowsHookEx(

int idHook, //Hook type

HOOKPROC lpfn, //Hook Procedure

HINSTANCE hMod, //위 Hook Procedure가 속해있는 DLL 핸들

DWORD dwThreadId

); 


Hook Procedure는 운영체제가 호출해주는 Callback function 입니다.

메시지 훅을 걸때 Hook Procedure 는 DLL 내부에 존재해야 하며 그 DLL의 인스턴스 핸들이 바로 hMod입니다.

메시지 훅은 global hook 이라고 해서 실행중인 모든 프로세스에게 영향을 미친다.


-참고문서 / 사이트

http://maxtrain.egloos.com/viewer/2775961

http://www.acrosoft.pe.kr/lecture/component1-8.htm

http://softwareji.tistory.com/56

API프로그래밍 / 이창현 / 혜지원

리버싱 핵심원리 / 이승원 / 인사이트

'Reversing > Hooking' 카테고리의 다른 글

메세지 후킹 (Message Hooking) - 2  (0) 2014.09.20
후킹 (Hooking)  (0) 2014.09.19