Electronic Joint Business

Solution for E-Business

filter

Windows 下如何实现键盘记录器

首先强调的是本文不提供任何键盘记录器的源代码,我们所要侧重了解的是键盘记录器背后所涉及的系统机制,从而更好地了解 Windows 操作系统是如何与硬件协调工作的。本文适合那些对内核或驱动开发有经验的用户。1

在 Windows 中处理键盘输入数据
有多种技术可以截取键盘和鼠标事件,而键盘记录器或多或少都用到了这些技术。因此在剖析某款键盘记录器之前,有必要先了解一下 Windows 是如何处理键盘输入数据的。这个过程可以简单描述为:

  • 1. 键盘上某一个键被按下;
  • 2. 键盘系统中断控制器被激活;
  • 3. WM_KEYDOWN 消息出现;

有关内容可以参考:

  • “Apparatnoe obeshpechenie IBM PC” 作者 Alexander Frolov 和 Grigory Frolov, 第2卷, 第 1 册。 Dialog-MIFI出版社, 1992 年出版。第二章 “键盘” 介绍了键盘的工作原理、使用的端口和键盘硬件中断。
  • MSDN 上 “HID / Human Input Devices” 小节内介绍了键盘输入处理过程的底层部分(驱动)。
  • Jeffrey Richter 的著作 《Creating effective Win32 applications for 64-bit Windows》 第 27 章 “A model of hardware input and the local input condition” 中谈到了键盘输入处理过程的顶层部分(用户模式)。

作为物理设备的键盘是如何工作的。
大多数键盘都是独立设备,通过 PS/2 或 USB 接口连接到计算机上。有两个微控制器负责处理从键盘输入数据,i8042 在主板上,i8048 在键盘内。可以说 PC 键盘本身就是个小型计算机系统,其所使用的 i8048 微控制器独立于中央 CPU,负责不断地扫描被按下的按键。

每个按键都会被指定某一特定值,具体值和按键矩阵图强相关,而与按键上印刷的字符无关。这些数值被称为“扫描码”(这个名称凸显了计算机通过扫描键盘来搜索敲键的事实)。扫描码是 IBM 公司在为其 PC 创造出第一个键盘时选择的随机数。对单个按键来说,其扫描码并不是和 ASCII 码一一对应,相反它可以对应于多个 ASCII 码值。扫描码表可以在《汇编语言程序设计的艺术》一书的第 21 章中找到。

>>> 阅读全文

 

, , ,