第3章 传统计算机病毒-补充知识.ppt
《第3章 传统计算机病毒-补充知识.ppt》由会员分享,可在线阅读,更多相关《第3章 传统计算机病毒-补充知识.ppt(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章 传统计算机病毒补充知识刘功申 上海交通大学网络空间安全学院推荐参考资料 学习本章前,建议学习并掌握PE可执行文件的结构及运行原理。推荐参考罗云彬编著的Windows环境下32位汇编语言程序设计。64位汇编资料https:/ (1)PE文件格式总体结构 PE(Portable Executable:可移植的执行体)是Win32环境自身所带的可执行文件格式。它的一些特性继承自Unix的Coff(Common Object File Format)文件格式。可移植的执行体意味着此文件格式是跨win32平台的,即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识
2、别和使用该文件格式。当然,移植到不同的CPU上PE执行体必然得有一些改变。除VxD和16位的Dll外,所有win32执行文件都使用PE文件格式。因此,研究PE文件格式是我们洞悉Windows结构的良机。PE文件结构总体层次分布DOS MZ headerMZ格式头DOS stubDos桩程序PE headerPE文件头Section table节表Section 1第1个节Section 2第2个节Section n第n个节所有PE文件必须以一个简单的DOS MZ header开始。有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体。DOS stub实际上是个有效的EXE,在不支持
3、PE文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串“该程序不能在DOS模式下运行”或者程序员可根据自己的意图实现完整的DOS代码。PE header是PE相关结构IMAGE_NT_HEADERS的简称,其中包含了许多PE装载器用到的重要域。section table(节表)是节的索引。PE文件的真正内容被划分成块,我们称之为sections(节)。每节是一块拥有共同属性的数据,比如代码/数据、读/写等。把PE文件想象成一逻辑磁盘,PE header是磁盘的boot扇区,而sections就是各种文件,每种文件自然就有不同属性如只读、系统、隐藏、文档等等。其中节表就像目录。值得我们
4、注意的是节的划分是基于各组数据的共同属性而不是逻辑概念。因此,我么不必关心节中类似于data,code或其他的逻辑概念。如果数据和代码拥有相同属性,它们就可以被归入同一个节中。节名称仅仅是个区别不同节的符号而已,类似于data和code等的节名称只为了便于识别,惟有节的属性设置决定了节的特性和功能。如果某块数据想作为只读属性,就可以将该块数据放入属性为只读的节中。装载PE文件的主要步骤 第一,当PE文件被执行,PE装载器检查DOS MZ header里的PE header偏移量。如果找到,则跳转到PE header。第二,PE装载器检查PE header的有效性。如果有效,就跳转到PE hea
5、der的尾部。第三,紧跟PE header的是节表。PE装载器读取其中的节索引信息,并采用文件映射方法将这些节映射到内存,同时附上节表里指定的节属性。第四,PE文件映射入内存后,PE装载器将处理PE文件中类似import table(引入表)逻辑部分。(2)检验PE文件的有效性 什么样的文件是有效的?只要一些关键数据结构有效,我们就认为是有效的PE文件了。这个重要数据结构就是PE header。从编程角度看,PE header实际就是一个IMAGE_NT_HEADERS 结构。IMAGE_NT_HEADERS 结构的定义如下:IMAGE_NT_HEADERS STRUCTSignature d
6、dFileHeader IMAGE_FILE_HEADEROptionalHeader IMAGE_OPTIONAL_HEADER32IMAGE_NT_HEADERS ENDS Signature:该域为PE标记,值为50h,45h,00h,00h(PE00)。IMAGE_DOS_SIGNATURE equ 5A4DhIMAGE_OS2_SIGNATURE equ 454EhIMAGE_OS2_SIGNATURE_LE equ 454ChIMAGE_VXD_SIGNATURE equ 454ChIMAGE_NT_SIGNATURE equ 4550h FileHeader:该结构域包含了关于P
7、E文件物理分布的信息,比如节数目、文件执行机器等。OptionalHeader:该结构域包含了关于PE文件逻辑分布的信息。定位PE header DOSMZ header(IMAGE_DOS_HEADER)包含了指向PE header 的文件偏移量,即e_lfanew。定位步骤为:第一,检验文件头部第一个字的值是否等于IMAGE_DOS_SIGNATURE,是则DOS MZ header有效。第二,一旦证明文件的DOS MZ header有效后,就可用e_lfanew来定位PE header了。第三,比较PE header的第一个字的值是否等于IMAGE_NT_ SIGNATURE。如果前后两
8、个值都匹配,那我们就认为该文件是一个有效的PE文件。(3)文件头(FileHeader)文件头(FileHeader)是IMAGE_NT_HEADERS的一个重要的域。文件头的表示结构为:IMAGE_FILE_HEADER STRUCTMachine WORDNumberOfSections WORDTimeDateStamp ddPointerToSymbolTable ddNumberOfSymbols ddSizeOfOptionalHeader WORDCharacteristics WORDIMAGE_FILE_HEADER ENDS 域名含义Machine该文件运行所要求的CPU。
9、对于Intel平台,该值是IMAGE_FILE_MACHINE_I386(14Ch)。NumberOfSections文件的节数目。如果我们要在文件中增加或删除一个节,就需要修改这个值。TimeDateStamp文件创建日期和时间。要让它保持原样,不要变PointerToSymbolTable用于调试。NumberOfSymbols用于调试。SizeOfOptionalHeader指示紧随本结构之后的OptionalHeader结构大小,必须为有效值。Characteristics关于文件信息的标记,比如文件是exe还是dll。注:节、节表和NumberOfSections的关系节表数组边界确
10、定。NumberOfSections,全标示(4)Optional Header Optional Header是PE header中最后,最大,也是最重要的成员,包含了PE文件的逻辑分布信息。该结构共有31个域。虚拟地址(VAVirtual Address)RVA(Relative Virtual Address,相对虚拟地址)域名含义AddressOfEntryPointPE装载器准备运行的PE文件的第一个指令的RVA。若您要改变整个执行的流程,可以将该值指定到新的RVA,这样新RVA处的指令首先被执行。ImageBasePE文件的优先装载地址。比如,如果该值是400000H,PE装载器将
11、尝试把文件装到虚拟地址空间的400000H处。若该地址区域已被其他模块占用,那PE装载器会选用其他空闲地址。SectionAlignment内存中节对齐的粒度。例如,如果该值是4096(1000H),那么每节的起始地址必须是4096的倍数。若第一节从401000H开始且大小是10个字节,则下一节必定从402000H开始,即使401000H和402000H之间还有很多空间没被使用。FileAlignment文件中节对齐的粒度。含义类似SectionAlignment。MajorSubsystemVersionMinorSubsystemVersion Win32系统版本。SizeOfImage内
12、存中整个PE映像体的尺寸。它是所有头和节经过节对齐处理后的大小。SizeOfHeaders所有头+节表的大小,也就等于文件尺寸减去文件中所有节的尺寸。可以以此值作为PE文件第一节的文件偏移量。SubsystemNT用来识别PE文件属于哪个子系统。对于大多数Win32程序,只有两类值:Windows GUI 和 Windows CUI(控制台)。DataDirectoryIMAGE_DATA_DIRECTORY 结构数组。每个结构给出一个重要数据结构的RVA,比如引入地址表等。(5)节表(Section Table)Section Table是用来索引节的数组结构,其详细表示为:IMAGE_SI
13、ZEOF_SHORT_NAME equ 8IMAGE_SECTION_HEADER STRUCTName db IMAGE_SIZEOF_SHORT_NAME dup(?)union MiscPhysicalAddress ddVirtualSize ddEndsVirtualAddress ddSizeOfRawData ddPointerToRawData ddPointerToRelocations ddPointerToLinenumbers ddNumberOfRelocations dwNumberOfLinenumbers dwCharacteristics ddIMAGE_SE
14、CTION_HEADER ENDS 域名含义Name节名长不超过8字节。节名仅仅是个标记而已,可以选择任何名字甚至空着也行。节名不是一个ASCII字符串,所以不用null结尾。VirtualAddress本节的RVA。PE装载器将节映射至内存时会读取该值,如果域值是1000H,而PE文件装在地址400000H处,那么本节就被装载到401000H。SizeOfRawData经过文件对齐处理后的节尺寸。该域值代表需映射入内存的字节数。(假设一个文件的文件对齐尺寸是0 x200,如果VirtualSize域指示本节长度是0 x388字节,则本域值为0 x400,表示本节是0 x400字节长)。Poi
15、nterToRawData节基于文件的偏移量。PE装载器通过该值找到节数据在文件中的位置。Characteristics包含标记以指示节属性。节是否含有可执行代码、初始化数据、未初始数据,是否可写、可读等。PE装载器的工作步骤:第一,读取IMAGE_FILE_HEADER的NumberOfSections域,获取文件的节数目;第二,SizeOfHeaders域值作为节表的文件偏移量,并以此定位节表;第三,遍历整个结构数组检查各成员值;第四,对于每个结构,读取PointerToRawData域值并定位到该文件偏移量。然后再读取SizeOfRawData域值来决定映射内存的字节数。将Virtual
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 传统计算机病毒-补充知识 传统 计算机病毒 补充 知识
限制150内