贝壳电子书 > 文学历史电子书 > 知者无畏--一个真实的簿世界 >

第25章

知者无畏--一个真实的簿世界-第25章

小说: 知者无畏--一个真实的簿世界 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



在两个方面,一个议题,是不是需要在视窗95环境下开发杀毒软件,另外一个议题是,能不能在视窗操作系统下面实现类似内存监视的功能,实时防止病毒的入侵。当时大家对视窗环境下的开发都还是一头雾水,更不要说什么32位实时监视技术了,讨论了好几次都没有什么结果,最后决定兵分两路,一路通过对视窗3。0/3。1的研究,看看使用文件系统通知消息能不能作出实时监视系统来,另外一种就是通过当时只是听说过名字的Vxd技术,尝试做实时监视程序。
当时所使用的开发工具,是宝兰公司的 Borland C++3。1以及刚刚弄到手的宝兰公司的Delphi。

文件系统通知消息—防火墙技术的雏形:

在视窗3。0/3。1的时代,最早的文件系统变化通知消息,利用的是视窗界面的一个功能,在打开多个窗口的情况下。如果文件系统发生了变化,注册了监视功能的窗口会收到一个通知消息。利用这样一种通知技术,可以使程序及时注意到文件读写的请求,发现文件被改写之后,尽快使用杀毒程序对文件进行杀毒。
这种技术有一个非常大的局限性,首先是在DOS框下面输入的文件操作,这个功能将不会产生任何消息,其次当然是不支持视窗95了,为了解决第一个问题,使用了TSR程序和通知消息相结合的办法,我记得当时最大的技术难点是如何在DOS的TSR程序和视窗操作系统的应用程序之间进行通讯,为了解决这个问题做了很多努力,最后的效果还是不令人非常满意,所以采用这一技术的防火墙软件一直没有在市场上推出过。

基于vxd的防火墙技术
当时没有任何材料显示这样做是可行的,更不要说如何去做了,但是国外有一两个软件率先实现了这种神秘的技术,采用VXD技术进行文件系统监视,所达到的效果是非常令人吃惊的,在极低的系统资源占用情况下,实现了完全实时的文件系统监视,任何文件操作在进行之前或者完成以后会立刻通知杀毒软件进行病毒扫描。当时唯一的线索就是国外一些实现了文件系统实时监视的软件,在程序的运行目录下或者视窗操作系统的系统目录下会有类似于“Filemon。vxd”或者“AVmon。vxd”的文件,显示着Vxd技术和病毒实时监控的神秘关联。
VxD一般用汇编语言编写,如果使用C语言编写,注意不能使用任何标准的C语言库函数,(Vxd开发工具VToolsD提供了自己的C语言库函数实现,所以使用VToolsD编写的Vxd程序可以使用标准的C库函数)。Vxd程序的关键部分是一个和普通窗口的消息处理过程WndProc相类似的控制过程,不同之处在于它的处理对象是系统发来的控制消息。在VxD自加载至卸载的整个生命周期内,操作系统不断向它发送各种控制消息,VxD根据自己的需要选择处理,其余的忽略。
对动态VxD来说,最重要的消息有三个:
SYS_DYNAMIC_DEVICE_INIT
SYS_DYNAMIC_DEVICE_EXIT
以及W32_DEVICEIOCONTROL
当VxD被动态加载至内存时,系统向其发送SYS_DYNAMIC_DEVICE_INIT消息,VxD应在此时完成初始化设置并建立必要的数据结构;当VxD将被卸出内存时,系统向其发送SYS_DYNAMIC_DEVICE_EXIT消息VxD在收到后应清除所作设置并释放相关数据结构;当应用程序调用API函数DeviceIoControl与VxD进行通信时,系统向VxD发送W32_DEVICEIOCONTROL消息,它是应用程序和VxD联系的重要手段,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,间接获得了对Windows9x系统的控制权,但要实现对系统中所有文件I/O操作的实时监视,还要用到另一种关键技术:文件系统挂钩(File System Hooking),通过挂接一个处理函数,截获所有与文件I/O操作有关的系统调用。Windows9x使用32位保护模式可安装文件系统(IFS),由可安装文件系统管理器(IFSManager)协调对文件系统和设备的访问,它接收以Win32API函数调用形式向系统发出的文件I/O请求,再将请求转给文件系统驱动程序FSD,由它调用低级别的IOS系统实现最终访问。每个文件IO调用都有一个特定的FSD函数与之对应,IFSManager负责完成由API到FSD的参数装配工作,在完成文件I/OAPI函数参数的装配之后转相应FSD执行之前,它会调用一个称为FileSystemApiHookFunction的Hooker函数。通过安装自己的Hooker函数,就可以截获系统内所有对文件I/O的API调用,并适时对相关文件进行病毒检查,从而实现实时监控的目的。

下面是一个使用VToolsD开发工具编写的实时监视Vxd的片段:





视窗NT和视窗2000/XP下的病毒防火墙

