이 영역을 누르면 첫 페이지로 이동
웬디의 기묘한 이야기 블로그의 첫 페이지로 이동

웬디의 기묘한 이야기

페이지 맨 위로 올라가기

웬디의 기묘한 이야기

C/C++ Windows Hooking 개발자의 블로그 입니다! 이곳은 개발 외에도 저의 취미들이 공유되는 기묘한 이야기가 펼쳐집니다.

[C/C++] 윈도우 메시지 가로채기 기법 (windows message hooking)

  • 2019.07.14 00:33
  • ⌨ DEVELOPMENT/WIndows Hooking
반응형

윈도우 개발 기법 중 하나가 후킹이라는 기법이 있습니다. 생각보다 간단하게 제어를 할 수 있다는 장점이 있습니다.

거기다가 해당 기법은 MSDN에서 제공되는 공식적인 기술이기 때문에 MSDN 문서도 존재합니다.

https://docs.microsoft.com/en-us/windows/win32/winmsg/hooks

 

Hooks - Windows applications

Hooks In this article --> A hook is a point in the system message-handling mechanism where an application can install a subroutine to monitor the message traffic in the system and process certain types of messages before they reach the target window proced

docs.microsoft.com

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

 

SetWindowsHookExA function (winuser.h)

Installs an application-defined hook procedure into a hook chain.

docs.microsoft.com

앞으로 후킹을 이용하여 함께 프로그램을 만들어보겠습니다.

기대해주세요!

반응형

'⌨ 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

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [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
다른 글 더 둘러보기

정보

웬디의 기묘한 이야기 블로그의 첫 페이지로 이동

웬디의 기묘한 이야기

  • 웬디의 기묘한 이야기의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록
  • 이야기

카테고리

  • 분류 전체보기 (204)
    • MY STORY (2)
    • 📸 WALKING WITH YOU (85)
      • 아이슬란드 신혼여행 이야기 (14)
      • 대한민국 구석구석 (62)
      • CONTAX N1 + T* 28-80mm (4)
      • SAMSUNG NX3000 (1)
      • 어느 멋진 날 (4)
    • ⌨ DEVELOPMENT (80)
      • BOOK:Review (1)
      • AI (13)
      • C++ (26)
      • Python (10)
      • WIndows Hooking (9)
      • Windows Kernel (3)
      • Design Pattern (3)
      • Debugging (9)
      • Tools (0)
      • Project (1)
      • Android (1)
      • 상업용 무료폰트 (4)
    • OS (4)
      • News (0)
      • Windows 일반 (4)
    • 모바일 (2)
      • 모바일 게임 (2)
    • 멘사 퍼즐 (9)
    • 생활 꿀 TIP (7)
      • 건강 (3)
      • 일상 (2)
    • 물생활 (8)
      • 골든볼 라미네지 롱핀 (8)
    • IT 기기 (2)
    • BLOG (4)
      • TISTORY BLOG TIP (3)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • c++
  • 카페
  • AI
  • windbg
  • 아이슬란드
  • 신혼여행
  • c
  • 해외여행

나의 외부 링크

  • kernel undocument api
  • 지구 관찰자의 일기
  • 지구와 지구곰

정보

WENDYS의 웬디의 기묘한 이야기

웬디의 기묘한 이야기

WENDYS

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © WENDYS. Designed by Fraccino.

티스토리툴바