直接访问键盘控制芯片获取键盘记录键盘是用户和机器之间主要的硬件接口,看看键盘上的那些键就可知道它有多么的复杂了
键盘是我们隐私的源泉,我们各种信息的传递都要通过它
作为用户表现信息的媒介,很多怀有恶意目的的人都想截取我们的键盘输入
目前有很多方法可以做到,比如全局钩子、GetKeyboardStatus()、驱动过滤钩子等,但是如果要截取像QQ这种Hook键盘中断处理程序的保护技术,这些方法都显得无能为力
为此,我将为大家介绍一种直接访问键盘控制芯片的方法,来实现对键盘输入数据的最底层的读取
如果我们知道了硬件的输入输出地址,就可以直接对它们进行访问了
键盘上有一个称为键盘编码器的处理器(Intel8048或兼容芯片)专门用来扫描收集所有按键按下和松开的状态数据(即扫描码)
当一个键被按下时,键盘发送的扫描码称为接通扫描码(Makecode),或简称为接通码;当一个被按下的键放开时发送的扫描码被称为断开扫描码(Breakcode),或简称为断开码
主机键盘控制器专门用来对接收到的键盘扫描码进行解码
因为每个按键的接通和断开码都是不同的,所以键盘控制器根据扫描码就可以确定用户在操作哪个键了
整个键盘上所有按键的接通和断开码就组成了键盘的一个扫描码集(ScanCodeSet)
根据电脑的发展,目前已有三套扫描码集可供使用,它们分别是第一套扫描码集,原始XT键盘扫描码集,目前的键盘已经很少发送这类扫描码;第二套扫描码集,现代键盘预设使用的扫描码集,通常称为AT键盘扫描码集;第三套扫描码集,PS/2键盘扫描码集,原IBM推出PS/2微处理机时使用的扫描码集,已很少使用
AT键盘预设发送的是第二套扫描码集
虽然如此,主机键盘控制器为了与PC/XT机的软体兼容起见,仍然会把所有接收到的第二套键盘扫描码转换成第一套扫描码,因此,我们从键盘控制器获取的通常为第一套扫描码集
当一个键被按下时