chinda_fall_desu’s diary

竹内豊の日記

ヒューマンコンピューターインターフェースをもっと知りたいなー

pythonでpyHookを使ってキーロガーを作る (Windows)

キーロガーを作るためにpythonのライブラリであるPyHookを用いる。
PyHookはネイティブWindowsAPIのSetWindowsHookExを使っている。


まずPyHookをpipでインストールしようと思ったがうまくいかなかった。

> pip install pyhook
ERROR: Could not find a version that satisfies the requirement pyhook (from versions: none)        ERROR: No matching distribution found for pyhook
>

そこでwhlファイルで直接インストールするとうまくいった。

> pip install .\pyHook-1.5.1-cp37-cp37m-win32.whl
Processing c:\-------------\pyhook-1.5.1-cp37-cp37m-win32.whl
Installing collected packages: pyHook
Successfully installed pyHook-1.5.1
>


それではキーの取得、出力を行ってみる
ソースコード

from ctypes import *
import pythoncom
import pyHook
import sys

def Press(event):
    print(event.Key)
    if event.Key=='Q':
        sys.exit()
    return True

hookins=pyHook.HookManager()
hookins.KeyDown=Press
hookins.HookKeyboard()
pythoncom.PumpMessages()

・実行結果

> python sample.py
F
D
F
A
A
D
>


PyHookパッケージの構造をまとめてみます。

・PyHookパッケージ
      |---HookManagerモジュール
          |---HookConstantsクラス: 内部ウィンドウフック定数を格納
          |---HookEventクラス: 一般的なフックイベントに関する情報を保持する
          |---MouseEventクラス: 一般的なマウスイベントに関する情報を保持する
          |---KeyboardEventクラス: 一般的なキーボードイベントに関する情報を保持する
          |---HookManagerクラス: 低レベルのマウス・キーボードイベントのコールバックを登録、管理する。
        |---GetKeyStateメソッド

HookManagerクラス
    |----HookMouseメソッド: マウスイベントの監視を開始する
    |----HookKeyboardメソッド: キーボードイベントの監視を開始する
    |----SubscribeKeyDownメソッド: 指定された関数をこのキーボードイベントタイプのコールバックとして登録する。
    |----KeyDownクラス変数


(間違い等あればコメントよろしくお願いいたします。)