关于PE可执行文件的修改课件.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于 PE 可执行文件的修改 在 windows 9x 、NT 、2000 下,所有的可执行文件都是基于 Microsoft 设计的一种新的 文件格式 Portable Executable File Format (可移植的执行体) ,即 PE 格式。有一些时候,我 们需要对这些可执行文件进行修改,下面文字试图详细的描述 PE 文件的格式及对 PE 格式 文件的修改。 1、 PE 文件框架构成 DOS MZ header DOS stub PE header Section table Section 1 Section 2 Section ... Section n 上 表是 PE 文件结构的总体层次分布。所有 PE 文件(甚至 32 位的 DLLs) 必须以一个 简单的 DOS MZ header 开始,在偏移 0 处有 DOS 下可执行文件的 “MZ标志 ”,有了它,一 旦程序在 DOS 下执行, DOS 就能识别出这是有效的执行体,然后运行紧随 MZ header 之后 的 DOS stub。DOS stub 实际上是个有效的 EXE ,在不支持 PE 文件格式的操作系统中,它 将简单显示一个错误提示,类似于字符串 This program cannot run in DOS mode 或者程序 员可根据自己的意图实现完整的 DOS 代码。通常 DOS stub 由汇编器 /编译器自动生成,对 我 们 的 用 处 不 是 很 大 , 它 简 单 调 用 中 断 21h 服 务 9 来 显 示 字 符 串 This program cannot run in DOS mode 。 紧接着 DOS stub 的是 PE header。PE header是PE 相关结构 IMAGE_NT_HEADERS 的 简称,其中包含了许多 PE 装载器用到的重要域。可执行文件在支持 PE 文件结构的操作系 统中执行时, PE 装载器将从 DOS MZ header 的偏移 3CH 处找到 PE header 的起始偏移量。 因而跳过了 DOS stub 直接定位到真正的文件头 PE header。 PE 文件的真正内容划分成块, 称之为 sections(节)。每节是一块拥有共同属性的数据, 比如 “.text节”等,那么,每一节的内容都是什么呢?实际上 PE 格式的文件把具有相同属性 的内容放入同一个节中, 而不必关心类似 “.text、”“.data的”命名, 其命名只是为了便于识别, 所有,我们如果对 PE 格式的文件进行修改,理论上讲可以写入任何一个节内,并调整此节 的属性就可以了。 PE header接下来的数组结构 section table(节表)。 每个结构包含对应节的属性、文件 偏移量、虚拟偏移量等。如果 PE 文件里有 5 个节,那么此结构数组内就有 5 个成员。 以上就是 PE 文件格式的物理分布,下面将总结一下装载一 PE 文件的主要步骤: 1、PE 文件被执行, PE 装载器检查 DOS MZ header 里的 PE header偏移量。 如果找到, 则跳转到 PE header。 2、PE 装载器检查 PE header 的有效性。如果有效,就跳转到 PE header 的尾部。 3、紧跟 PE header的是节表。 PE 装载器读取其中的节信息, 并采用文件映射方法将这 些节映射到内存,同时付上节表里指定的节属性。 4、PE 文件映射入内存后, PE 装载器将处理 PE 文件中类似 import table (引入表)逻 辑部分。 上述步骤是一些前辈分析的结果简述。 2、 PE 文件头概述 我们可以在 winnt.h 这个文件中找到关于 PE 文件头的定义: typedef struct _IMAGE_NT_HEADERS { DWORD Signature; //PE 文件头标志 :“PE 0”。在开始 DOS header 的偏移 3CH 处所指向的地址开始 IMAGE_FILE_HEADER FileHeader; //PE 文件物理分布的信息 IMAGE_OPTIONAL_HEADER32 OptionalHeader; //PE 文件逻辑分布的信息 } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32; typedef struct _IMAGE_FILE_HEADER { WORD Machine; // 该文件运行所需要的 CPU,对于 Intel 平台是 14Ch WORD NumberOfSections; // 文件的节数目 DWORD TimeDateStamp; // 文件创建日期和时间 DWORD PointerToSymbolTable

文档评论(0)

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

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

1亿VIP精品文档

相关文档