ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python KeyLogger
    Python 2015. 1. 21. 03:54



    우선 다양한 API를 사용하기위해 windll을 사용해서 user32와 kernel32를 선언한다.


    user32.API , kernel32.API 이런식으로 호출할수있다.





    이따가 SetWindowsHookExA함수에서도 사용되고 다른 많은곳에서 사용된다.


    미리 정의해놓은 변수이다.



    KeyLogger라는이름으로 클래스를 선언했다.


    __init__함수는 클래스가 선언될떄 처음으로 실행되는함수로 저기 정의된 변수들이 이따가 많이 사용된다.





    함수이름대로 훅을 설치한다.


    user32.dll의 SetWindowsExA()함수를 사용해서 훅을 설치하는 함수이다.


    모니터링할때는 첫번쨰 인자에 WM_KEYBOARD_LL을 넣어주고 훅 설치는 운영체제에서 실행되고있는 모든곳에 설치를 한다.




    훅을 설치하는것과 반대로 훅을 제거하는 함수이다.


    훅 자체가 시스템에 과부하가 걸리게해 꼭 해제해주어야한다


    hooked로 반단하는데, 푹이 풀려있다면 그냥 리턴을해버리지만 만약 후킹이 되있다면 UnhookWindowsHookEx함수로 훅을 제거한다.




    해당함수는 훅 프로시저를 등록하려면 해당함수의 포인터를 전달해주어야하기때문에 존재한다.


    CFUNCTYPE함수를통해 SetWindowsHookExA()함수에서 요구하는 훅 프로시저의 인자와 타입을 지정한다.




    이 함수가 제일 복잡하다.


    훅 프로시저 함수인데, 어떠한 이벤트(인풋)가 받아들여지면 그 이벤트를 처리하는 콜백함수이다.


    들어온 이벤트가 WM_KEYDOWN즉, 키보드가 눌러졌다면 메세지 값을 화면에 출력해준다.

    만약 메세지값이 CTRL, 컨트롤이면 훅을 keyLogger에 uninstallHookProc()을 호출해 훅을 제거한다.


    처리가 모두 끝나면 훅 체인에있는 다른 훅 프로시저에게 제어권을 준다 이 역할은 user32의 CallNextHookEx함수가 도맡는다.




    그냥 한번에 찍었다


    startKeyLog함수는 말그대로 키로그를 시작하는부분이다.


    저기서 GetMessage함수가 있는데 해당함수는 "큐"를 모니터링하고있다가 큐에 이벤트 (메세지)가 들어오면 메세지를 꺼내 훅 체인에 등록된 맨처음의 훅으로 전달한다.


    그리고 그밑에 keyLogger = KeyLogger()부터는 KeyLogger클래스를 호출한다.

    그리고 installHookProc 즉, 훅을 설치하고, 동시에 훅 프로시저를 등록한다. 


    그리고 큐를 모니터링후 전달하기위해 startKeyLog()함수를 호출하게된다.




    이렇게 파이썬 키로거의 소스코드 설명이끝났다.


    의외로 API함수를 가져다 사용하는거라 쉬웠고 결과값을보자





    NAVER를 입력하니 그대로 메세지가 전달되어 프린트된다.



    'Python' 카테고리의 다른 글

    notepad WriteFile 후킹결과  (0) 2015.01.21
    API Hooking (WriteFile)  (0) 2015.01.21
    immuity IsDebuggerPresent 우회  (0) 2015.01.21
    findinstruction  (0) 2015.01.20
    Immunity Debugger PyCommand  (0) 2015.01.20

    댓글

Designed by Tistory.