按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
碌目⒎绞剑苯涌梢曰鼋缑妫缓缶涂梢灾葱辛耍谖业挠∠笾校⑷砗苌倌芄豢⒊鍪裁赐黄菩缘募际酰琕B或者是仅有的例外吧。但是由于VB是在BASIC基础上开发的,所以存在很多致命的缺陷,主要是:不能开发比较底层的程序,不能开发非常大规模的程序(由于BASIC语言的结构化不是非常好)、还有就是解释执行而不是编译执行,程序的运行速度比较低。所以在真正开发视窗程序的时候还是不得不选择C/C++语言。当时开发视窗程序的标准工具是微软C/C++版本6和版本7(Microsoft C/C++7。0);在微软的Visual C++出来以前,微软的C++语言编译器是以难用而著称的。所以大部分程序员的选择是宝兰公司的Borland C++3。1,这个编译器附带了一个非常好的类库—对象窗口库(Object Windows Library),可惜的是,Borland C++最终还是没有逃脱和微软做对的宿命,现在的Visual C++如日中天,而使用Borland C++的用户已经越来越少了。
而最早的Delphi1。0版本出来的时候,对于所有的程序员都是一个惊天动地的好消息,那时候我还在南京,盗版软件还没有今天这么流行。差不多是94年左右吧,我专门到了一次中关村,那时候希望电脑还是中国电脑界一个赫赫有名的牌子,在海淀医院的对面,希望公司有一个销售的地方还是总部已经记不清楚了,记得我在那里购买了一套正版的Delphi1。0版本。好像是好几千块钱,在当时是一个非常贵的东西了,拿到手里重重的一个盒子,里面有好多本英文的说明书,回来之后还正正规规的把大部分说明书都翻译成中文,我的英语就是那时候真正得到锻炼的。
在得到Delphi之后,视窗环境下的软件开发就变得非常容易了,简单的画一个窗口,然后在上面放置按钮、列表框、菜单等等,就可以编写出一个完成的视窗应用程序,而且这个程序是可以独立执行的EXE文件,速度很快,不是象VB一样需要解释执行,非常缓慢。更重要的是,Delphi使用了Object PASCAL语言做为基础开发语言,这种语言在简单、优雅的PASCAL语言的基础上增加了面向对象的功能,结构化和工程化非常好,甚至可以适应于大型软件开发的需要。
使用Delphi,我很快就开发出了在视窗操作系统下运行的杀毒软件VRV for Windows和后来的NetVRV。随着视窗95操作系统的出现,宝兰公司又很快推出了可以生成32位应用程序的Delphi2。0版本,这样在视窗95下也可以很方便的开发杀毒软件了。
但是Delphi还是有一点不便之处,就是PASCAL语言和C语言比较起来毕竟不是那么常见,而视窗操作系统本身是使用C语言开发的,使用PASCAL语言在调用的时候总是有一点点不方便之处,宝兰公司可能也发现了这一点,所以很快又推出了以C++语言为基础的视窗可视化开发工具—宝兰 C++构造者(Borland C++ Builder),很快,我们就从Delphi转移到C++ Builder上,并开发出了最早的病毒防火墙软件。
现在的选择就更多了,除了简单方便的C++ Builder和Delphi以外,Visual C++也成为一个不错的选择,微软在经过长时间的改进之后,总算让他的Visual C++成为可以和C++ Builder竞争的选手了,虽然从开发的方便程度上还是有所不及,但是从对操作系统的熟悉程度上,已经整体的稳定性上,微软利用自己同时开发操作系统的便利,比起宝兰公司还是要占有一点点优势的。
下面是视窗环境下开发工具的变迁
第五节 警惕的哨兵—病毒防火墙的诞生
在1997年的时候,出现了病毒防火墙技术。实际上病毒防火墙是一个通俗的名称,真正严格的方法应该把这种技术叫做“文件系统实时监视技术”。这一技术在国内首次提出的荣誉无疑应该归功于南京信源自动化技术有限公司。
一九九七年三月,中国。江苏,南京,当时微软的视窗3。1操作系统刚刚开始流行,视窗95才出现的时候,在南京解放路上一栋两层的小楼房里,南京信源公司的办公室里,一群初出茅庐的年轻人,正在讨论最新的视窗操作系统,议题集中在两个方面,一个议题,是不是需要在视窗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)协调对文件系统和设备的访问,它接收以Wi