VxD技术及其在及时反病毒中的利用[VC/C++编程]
本文“VxD技术及其在及时反病毒中的利用[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
目前国内的Windows9x平台反病毒产品大多属静态反病毒软件,指导思惟是"以杀为主",这一方法的缺陷是病毒在被排除之前大概早已造成了严重危害一个好的反病毒软件应当是"以防为主,以杀为辅",在病毒入侵时就把它清撤除,这就是及时反病毒技术.
----Windows9x利用IntelCPU的Ring0和Ring3两个保护级.系统进程运行于Ring0,因而具有对系统全部资源的拜候权和管理权;而普通用户进程运行于Ring3,只能拜候自己的程序空间,不答应对系统资源举行直接拜候很多操作遭到限制.明显这种普通用户进程是无法胜任及时反病毒工作的,必须使后台监督进程运行在Ring0优先级,实现这一目的底子就是VxD技术.
1、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不支持的系统初级操作.
2、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
cmp eax,1Bh
;SYS_DYNAMIC_DEVICE_INIT消息
jz vxd_dynamic_init_handle
cmp eax,1Ch
;SYS_DYNAMIC_DEVICE_EXIT消息
jz vxd_dynamic_exit_handle
cmp eax,23h
;W32_DEVICEIOCONTROL消息
jnz exit_control_proc
mov ecx,[esi+0Ch]
;从DIOC Params+0Ch处取掌握码
....
;处理掌握码
EndProcVXD_Control
以上是“VxD技术及其在及时反病毒中的利用[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |