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