世上最完整的病毒分析及实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3章病毒分析

本章介绍病毒的原理与所使用的技术,以及防止病毒的方法:

●常见病毒的原理;

●可执行文件病毒修改文件的方法;

●可执行文件病毒使用的常用技术;

●优化可执行文件防病毒;

●文件过滤驱动在反病毒上的应用。

这是本章涉及的问题。

1.1 病毒概述

“计算机病毒”最早是由美国计算机病毒研究专家F.Cohen博士提出的。“计算机病毒”有很多种定义,国外流行的定义为:是一段附着在其他程序上的可以实现自我繁殖的程序代码。在《中华人民共和国计算机信息系统安全保护条例》中的定义为:“计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者数据,影响计算机使用并且能够自我复制的一组计算机指令或者程序代码”。

世界上第一例被证实的计算机病毒是在1983年,出现了计算机病毒传播的研究报告。同时有人提出了蠕虫病毒程序的设计思想;1984年,美国人Thompson开发出了针对UNIX 操作系统的病毒程序。1988年11月2日晚,美国康尔大学研究生罗特·莫里斯将计算机病毒蠕虫投放到网络中。该病毒程序迅速扩展,造成了大批计算机瘫痪,甚至欧洲联网的计算机都受到影响,直接经济损失近亿美元。

计算机病毒是人为编写的,具有自我复制能力,是未经用户允许执行的代码。一般正常的程序是由用户调用,再由系统分配资源,完成用户交给的任务。其目的对用户是可见的、透明的。而病毒具有正常程序的一切特性,它隐藏在正常程序中,当用户调用正常程序时窃取到系统的控制权,先于正常程序执行,病毒的动作、目的对用户时未知的和未经用户允许的。它的主要特征有传染性、隐蔽性、潜伏性、破坏性和不可预见性。传染性是病毒最重要的一条特性。

按照计算机病毒侵入的系统分类,分为DOS系统下的病毒、Windows系统下的病毒、UNIX系统下的病毒和OS/2系统下的病毒。按照计算机病毒的链接方式分类可分为源码型病毒、嵌入型病毒、外壳型病毒。按照传播介质分类,可以分为可分为单机病毒和网络病毒。

随着Windows系统的发展,引导型病毒已经不再,宏病毒也少见。目前见得多的是感

染本机可执行文件的PE病毒和通过网络在计算机之间传播的蠕虫病毒比较常见。

1.2 PE病毒分析

Windows下常见的可执行文件,一种是二进制文件,就是扩展名为exe、dll、src和sys 等的文件,它们的执行是由explorer.exe(资源管理器)、cmd.exe(控制台,类似DOS界面)或其它程序调用执行的。另一种是文本格式文件,例如扩展名为htm和html,可以由iexplorer.exe调用,由script.exe来解释执行的文件。

从Windows2000以后,其二进制文件文件为PE结构。PE的意思就是可移植的执行体(Portable Executable),它是 Windows的32位环境自身所带的执行体文件格式。它的一些特性继承自 Unix的 Coff (common object )文件格式,同时为了保证与旧版本MS-DOS 及Windows操作系统的兼容,PE文件格式也保留了MS-DOS中那熟悉的MZ头部。病毒能够感染PE文件,因为病毒设计者深知其结构。

1.2.1 PE病毒常用技术

病毒也和正常的应用程序一样,涉及到函数的调用和变量的使用。

1、调用API函数的方法

API是“Application Programming Interface”的英文缩写,很象DOS下的中断。中断是系统提供的功能,在DOS运行后就被装载在内存中,而API函数是当应用程序运行时,通过将函数所在的动态连接库装载到内存后调用函数的。请大家先在MSDN的“索引”中输入函数“MessageBox”然后回车,就可以查到该函数的使用方法。MSDN是微软提供的开发帮助,是在Windows下编程必备的资料文件。

在Windows下设计应用程序不直接或间接使用API是不可能的,有些高级语言看似没有使用API,只不过它们提供的模块对API进了封装。

API的使用分为静态和动态使用两种方式。在源程序中调用API两种方式都可以使用,但对未公开API因为无相应的头文件,只能使用动态方式。下面以VC++中调用MessageBox 说明两种方式的区别。

(1) 静态方式

char note_inf[]=”谢谢使用”;

char note_head[]=”提示信息”;

::MessageBox(0, note_inf, note_head,MB_OK); //::表示全局函数

反汇编结果如图3-1。“PUSH 00000000”对应的是MB_OK常量入栈,“PUSH 0040302C”

相关文档
最新文档