键盘记录功能详解

独行   ·   发表于 2020-10-15 12:20:59   ·   技术文章

键盘记录功能详解

使用语言:Python2.7
使用库:pythoncom,pyhook,win32clipboard,ctypes
使用范围:WindowXP以上
作者:天象独行

一;需求分析:

  1. 键盘记录功能,在终端运行纪录键击信息且输出。

二;问题处理:

  1. 如何确定记录哪个窗口?
  2. 怎么记录键盘操作?

三;处理方法:

  1. 系统的每个窗口的句柄是唯一的,可以使用句柄来定位窗口,使用钩子来监控键盘操作。编写钩子子程序来记录键盘操作。
  2. **注释:“钩子是Windows 的消息处理机制中的一个监视点,应用程序可以在

这里安装一个监视子程序,这样就可以在系统中的消息流到达目的窗口过程前监控它们。”**

四;代码

见附件

五;效果展示:

  1. 5.1;运行代码;

5.2;在任意窗口敲击键盘。

六;代码分析

  1. 整个代码分为两个自定义函数。get_current_process()和KeyStroke(event)。其中前者是用来获取当前窗口的一些信息并且输出到界面当中。比如:进程PID,窗口进程等等。后者便是需要放入到钩子当中的子程序代码。用来记录键盘敲击的消息并且输出。下面我们来具体的分析一下这两个函数:
  2. get_current_process() 函数当中主要是使用了windows API 函数进行操作。下面我来逐步阅读。首先使用GetForegroundWindow()函数来检索当前窗口的句柄。通过这里获取的句柄来通过函数GetWindowThreadProcessId() 来查询窗口的线程标识且保存在变量process_id 当中。解下来通过create_string_buffer() 来创建两个固定大小(512字节)的空间。用来保存进程信息,窗口标题信息。且通过OpenPress() 来打开窗口对象。并且通过GetModuleBaseNameAGetWindowTextA来获取对应信息。之后print 输出。
  3. 在分析KeyStroke自定义函数之前,我们先看看库PYHOOK
  4. 首先,我们来看一下pyHook库当中的一个类HookManager()。它的功能是注册和管理底层鼠标和键盘事件的回调。我们来看看其中的一些包含的方法。KeyDown 作用是将一个 将给定的函数注册为此键盘事件类型的回调函数,HookKeyboard方法作用是开始监视键盘事件。知道了这些之后。我们就很清楚的知道了该如何去记录一个键盘事件了。首先,我们编译一个自定义函数KeyStroke。该函数的功能是提取出键盘信息且输出。那么问题来了。刚刚我们说到,函数KeyStroke是提取键盘信息的。那么这里的键盘信息是从哪里来的呢?这里的参数event不是由您手动设置的,而是供事件处理程序读取和操作的。解下来就是利用pyHook库当中的类HookManager()来去监视键盘事件,将自定义函数KeyStroke挂在到钩子当中即可。通过pythoncom库当中的PumpMessages来抽取所有消息.

注释:知识点查询
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getforegroundwindow
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowthreadprocessid
https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess
http://pyhook.sourceforge.net/doc_1.5.0/
http://timgolden.me.uk/pywin32-docs/pythoncom.html

文章参考书籍“Python黑帽子黑客与渗透测试编程之道”

用户名金币积分时间理由
admin 50.00 0 2020-10-26 15:03:48 支持分享

打赏我,让我更有动力~

附件列表

Key.7z   文件大小:0.001M (下载次数:6)

0 条回复   |  直到 2020-10-15 | 864 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.