|
'Global Hook'에 해당되는 글 2건
[폭주기관차, 2007/02/09 10:49, [Programming]/Visual C++ API/MFC]
Hook은 Local Hook과 Global Hook이 있는데
Local Hook : 하나의 Thread나 Process 안에서의 Hook Global Hook : 전역의 모든 Process에 대한 Hook] Local hook의 경우 전에 이 블로그에서 설명한 SubClassing이란 방법을 이용해서도 할 수 있기에 통과하기로 하고... Global Hook에 대해 간단한 예제를 보여주도록 하겠다. 우선 제일 중요한 것은 Global Hook의 Procedure는 DLL로 작성이 되어야 한다. 그 이유에 대해서는 아직 나도 제대로 이해를 못했다. 완벽하게 이해가 되면 그때 다시 따로 올리도록 하겠다. (이 글 밑에 보면 WinApi 완전정복이란 사이트에 있는 강좌글을 Link걸어놨다. 그곳에서도 이유가 설명되어있으니 참고 바람.) DLL Hook Procedure - DLL 파일 Hook Server - DLL파일을 Load해서 수행시킬 EXE파일 훅 과정을 텍스트로 간단하게 설명해보도록 하겠다. 키보드 입력 → 해당 Process의 WM_KEYDOWN 기본적으로 이렇게 돌아가지만 훅을 설치하게 되면 키보드 입력 해당 Process의 WM_KEYDOWN ↘ ↑ DLL Hook → Hook Server 이런 과정을 거치게 된다. [DLL File] #pragma data_seg(".kbdata")출처 : www.winapi.co.kr 가장 기본적인 코드다. #pragma data_seg(".kbdata") ~ #pragma data_seg() #pragma comment (linker, "/SECTION:.kbdata,RWS") 이 코드는 DLL을 호출하는 모든 Process에게서 공유변수로 작동하게 된다. kbdata => 공유되는 섹션 이름으로 변경이 가능하나 대소문자 가리지 않고 최대 8자까지 가능하다. 이 DLL에서 하는 일은 훅을 설치해주고, 해제해주고, 키보드 입력이 발생하였을 경우 Hook Server로 WM_USER+1이란 메세지를 발생시켜주는 일을 한다. [CPP File] 이제 CPP 파일에서는 그냥 프로그램 시작시 훅을 설치해주고 종료시 훅을 제거해주고 WM_USER+1의 메세지를 받았을 때 처리하는 Procedure만 만들어주면 된다. 아 그리고 DLL의 함수 원형이 선언된 Header파일을 Inlcude 해주어야 한다. #include "DLL의 함수원형이 선언되어있는 Header 파일" - WM_CREATE InstallHook(hWnd); - WM_DESTROY UninstallHook(); - WM_USER+1 KeyBoard 훅이 일어났을 때 취할 Procedure 키보드와 마우스 훅을 대부분 많이 이용하게 된다. 그외 훅에 대한 옵션(WH_...)은 MSDN에서 찾아 보면 된다. 아쉬운 점은 SubClassing처럼 모든 메세지를 다 받아오지 못하는 점이 있다. 아마 OS자체에서 Process간 침해를 주지 않게 하려고 막아놓은것 같다. 혹시 방법이 있다면 제발 좀 갈켜주세요~~~ㅜㅜ 참고 Trackback Address :: http://kongmks.cafe24.com/trackback/92
[폭주기관차, 2007/02/07 13:44, [Study English]/Translate]
You must place a global hook procedure in a dynamic-link library (DLL) separate from the application installing the hook procedure.
당신은 후킹 코드를 설치하는 응용소프트웨어와 다른 위치인 동적-링크 라이브러리(DLL)안에 전역 후킹 코드를 반드시 작성해야한다. separate : vi. 갈라지다, 끊어지다, 관계를 끊다. procedure : 프로그램처리 절차(소스코드란 의미로 해석함) application : 응용 소프트웨어 The installing application must have the handle to the DLL module before it can install the hook procedure. 훅 코드를 설치하기전에 후킹 설치 응용프로그램은 DLL 모듈의 핸들을 반드시 가져야한다. handle : vt. ~를 사용하다 module : 모듈 To retrieve a handle to the DLL module, call the LoadLibrary function with the name of the DLL. DLL모듈 핸들을 가져오기위해서는, LoadLibrary 함수에 DLL 이름을 호출하면된다. retrieve : vt. 회수하다, 되찾다. [컴퓨터]<정보를>검색하다 [유의어 : recover:회복하다] After you have obtained the handle, you can call the GetProcAddress function to retrieve a pointer to the hook procedure. 핸들을 얻은 후에, 후킹 코드를 가르키는 위치를 얻기 위해 후킹 코드 GetProcAddress 함수를 호출 할 수 있다. obtained = obtain : vt. 얻다, 획득하다. [유의어:get] pointer : n. 가리키는 사람[물건] Finally, use SetWindowsHookEx to install the hook procedure address in the appropriate hook chain. 마지막으로, 후킹 코드 메모리주소(후킹 DLL)를 적절한 후킹 체인에 설치하기 위해 SetWindowsHookEx를 사용한다. appropriate : a. 적당한 chain : n. 쇠사슬, 연결 고리, [컴퓨터:체인<연속적인 계산 명령 또는 기억 영역>] 이 번역은 완전 영문 초보인 제가 번역한거라 잘못된 번역이 다소 많이(?) 있을 수도 있습니다. ㅋㅋ Trackback Address :: http://kongmks.cafe24.com/trackback/88
|
||