有两种方法可以达到这一目标:
一种是和Vxd技术非常类似的技术,在视窗NT/2000下,同样有着系统设备驱动程序,和视窗9x不一样的是,NT/2000下的设备驱动程序结构很规范,文件系统的设备驱动程序和其他设备的设备驱动程序是非常类似的,所以编写实时监视的驱动程序不需要特别的技术或者技巧,只要编写一个普通的输入输出系统设备就可以了。
另外一种是相对不那么标准的技术,我们知道,对文件系统的访问最后都是要通过Vxd进行的,但是在进行Vxd调用之前,会通过DLL的函数CreateFile等进行调用,如果修改CreateFile函数的地址为杀毒软件内部的某个地址,这样所有的文件系统调用都会首先通过杀毒软件的监视。
在视窗NT/2000/XP下病毒防火墙的技术难点主要包括:
* 是否能够适应大量并发访问的需要(NT核心是完全可重入的)。
* 是否能够处理不同权限的访问
* 是否能够在不登录的情况下实现实时监视。


第六节 主动内核,改动操作系统?
从本质上来说,主动内核技术和病毒防火墙技术没有根本的区别,都是将病毒防护从被动的检测发展到进行文件操作的时候,实时的进行反应。主动内核技术宣称自己能在操作系统和网络的内核中加入反病毒功能,使反病毒成为系统本身的底层模块,而不是一个系统外部的应用软件。任何现代操作系统都采用了某种形式的层次结构,Vxd或者其他一些设备驱动程序一般也被认为是操作系统的一部分。
主动内核技术,用通俗的说法:是从操作系统内核这一深度,给操作系统和网络系统本身打了一个补丁,而且是一个〃主动〃的补丁,这个补丁将从安全的角度对系统或网络进行管理和检查,对系统的漏洞进行修补;任何文件在进入系统之前,作为主动内核的反毒模块都将首先使用各种手段对文件进行检测处理。
据认为主动内核技术可以在源代码级将自己使用的反病毒技术嵌入操作系统内核,实际上,稍为理智的分析都可以得出结论,这种源代码级的对操作系统的修改是不可能的,如果安装一个反病毒软件,这个软件会使用自己编译的,加入反病毒功能代码的视窗程序替换你的视窗程序,你还有胆量安装这样一个杀毒软件吗?
可能主动内核技术真正的价值在于和一种全局性的网络管理体系,Unicenter TNG无缝连接。这样杀毒软件的更新和管理可以在一个非常完善的基础之上进行。利用这种网络管理体系,主动内核技术可以自动地探测网络的每一个计算机是否都安装了主动内核,是否都已经升级到了最新的版本,如果有一个计算机没有做到,主动内核就可以对这个计算机进行安装或升级。
第七节 并不神奇的嵌入式技术
所谓的嵌入技术,是针对微软视窗操作系统的体系而开发的一种技术,其应用限制在Office和IE中,和病毒防火墙不一样,它是一种比较标准的保护技术,更多的建立在微软操作系统提供的文件系统之上的开发接口,可以对Office和IE进行病毒保护。
办公上网一体化,是互联网给我们带来的最大便利之一,办公和上网也是电脑最 常用的功能。这也就不可避免地被〃面目狰狞〃的病毒制造者所利用,目前Office办公系列组件、IE浏览器成为他 们对他人电脑进行侵害的常见通道。7000多种的宏语言病毒已经严重危害到我们使用Office组件来提高办公效率。幸运的是,微软在视窗操作系统中,大量使用了了组件技术,使用组件可以使视窗操作系统的各个部分有机的组合起来并且协同工作。嵌入式技术就是在这种情况应运而生的。目前嵌入的对象主要针对Office和IE。
通过注册适当的组件服务,比如说在Office中,开发一个打开WORD/EXECEL文档前进行处理的组件,然后注册到视窗操作系统的体系中,这样,在用户使用Office打开文件之前,它能自动的调用注册的组件对此文件进行病毒扫描。若发现此文件已被病毒感染则弹出发现病毒对话框,交与用户进行处理。同样,IE的嵌入挂接也是如此,当用户在使用IE浏览器打开网页之前,它能自动调入预先注册的组件对网页上含有的Active代码进行病毒扫描,以保证用户不受那些恶意的Active代码侵害 

第八节 “劳拉”—神秘的微软办公软件文件格式
如果你经常玩游戏的话,你一定听说过《古墓丽影》的女主角劳拉,但是你肯定没有听说过一种叫做“劳拉”(LAOLA)的文件格式,“劳拉”文件格式是微软复合文档结构的二进制格式,本来按照微软的说法,这种结构应该叫做“复合文档二进制结构”(pound File Binary Format),但是微软没有公开关于“复合文档二进制结构”的有关内容,大量黑客通过对WORD、EXCEL文件�

返回目录 上一页 下一页 回到顶部 赞(0) 踩(0)

你可能喜欢的