本文将详细讨论一个键盘监视器的C/C #开发过程,并提出一些反窥探的建议,希望读者能够了解基于hook技术的窥探软件的工作原理,从而更好地保护自己的软件。

基于软件的键盘事件记录器是一个严重的安全威胁,因为它们通过捕获击键来监视用户的动作。该监视器可用于一些恶意行为,如窃取信用卡号码等。键盘记录器是木马病毒的一个基本组件,它在后台悄悄地运行。等待捕捉用户的击键。击键事件被保存在隐藏得很好的文件中,并通过电子邮件或FTP发送给窥探者。下面是一个使用hook技术的简单、直接的实现示例。

键盘监视器体系结构

监视器由三个模块组成:主模块、钩子进程和FTP模块。主模块负责安装全局钩子的过程。钩子的任务是向主模块报告每一次击键,主模块将所有击键保存到一个文件中。当记录文件达到预定大小时,主模块命令FTP模块将记录文件上传到FTP服务器。三个模块之间的通信通过Windows消息机制实现,如图1所示。

一个系统范围的钩子实际上是一个函数,它安装在所有当前运行的进程中,在被监控的消息到达目标窗口进程之前对其进行监控。钩子子程用于监视系统中的各种类型的事件,比如击键等等。您可以通过调用Win: 32 API函数SetWindowsHookEx来安装一个钩子子程,并指定调用该过程的钩子类型。一个WH_CBT钩子子程在窗口中获得焦点,并从系统中获取关键事件;在释放队列被清除之前调用。所有桌面应用程序都在自己的上下文中调用全局钩子子程。所以钩子子程必须驻留在一个独立于应用程序的DLL中来安装钩子子程。

段DLL共享内存区域实际上是一个所有DLL实例都可以看到的内存变量。主模块将其窗口句柄保存在钩子DLL的共享内存区域中,这使得所有钩子子程实例能够将窗口消息发送回主模块。钩子子程共享内存区域并输出函数。

该函数的主要模块代码如下

间谍程序必须隐藏自己的踪迹,以免被发现。它们主要涉及三个技术领域:任务管理器、防火墙和文件系统。我们在这里介绍前两种。

任务管理器盗窃

ADS(备用数据流)是NTFS文件系统的一项功能,它使您能够将文件数据发送到现有文件,而不会影响它们的功能。在资源管理器等浏览工具显示带有广告的文件时,通过本地文件浏览技术几乎不可能检测到这些文件。一旦文件被注入这个特性,广告就可以像传统的命令类型一样被执行。激活时。ADS executor以原始文件的形式出现和运行,可以通过进程观察器(如Windows资源管理器)进行测试。使用该技术后,不仅可以隐藏一个文件,还可以隐藏一个非法进程的执行部分。事实上,如果安装了NTFS系统,你是不可能在本地检测到ADS隐藏的文件的。广告功能不能被取消(DLS abled)。到目前为止,还没有办法对用户有权访问的文件限制此功能。为简单起见,示例程序不使用广告。可以通过以下方式手动操作广告。

防火墙盗窃

大多数防火墙软件可以检测并阻止未经授权的程序访问互联网。主模块通过使用FTP模块将记录文件上传到FTP服务器。防火墙通过将FTP模块DLL注入到另一个已安装的应用程序中来实现窃取。DLL注入意味着强制一个不能被挂起的进程接受一个它从未请求过的DLL文件。在示例中,我选择标注FTP模块8或Internet Explorer或FireFox。DLL注入将绕过大多数防火墙软件的检测,尤其是当FTP服务器监听端口80时。挂钩进程DLL(由SetWindowsHookEx函数自动加载到所有正在运行的进程中)检查它是否加载到Internet Explorer或FireFox中,并加载(使用LoadLibrary)FTP模块DLL。不允许从DliMain调用LoadLibrary函数,所以DIIMain设置了一个布尔变量,让钩子子程调用LoadLibrary库函数。

下面是模块DlIMain中的钩子过程。

将监视器添加到以下注册表项将使它能够在系统启动时一起启动示例程序。添加spy.exe作为新的注册表值。防止键盘监控

这里有两个简单的技术可以帮助你的应用程序反击基于hook技术的键盘监视器。具有防监听功能的密码编辑控件。如图2所示。

无监视器编辑控件将为用户的每次击键生成模拟的随机击键字符串。monitor程序将截取用户的击键和伪击键,这使得很难或不可能检索实际输入的文本。用户的输入存储在一个成员变量中,应用程序可以通过编辑控件方便地访问这个变量的值。本例中的伪击键是通过调用Win32 APISendlnput实现的。下面的代码实现了两个控件。一个MFC版本。答。网络版。

编辑安全控件假定函数Sendlneut生成击键的速度比用户击键的速度快,这可能会导致编辑安全控件在速度较慢的计算机上返回错误的用户数据,尤其是在运行c#实现版本时。先看VC MFC版本的CsafeEdlt类:

用c#实现的SafeEdit类

SpyRemover类如图3所示。

基于钩子技术的监控程序依赖于它们的钩子进程DLL。从应用程序进程中移除钩子DLL会使注入到应用程序中的窥探器失去窥探击键的功能。示例程序使用SpyRemover类移除挂钩DLL文件。Sp

yHemover构造器接收个“授权模块“的列表。如果一个模块只是装入到一个应用程序中,但是没有出现在该列表中,则被认为是没有授权的。SpyRemover通过枚举所有的应用程序进程模块来探测未经授权的模块。

小结

本文以软件保护为背景,详细讨论了一个键盘监视器的开发并针对反监视提出了一些建议。希望读者理解基于钩子技术的窥探软件的工作原理.更好地针对自己的软件加以保护