VC:VxD技术及其在实时反病毒中的应用

2024-01-17 14:48

本文主要是介绍VC:VxD技术及其在实时反病毒中的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2000年07月28日 17:03:00
目前国内的Windows9x平台反病毒产品大多属静态反病毒软件,指导思想是“以杀为主“,这一方式的缺点是病毒在被清除之前可能早已造成了严重危害一个好的反病毒软件应该是“以防为主,以杀为辅“,在病毒入侵时就把它清除掉,这就是实时反病毒技术。

  ----Windows9x使用IntelCPU的Ring0和Ring3两个保护级。系统进程运行于Ring0,因而具有对系统全部资源的访问权和管理权;而普通用户进程运行于Ring3,只能访问自己的程序空间,不允许对系统资源进行直接访问许多操作受到限制。显然这种普通用户进程是无法胜任实时反病毒工作的,必须使后台监视进程运行在Ring0优先级,实现这一目的基础就是VxD技术。

  一、VxD技术的特点

  ----VxD即虚拟设备驱动程序,用作Windows9x系统和物理设备之间的接口。但它不仅适用于硬件设备,也适用于按VxD规范所编制的各种软件“设备“

  ----VxD技术的实质是:通过加载具有Ring0最高优先级的VxD,运行于Ring3上的应用程序能够以一定的接口控制VxD的动作,从而达到控制系统的目的。实时反病毒软件之所以要使用VxD技术,关键有二:(1)VxD拥有系统最高运
行权限(2)许多Windows9x系统底层功能只能在VxD中调用,应用程序如果要用必须编个VxD作为中介。VxD作为应用程序在系统中的一个代理,应用程序通过它来完成任何自己本身做不到的事情,通过这一手段,Windows9x系统为普通应用程序留下了扩充接口。很不幸,这一技术同样为病毒所利用,CIH病毒正是利用了VxD技术才得以驻留内存、传染执行文件、毁坏硬盘和FlashBIOS。

 ----Windows9x系统下有众多的VxD,每个VxD可提供4种服务,即PM(保护模式)API、V86(虚拟86)API、Win32服务和VxD服务,前3种分别供应用程序在16位保护模式、V86模式以及32位保护模式下调用,VxD服务则只供其他VxD使用用户开发的VxD可提供任意上述服务。除此之外,应用程序还可通过调用API函数DeviceIoControl与支持IOCTL接口的VxD进行通信,执行Win32API不支持的系统低级操作。

 二、VxD技术的实现

 ----VxD的操作基于寄存器,所以一般用汇编语言编写,它的关键部分是一个和普通窗口的消息处理过程WndProc相类似的控制过程,不同之处在于它的处理对象是系统发来的控制消息。这些消息共51种,在VxD自加载至卸出整个生命周期内,操作系统不断向它发送各种控制消息,VxD根据自己的需要选择处理,其余的忽略。系统向VxD发送控制消息时将消息代号放在EAX寄存器中并在EBX寄存器中放系统虚拟机(VM)句柄。

 ----对动态VxD来说,最重要的消息有三个:SYS_DYNAMIC_DEVICE_INIT、SYS_DYNAMIC_DEVICE_EXIT以及W32_DEVICEIOCONTROL,消息代号分别是1Bh、1Ch、23h。当VxD被动态加载至内存时。
  系统向其发送SYS_DYNAMIC_DEVICE_INIT消息,VxD应在此时完成初始化设置并建立必要的数据结构;当VxD将被卸出内存时,系统向其发送SYS_DYNAMIC_DEVICE_EXIT消息VxD在收到后应清除所作设置并释放相关数据结构;当应用程序调用API函数DeviceIoControl与VxD进行通信时,系统向VxD发送W32_DEVICEIOCONTROL消息,它是应用程序和VxD联系的重要手段,此时ESI寄存器指向一个DIOCParams结构,VxD从输入缓冲区获取应用程序传来数据,相应处理后将结果放在输出缓冲区回送应用程序,达到相互传递数据的目的。

 ----应用程序向VxD发出DeviceIoControl调用时,第2个参数用于指定进行何种控制,控制过程从DIOCParams结构+0Ch处取得此控制码再进行相应处理控制码的代号和含义由应用程序和VxD自行约定,系统预定义了DIOC_GETVERSION(0)和DIOC_CLOSEHANDLE(-1)两个控制码,当应用程序调用API函数CreateFile(“.VxDName“,...)动态加载一VxD时,系统首先向该VxD的控制过程发送SYS_DYNAMIC_DEVICE_INIT控制消息,若VxD返回成功,系统将再次向VxD发送带有控制码DIOC_OPEN(即DIOC_GETVERSION,值为0)的W32_DEVICEIOCONTROL消息以决定此VxD是否能够支持设备IOCTL接口,VxD必须清零EAX寄存器以表明支持IOCTL接口,这时CreateFile将返回一个设备句柄hDevice,通过它应用程序才能使用DeviceIoControl函数对VxD进行控制。同一个VxD可用CreateFile打开多次,每次打开时都会返回此VxD的一个唯一句柄,但是系统内存中只保留一份VxD,系统为每个VxD维护一个引用计数,每打开一次计数值加1。当应用程序调用API函数CloseHandle(hDevice)关闭VxD句柄时,VxD将收到系统发来的带控制码DIOC_CLOSEHANDLEW32_DEVICEIOCONTROL消息,同时该VxD的引用计数减1,当最终引用计数为0时,系统向VxD发送控制消息SYS_DYNAMIC_DEVICE_EXIT,然后将其从内存中清除。在极少数情况下应用程序也可调用API函数DeleteFile(“.VxDName“)忽略引用计数的值直接将VxD卸出内存,这将给使用同一VxD的其他应用程序造成毁灭性影响,应避免使用。

 --一个典型的VxD控制过程代码如下:

 BeginProcVXD_Control
 cmpeax,1Bh
 ;SYS_DYNAMIC_DEVICE_INIT消息
 jzvxd_dynamic_init_handle
 cmpeax,1Ch
