- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章 传统计算机病毒——补充知识 上海交通大学信息安全工程学院 刘功申 推荐参考资料 学习本章前,建议学习并掌握PE可执行文件的结构及运行原理。 推荐参考罗云彬编著的《Windows环境下32位汇编语言程序设计》第2版。 1PE文件结构及其运行原理 (1)PE文件格式总体结构 PE(Portable Executable:可移植的执行体) 是Win32环境自身所带的可执行文件格式。 它的一些特性继承自Unix的Coff(Common Object File Format)文件格式。 可移植的执行体意味着此文件格式是跨win32平台的,即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识别和使用该文件格式。 当然,移植到不同的CPU上PE执行体必然得有一些改变。 除VxD和16位的Dll外,所有 win32执行文件都使用PE文件格式。因此,研究PE文件格式是我们洞悉Windows结构的良机。 PE文件结构总体层次分布 所有 PE文件必须以一个简单的DOS MZ header开始。有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体。 DOS stub实际上是个有效的EXE,在不支持 PE文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串 “该程序不能在DOS模式下运行”或者程序员可根据自己的意图实现完整的DOS代码。 PE header是PE相关结构IMAGE_NT_HEADERS的简称,其中包含了许多PE装载器用到的重要域。 section table(节表) 是节的索引。 PE文件的真正内容被划分成块,我们称之为sections(节)。 每节是一块拥有共同属性的数据,比如代码/数据、读/写等。 把PE文件想象成一逻辑磁盘,PE header是磁盘的boot扇区,而sections就是各种文件,每种文件自然就有不同属性如只读、系统、隐藏、文档等等。其中节表就像目录。 值得我们注意的是——节的划分是基于各组数据的共同属性而不是逻辑概念。因此,我么不必关心节中类似于data, code或其他的逻辑概念。如果数据和代码拥有相同属性,它们就可以被归入同一个节中。 节名称仅仅是个区别不同节的符号而已,类似于data和code等的节名称只为了便于识别,惟有节的属性设置决定了节的特性和功能。如果某块数据想作为只读属性,就可以将该块数据放入属性为只读的节中。 装载PE文件的主要步骤 第一,当PE文件被执行,PE装载器检查DOS MZ header里的PE header偏移量。如果找到,则跳转到PE header。 第二,PE装载器检查PE header的有效性。如果有效,就跳转到PE header的尾部。 第三,紧跟PE header的是节表。PE装载器读取其中的节索引信息,并采用文件映射方法将这些节映射到内存,同时附上节表里指定的节属性。 第四,PE文件映射入内存后,PE装载器将处理PE文件中类似import table(引入表)逻辑部分。 (2)检验PE文件的有效性 什么样的PE文件是有效的? 只要一些关键数据结构有效,我们就认为是有效的PE文件了。 这个重要数据结构就是PE header。从编程角度看,PE header实际就是一个 IMAGE_NT_HEADERS 结构。 IMAGE_NT_HEADERS 结构的定义如下: IMAGE_NT_HEADERS STRUCT Signature dd FileHeader IMAGE_FILE_HEADER OptionalHeader IMAGE_OPTIONAL_HEADER32 IMAGE_NT_HEADERS ENDS Signature:该域为PE标记,值为50h, 45h, 00h, 00h(PE\0\0)。 IMAGE_DOS_SIGNATURE equ 5A4Dh IMAGE_OS2_SIGNATURE equ 454Eh IMAGE_OS2_SIGNATURE_LE equ 454Ch IMAGE_VXD_SIGNATURE equ 454Ch IMAGE_NT_SIGNATURE equ 4550h FileHeader:该结构域包含了关于PE文件物理分布的信息,比如节数目、文件执行机器等。 OptionalHeader:该结构域包含了关于PE文件逻辑分布的信息。 定位PE header DOSMZ header(IMAGE_DOS_HEADER )包含了指向PE header 的文件偏移量,即e_lfanew。 定位步骤为: 第一,检验文件头部第一个字的值是否等于IMAGE_DOS_SIGNATURE,是则DOS MZ header有效。 第二,一旦证明文件的DOS MZ header有
文档评论(0)