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

  1. 1、本文档共130页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
世上最完整的病毒分析及实例.doc

? PAGE 404 ? 文档安全 ? PAGE 403 ? 第3章 病毒分析 第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 file format)文件格式,同时为了保证与旧版本MS-DOS及Windows操作系统的兼容,PE文件格式也保留了MS-DOS中那熟悉的MZ头部。病毒能够感染PE文件,因为病毒设计者深知其结构。 1.2.1 病毒也和正常的应用程序一样,涉及到函数的调用和变量的使用。 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对应的是MB_OK常量入栈,“PUSH 0040302C”对应的是一个字符串的偏移地址入栈,“PUSH对应的是另一个字

文档评论(0)

kanghao1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档