;SYS_DYNAMIC_DEVICE_EXIT消息
jzvxd_dynamic_exit_handle
cmpeax,23h
;W32_DEVICEIOCONTROL消息
jnzexit_control_proc
movecx,[esi+0Ch]
;从DIOCParams+0Ch处取控制码
....
;处理控制码
EndProcVXD_Control

 三、实时反病毒的关键技术-FileHooking

 ----应用程序通过使用动态加载的VxD,间接获得了对Windows9x系统的控制权,但要实现对系统中所有文件IO操作的实时监视,还要用到另一种关键技术-FileHooking,通过挂接一个处理函数,截获所有与文件IO操作有关的系
统调用。Windows9x使用32位保护模式可安装文件系统(IFS),由可安装文件系统管理器(IFSManager)协调对文件系统和设备的访问,它接收以Win32API函数调用形式向系统发出的文件IO请求,再将请求转给文件系统驱动程序FSD,由它调用低级别的IOS系统实现最终访问。每个文件IOAPI调用都有一个特定的FSD函数与之对应,IFSManager负责完成由API到FSD的参数装配工作,在完成文件IOAPI函数参数的装配之后转相应FSD执行之前,  它会调用一个称为FileSystemApiHookFunction的Hooker函数。通过安装自己的Hooker函数,就可以截获系统内所有对文件IO的API调用,并适时对相关文件进行病毒检查,从而实现实时监控。

 ----上述过程由用户VxD调用系统VxDIFSMgr提供的服务完成,该VxD提供了丰富的底层文件操作功能:IFSMgr_InstallSyatemApiHook函数用来安装FileSystemApiHookFunction,IFSMgr_RemoveSystemApiHook用来卸除Hooker,IFSMgr_Ring0_FileIO用来对文件和磁盘扇区进行读写访问等等。当由IFSManager转入SystemApiHookFunction时,带有6个参数:

FileSystemApiHookFunction(
pIFSFuncFSDFnAddr,
对应FSD服务函数地址
intFunctionNum,
与API对应的FSD服务功能号(详见下面)
intDrive,
驱动器代号(1=A,2=B,3=C...)
intResourceFlags,
资源标志(详见下面)
intCodePage,
代码页(0=ANSI,1=OEM)
pioreqpir
指向IOREQ结构的指针
)

 ----参数中比较重要的是FSD功能号、驱动器号和IOREQ结构指针3项。如需截获某个文件IOAPI调用,只需在Hooker中对相应FSD功能号进行处理

 ----系统中可挂接多个Hooker,形成一条链。IFSMgr_InstallFileSystemApiHook安装Hooker成功时返回前一个Hooker地址,每个Hooker在做特定处理后总应调用前一个Hooker,最后安装的Hooker最先被调用。在VxD中调用其他VxD服务采用INT20h指令后跟一个双字的特殊格式,其中高字为被调用VxD的ID号(系统VxD的ID固定),低字为该VxD之服务号,这一形式称为VxDcall,如:

int20h
dd00400043h
;VxDCallIFSMgr_InstallSystemApiHook
int20h
dd00400044h
;VxDCallIFSMgr_RemoveSystemApiHook




Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=3070


这篇关于VC:VxD技术及其在实时反病毒中的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/616381

相关文章

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

Go信号处理如何优雅地关闭你的应用

《Go信号处理如何优雅地关闭你的应用》Go中的优雅关闭机制使得在应用程序接收到终止信号时,能够进行平滑的资源清理,通过使用context来管理goroutine的生命周期,结合signal... 目录1. 什么是信号处理?2. 如何优雅地关闭 Go 应用?3. 代码实现3.1 基本的信号捕获和优雅关闭3.2