[C/C++] 윈도우 메시지 가로채기 기법 (windows message hooking)
윈도우 개발 기법 중 하나가 후킹이라는 기법이 있습니다. 생각보다 간단하게 제어를 할 수 있다는 장점이 있습니다.
거기다가 해당 기법은 MSDN에서 제공되는 공식적인 기술이기 때문에 MSDN 문서도 존재합니다.
https://docs.microsoft.com/en-us/windows/win32/winmsg/hooks
Windows Message Hooking?
후킹이 뭐냐 하면 내가 만든 프로그램을 시스템 또는 다른 프로그램에 SPY로 심어두는 것을 말합니다.
예를 들어 마우스 메시지를 후킹 한다고 했을 때 마우스의 클릭이벤트 메시지가 발생한 경우 SPY를 통해 먼저 알아채고 시스템으로 전달하는 것입니다.
이때 만약 Left Click Message를 Right Click Message로 다른 정보를 전달한다던지 아예 클릭을 안 했다고 시스템에 전달을 하는 등의 행위를 할 수 있도록 하는 기법 이 바로 후킹입니다.
마우스 메시지뿐만 아니라 키보드 메시지 후킹을 하여 키로그를 작성한다던지, 기타 메시지를 모두 후킹 하여 처리를 할 수도 있습니다.
WIndows Message Hooking 활용 범위
개발자라면 많이들 사용하는 SPY++ 프로그램 등이 해당 기법을 이용하여 개발되어있습니다.
그리고 제가 만들어 사용중인 마우스 제스처 프로그램이 있습니다. 이부분은 추후 차근차근 설명 드리며 함께 만들어보겠습니다.
주의사항
위의 그림에서 보면 알 수 있듯이 OS의 Message Queue와 Application Message Queue 사이에서 행위를 하기 때문에 EXE에서 구현하는 형태가 아닌 DLL에서 후킹이 구현되어야 합니다.
즉, DLL을 일반적으로 DLL을 로드해야 하기에 EXE, DLL 모두 필요하게 됩니다.
SetWindowsHookExA
HHOOK SetWindowsHookExA( // Hooking 설치
__in int idHook, // HOOK TYPE
__in HOOKPROC lpfn, // HOOK PROCEDURE
__in HINSTANCE hmod, // DLL INSTANCE HANDLE
__in DWORD dwThreadId
);
BOOL UnhookWindowsHookEx( // Hooking 해제
__in HHOOK hhk
);
EXE에서는 DLL을 LOAD하기만 하고 실제 DLL에서 SetWindowsHookExA API를 호출하여 후킹을 설치하게 됩니다.
만약 작업이 끝났다면 UnhookWindowsHookEx를 이용하여 반드시 언훅을 하도록 합니다.
https://docs.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-setwindowshookexa
앞으로 후킹을 이용하여 함께 프로그램을 만들어보겠습니다.
기대해주세요!
'⌨ DEVELOPMENT > WIndows Hooking' 카테고리의 다른 글
[C++] 최고의 API Hooking Library MS Detours. (1) | 2019.12.07 |
---|---|
[Hooking] dll injection을 이용하여 다른 프로세스에 dll 로드하기 (0) | 2019.11.16 |
[C/C++] 키보드 메시지 후킹을 이용한 키로거 만들기 (6) | 2019.07.27 |
[C/C++] 윈도우 마우스 후킹으로 제스처 인식 프로그램 만들기 (마무리) (2) | 2019.07.25 |
[C/C++] 윈도우 마우스 후킹으로 제스처 인식 프로그램 만들기 (마우스 이동 방향 및 각도 구하기) (0) | 2019.07.23 |
[C/C++] 윈도우 마우스 후킹으로 제스처 인식 프로그램 만들기 (마우스 이동거리 계산하기) (2) | 2019.07.23 |
[C/C++] 윈도우 메시지 후킹 마우스를 지배하는자 (windows mouse message hooking) (1) | 2019.07.21 |
[C/C++] 윈도우 후킹을 하기 전에 알아야 할 DLL Main에서 하면 안되는 5가지 작업 (2) | 2019.07.16 |
댓글
이 글 공유하기
다른 글
-
[C/C++] 윈도우 마우스 후킹으로 제스처 인식 프로그램 만들기 (마우스 이동 방향 및 각도 구하기)
[C/C++] 윈도우 마우스 후킹으로 제스처 인식 프로그램 만들기 (마우스 이동 방향 및 각도 구하기)
2019.07.23 -
[C/C++] 윈도우 마우스 후킹으로 제스처 인식 프로그램 만들기 (마우스 이동거리 계산하기)
[C/C++] 윈도우 마우스 후킹으로 제스처 인식 프로그램 만들기 (마우스 이동거리 계산하기)
2019.07.23 -
[C/C++] 윈도우 메시지 후킹 마우스를 지배하는자 (windows mouse message hooking)
[C/C++] 윈도우 메시지 후킹 마우스를 지배하는자 (windows mouse message hooking)
2019.07.21 -
[C/C++] 윈도우 후킹을 하기 전에 알아야 할 DLL Main에서 하면 안되는 5가지 작업
[C/C++] 윈도우 후킹을 하기 전에 알아야 할 DLL Main에서 하면 안되는 5가지 작업
2019.07.16