病毒知识学习系列(1):初始病毒和PE结构

最近组里安排对病毒防御相关知识做了讲座,个人一直以来对这方面的知识都是一知半解,所以计划好好对这方面知识做个学习,这篇文章先开个头吧。。

1.什么是病毒,病毒的分类?

病毒是蓄意设计的一种软件程序,它旨在干扰计算机操作,记录、毁坏或删除数据,或者自行传播到其他计算机和整个 Internet。

病毒分类:

感染型:感染型病毒是指会修改用户机器上其他文件的病毒.  

木马:是以盗取用户敏感信息为目的的病毒.常见的有网游木马,网银木马等

后门:后门病毒是以控制用户机器为主要目的的病毒,常见的有灰鸽子,冰河等

蠕虫:可以自繁衍自传播的病毒,常见的有邮件蠕虫,IM蠕虫,网络蠕虫,恶鹰,QQ尾巴,冲击波。

流氓软件:未经用户授权的,弹出广告窗口的或者有一定商业目的的文件集合.往往采用Rootkit等技术,用户难以清除。

脚本病毒:使用vbscript,javascript写的病毒称为脚本病毒,常常做一些恶搞,比如不停的弹对话框,现在更多的还是最后要下PE病毒来干坏事,脚本病毒只是一个载体和过程,常见的有:欢乐时光病毒。

 

2.什么是PE文件?

 

PE的意思就是Portable Executable(可移植的执行体)。它是Win32环境自身所带的执行体文件格式,如:Exe文件,DLL文件均为PE格式。它的一些特性继承自Unix的Coff (common object file format)文件格式。"portable executable"(可移植的执行体)意味着此文件格式是跨win32平台的:即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识别和使用该文件格式。当然,移植到不同的CPU上PE执行体必然得有一些改变。所有win32执行体(除了VxD和16位的Dll)都使用PE文件格式,包括NT的内核模式驱动程序(kernel mode drivers)。

 

3.PE文件与病毒的关系?

会有这样一个问题,很多刚接触病毒的人不了解,了解病毒为什么需先知道PE?那是因为病毒本身是一个可执行文件,而windows上必须PE才可以运行,如果运行不起来,它能干什么坏事呢!并且,病毒也可以更改PE的一些内容,把自己嵌到一个可执行文件中。无论病毒以什么方式传播,抑或做什么坏事,它最终仍将以可执行代码的方式到达你的计算机。所以研究病毒,分析病毒,了解PE结构,学习病毒如何去修改PE是必须的。

 

4.简要理解PE文件结构?

由于PE文件结构的细节涉及很多很复杂的东西,所以这里主要对PE文件结构做一个简要的入门了解,以下是简化的PE文件结构:

PE文件结构(简化):                       

  │1,DOS MZ header│

  -----------------

  │2,DOS stub │

  -----------------

  │3,PE header │

  -----------------

  │4,Section table│

  -----------------

  │5,Section 1 │

  -----------------

  │6,Section 2 │

  -----------------

  │ Section ... │

  -----------------

  │n,Section n │

所有常见的PE结构定义在winnt.h头文件中都有。我们一般关心以下几项: 

  IMAGE_DOS_HEADER 

  IMAGE_FILE_HEADER 

  IMAGE_OPTIONAL_HEADER32 

  IMAGE_SECTION_HEADER 

  IMAGE_NT_HEADERS 

  IMAGE_IMPORT_DESCRIPTOR 

  IMAGE_EXPORT_DIRECTORY 

  IMAGE_RESOURCE_DIRECTORY 

  首先我们看到PE文件最开头的是DOS MZ Header部分,有了它一旦程序在DOS下执行,DOS就能识别出这是有效的执行体。并且操作系统中的PE文件装载器可以通过DOS MZ Header 中的内容定位到PE Header 的起始偏移量。在这里我们最关心的部分是IMAGE_DOS_HEADER的e_lfanew这个成员,通过它我们可以找到PE Header。

 

紧随DOS MZ Header 部分的是DOS stub,这部分我们不关心,因为它只是为了在在不支持 PE文件格式的操作系统中,简单显示一个错误提示,如" This program cannot run in DOS mode”。这个部分通常由编译器自动生成,当然程序员也可以自定义该部分的代码。

接下来是最重要的PE Header,PE Header 是PE 相关结构 IMAGE_NT_HEADERS 的简称,其中包含了许多PE 装载器用到的重要域。我们非常关心的入口点AddressOfEntryPoint 就在IMAGE_NT_HEADERS 中IMAGE_OPTIONAL_HEADER32 中。PE Header 后面的内容被称为节表,ection Table(节表)。 每个结构包含对应节的属性、文件偏移量、虚拟偏移量等。如果PE 文件里有5 个节,那么此结构数组内就有5个成员。如此PE装载器就可以根据节表定位每个节的属性和位置。PE文件的真正内容划分成块,称之为Section(节)。每节是一块拥有共同属性的数据,比如代码/ 数据、读/写等。

装载PE文件的流程:

1)。当PE文件被执行,PE装载器检查DOS HEADER里的PE HEADER偏移量。如果找到,则跳转到PE HEADER,否则提示这不是PE文件。

2)。PE装载器检查PE HEADER的有效性。如果有效,就跳转到PE HEADER的尾部。

3)。紧跟PE HEADER的是节表,PE装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,同时附上节表里指定的节属性。

4)。PE文件映射入内存后,PE装载器将处理PE文件中类似IMPORT TABLE的逻辑部分

从操作系统运行PE的角度也可以这么说:操作系统会分析这个PE,然后将EXE及所需要的DLL载入内存,重定向好引入表里面的函数地址,创建一个主线程,然后把主线程的运行地址指向PE上所标志的入口地址,这样就可以运行了。

以上是我对病毒和PE的一些基本知识的理解,杀毒软件如何分析PE,如何分析病毒,将在下回分解。


~~~~~~~~~~~~believe yourself ,nothing is impossible, write in 01.15.2009 by vivilorne~~~~~~~~~~~~~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值