危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2289 浏览18982154

RING3下键盘输入信息的获取

对于一个黑客来说,平时接触的关手键盘记录的工具肯定不少,比如一些远控、盗号木马等等,可是这些工具的键盘记录功能是如何实现的呢?今天就让危险漫步来带领大家了解下怎样通过编程实现键盘输入信息的获取,这次的教程与之前的通过木马获取键盘信息有所不同。

首先介绍一种比较常用的记录方式,那就是钩子。利用钩子,你可以捕捉自己进程或其它进程发生的事件。通过“钩挂”,可以给WINDOWS一个处理或过滤事件的回调函数,该函数也叫做“钩子函数”,当每次发生你感兴趣的事件时,WINDOWS都将调用该函数。而我们要实现键盘记录功能,就是要捕获系统或是指定进程的键盘输入消息,在钩子的回调函数对捕获到的信息进行处理。

第一个参数是要安装钩子的类型,即它处理的消息,因为我们这里要记录键盘消息,所以我们可以设置为WH_KEYBOARD,第二个参数是钩子回调函数,必须按照以下的语法书写。

第二个参数是应用程序实例的句柄,第四个参数是与安装的钩子子程相关联的线程的标识符,因为我们要捕获全局的键盘输入信息,所以这里我们设为0,表示安装的是全局钩子。这里我们要将安装钩子的代码跟钩子回调函数写到一个DLL程序中。

在DLL中将SetHook跟UnHook函数导出一下,然后再写一个主程序去调用DLL中的这两个函数来实现键盘记录功能的开启和关闭。

下面再来介绍一种Ring3下算是比较底层的键盘记录方法,使用原始输入(Raw Input)记录键盘输入信息。Raw Input的API为应用程序提供了稳定健壮的读取原始数据数据的方式,包括键盘和鼠标。要实现用原始输入方法记录键盘,我们可以按照如下步骤进行:

1.注册原始输入设备

2.读取原始输入(响应WM_INPUT消息)

当一个应用程序收到了原始输入,应用程序的消息队列就会得到一个WM_INPUT消息,有两种方法去读取原始数据:标准(没有缓冲的)方法和缓冲方法。前者获取原始输入时,每次获取一个RAWINPUT数据,而且对于大多数HID设备都是可以用这种方式读取的。应用程序调用CallMessage得到WM INPUT消息,然后应用程序通过WM INPUT消息,调用GetRawInputData来获取RAWI-NPUT句柄。相对应的,缓存方式每次得到一系列的RAWINPUT结构。这是给那些能够构产生很大数据量的原始输入。用这种方法去获取数据,首先调用GetRawInputBuffer去获取一系列的RAWINPUT结构。注意NEXTTRAWINPUTBLOCK宏是用来获取下一个RAWINPUT结构的。对话框程序可以直接添加WM_INPUT响应消息,在消息处理函数中我们对原始输入信息进行处理并保存到文件中。

关于这两种Ring3下的键盘记录方式,第二种方式相对来说是比较“绿色”的,也是不容易被杀软拦截的。危险漫步希望大家能好好理解,不要做一个只会用工具的ToolBoy。

相关推荐