⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 关于pe可执行文件的修改.htm

📁 关于PE可执行文件的修改
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0046)http://www.xfocus.net/articles/200109/266.html -->
<HTML><HEAD><TITLE>关于PE可执行文件的修改</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META 
content="安全焦点, xfocus, 陷阱网络, honeynet, honeypot, 调查取证, forensic, 入侵检测, intrusion detection, 无线安全, wireless security, 安全论坛, security forums, 安全工具, security tools, 攻击程序, exploits, 安全公告, security advisories, 安全漏洞, security vulnerabilities, 安全教程, security tutorials, 安全培训, security training, 安全帮助, security help, 安全标准, security standards, 安全代码, security code, 安全资源, security resources, 安全编程, security programming, 加密, cryptography," 
name=Keywords><LINK href="关于PE可执行文件的修改.files/plone.css" type=text/css 
rel=stylesheet>
<META content="MSHTML 6.00.2800.1400" name=GENERATOR></HEAD>
<BODY text=#000000 bgColor=#ffffff>
<DIV class=top>
<DIV class=searchBox>
<FORM name=searchform action=http://www.google.com/search method=get><INPUT 
type=hidden value=www.xfocus.net name=domains> <INPUT type=hidden 
value=www.xfocus.net name=sitesearch> <INPUT name=q> <INPUT type=submit value="Google Search" name=btnG> </FORM></DIV><IMG height=80 
alt="xfocus logo" src="关于PE可执行文件的修改.files/logo.gif" width=180 border=0> <IMG 
height=20 alt="xfocus title" src="关于PE可执行文件的修改.files/title.gif" width=230 
border=0> </DIV>
<DIV class=tabs><A class=plain href="http://www.xfocus.net/index.html">首页</A> <A 
class=plain href="http://www.xfocus.net/releases/index.html">焦点原创</A> <A 
class=selected href="http://www.xfocus.net/articles/index.html">安全文摘</A> <A 
class=plain href="http://www.xfocus.net/tools/index.html">安全工具</A> <A 
class=plain href="http://www.xfocus.net/vuls/index.html">安全漏洞</A> <A class=plain 
href="http://www.xfocus.net/projects/index.html">焦点项目</A> <A class=plain 
href="https://www.xfocus.net/bbs/index.php?lang=cn">焦点论坛</A> <A class=plain 
href="http://www.xfocus.net/about/index.html">关于我们</A> </DIV>
<DIV class=personalBar><A 
href="https://www.xfocus.net/php/add_article.php">添加文章</A> <A 
href="http://www.xfocus.org/">English Version</A> </DIV>
<TABLE class=columns>
  <TBODY>
  <TR>
    <TD class=left>
      <DIV class=box>
      <H5>&nbsp;文章分类&nbsp;</H5>
      <DIV class=body>
      <DIV class="content odd">
      <DIV style="WHITE-SPACE: nowrap"><IMG 
      src="关于PE可执行文件的修改.files/folder_icon.gif" border=0> <A 
      href="http://www.xfocus.net/articles/4.html">专题文章</A><BR><IMG 
      src="关于PE可执行文件的修改.files/folder_icon.gif" border=0> <A 
      href="http://www.xfocus.net/articles/2.html">漏洞分析</A><BR><IMG 
      src="关于PE可执行文件的修改.files/folder_icon.gif" border=0> <A 
      href="http://www.xfocus.net/articles/3.html">安全配置</A><BR><IMG 
      src="关于PE可执行文件的修改.files/folder_icon.gif" border=0> <A 
      href="http://www.xfocus.net/articles/1.html">黑客教学</A><BR><IMG 
      src="关于PE可执行文件的修改.files/folder_icon.gif" border=0> <A 
      href="http://www.xfocus.net/articles/5.html"><B>编程技术 
      &lt;&lt;</B></A><BR><IMG src="关于PE可执行文件的修改.files/folder_icon.gif" 
      border=0> <A href="http://www.xfocus.net/articles/7.html">工具介绍</A><BR><IMG 
      src="关于PE可执行文件的修改.files/folder_icon.gif" border=0> <A 
      href="http://www.xfocus.net/articles/6.html">火墙技术</A><BR><IMG 
      src="关于PE可执行文件的修改.files/folder_icon.gif" border=0> <A 
      href="http://www.xfocus.net/articles/8.html">入侵检测</A><BR><IMG 
      src="关于PE可执行文件的修改.files/folder_icon.gif" border=0> <A 
      href="http://www.xfocus.net/articles/9.html">破解专题</A><BR><IMG 
      src="关于PE可执行文件的修改.files/folder_icon.gif" border=0> <A 
      href="http://www.xfocus.net/articles/11.html">焦点公告</A><BR><IMG 
      src="关于PE可执行文件的修改.files/folder_icon.gif" border=0> <A 
      href="http://www.xfocus.net/articles/12.html">焦点峰会</A><BR></DIV></DIV></DIV></DIV>
      <DIV class=box>
      <H5>&nbsp;文章推荐&nbsp;</H5>
      <DIV class=body>
      <DIV class="content odd"><IMG src="关于PE可执行文件的修改.files/document_icon.gif" 
      border=0> <A href="http://www.xfocus.net/articles/200307/579.html">LSD RPC 
      溢出漏洞之分析</A><BR><IMG src="关于PE可执行文件的修改.files/document_icon.gif" border=0> 
      <A href="http://www.xfocus.net/articles/200306/562.html">任意用户模式下执行 ring 0 
      代码</A><BR><IMG src="关于PE可执行文件的修改.files/document_icon.gif" border=0> <A 
      href="http://www.xfocus.net/articles/200307/563.html">IIS的NSIISLOG.DLL溢出问题分析</A><BR></DIV></DIV></DIV></TD>
    <TD class=main>
      <H1>关于PE可执行文件的修改</H1><BR>创建时间:2001-09-21<BR>文章属性:原创<BR>文章提交:<A 
      href="https://www.xfocus.net/bbs/index.php?lang=cn&amp;act=Profile&amp;do=03&amp;MID=3079">ILSY</A> 
      (masteruser_at_263.net)<BR><BR>在windows 
      9x、NT、2000下,所有的可执行文件都是基于Microsoft设计的一种新的文件格式Portable Executable File 
      Format(可移植的执行体),即PE格式。有一些时候,我们需要对这些可执行文件进行修改,下面文字试图详细的描述PE文件的格式及对PE格式文件的修改。<BR>1、PE文件框架构成<BR>DOS 
      MZ header<BR>DOS stub <BR>PE header <BR>Section table <BR>Section 1 
      <BR>Section 2 <BR>Section ... <BR>Section n <BR>上表是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"。<BR>紧接着 DOS stub 的是 PE header。 PE header 是PE相关结构 
      IMAGE_NT_HEADERS 的简称,其中包含了许多PE装载器用到的重要域。可执行文件在支持PE文件结构的操作系统中执行时,PE装载器将从 
      DOS MZ header的偏移3CH处找到 PE header 的起始偏移量。因而跳过了 DOS stub 直接定位到真正的文件头 PE 
      header。<BR>PE文件的真正内容划分成块,称之为sections(节)。每节是一块拥有共同属性的数据,比如“.text”节等,那么,每一节的内容都是什么呢?实际上PE格式的文件把具有相同属性的内容放入同一个节中,而不必关心类似“.text”、“.data”的命名,其命名只是为了便于识别,所有,我们如果对PE格式的文件进行修改,理论上讲可以写入任何一个节内,并调整此节的属性就可以了。<BR>PE 
      header 接下来的数组结构 section table(节表)。 
      每个结构包含对应节的属性、文件偏移量、虚拟偏移量等。如果PE文件里有5个节,那么此结构数组内就有5个成员。<BR>以上就是PE文件格式的物理分布,下面将总结一下装载一PE文件的主要步骤:<BR>1、&nbsp;&nbsp;&nbsp;&nbsp;PE文件被执行,PE装载器检查 
      DOS MZ header 里的 PE header 偏移量。如果找到,则跳转到 PE header。 <BR>2、PE装载器检查 PE 
      header 的有效性。如果有效,就跳转到PE header的尾部。 <BR>3、紧跟 PE header 
      的是节表。PE装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,同时付上节表里指定的节属性。 
      <BR>4、PE文件映射入内存后,PE装载器将处理PE文件中类似 import table(引入表)逻辑部分。 
      <BR>上述步骤是一些前辈分析的结果简述。<BR>2、PE文件头概述<BR>我们可以在winnt.h这个文件中找到关于PE文件头的定义:<BR>typedef 
      struct _IMAGE_NT_HEADERS {<BR>DWORD 
      Signature;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>//PE文件头标志 
      :“PE\0\0”。在开始DOS header的偏移3CH处所指向的地址开始<BR>IMAGE_FILE_HEADER 
      FileHeader;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PE文件物理分布的信息<BR>IMAGE_OPTIONAL_HEADER32 
      OptionalHeader;&nbsp;&nbsp;&nbsp;&nbsp;//PE文件逻辑分布的信息<BR>} 
      IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;<BR><BR>typedef struct 
      _IMAGE_FILE_HEADER 
      {<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;Machine;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//该文件运行所需要的CPU,对于Intel平台是14Ch<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;NumberOfSections;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//文件的节数目<BR>DWORD&nbsp;&nbsp; 
      TimeDateStamp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//文件创建日期和时间<BR>DWORD&nbsp;&nbsp; 
      PointerToSymbolTable;&nbsp;&nbsp;&nbsp;&nbsp;//用于调试<BR>DWORD&nbsp;&nbsp; 
      NumberOfSymbols;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//符号表中符号个数<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;SizeOfOptionalHeader;&nbsp;&nbsp;&nbsp;&nbsp;//OptionalHeader 
      结构大小<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;Characteristics;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//文件信息标记,区分文件是exe还是dll<BR>} 
      IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;<BR><BR>typedef struct 
      _IMAGE_OPTIONAL_HEADER 
      {<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;Magic;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//标志字(总是010bh)<BR>BYTE&nbsp;&nbsp;&nbsp;&nbsp;MajorLinkerVersion;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//连接器版本号<BR>BYTE&nbsp;&nbsp;&nbsp;&nbsp;MinorLinkerVersion;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<BR>DWORD&nbsp;&nbsp; 
      SizeOfCode;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//代码段大小<BR>DWORD&nbsp;&nbsp; 
      SizeOfInitializedData;&nbsp;&nbsp;&nbsp;&nbsp;//已初始化数据块大小<BR>DWORD&nbsp;&nbsp; 
      SizeOfUninitializedData;&nbsp;&nbsp;&nbsp;&nbsp;//未初始化数据块大小<BR>DWORD&nbsp;&nbsp; 
      AddressOfEntryPoint;&nbsp;&nbsp;&nbsp;&nbsp;//PE装载器准备运行的PE文件的第一个指令的RVA,若要改变整个执行的流程,可以将该值指定到新的RVA,这样新RVA处的指令首先被执行。(许多文章都有介绍RVA,请去了解)<BR>DWORD&nbsp;&nbsp; 
      BaseOfCode;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//代码段起始RVA<BR>DWORD&nbsp;&nbsp; 
      BaseOfData;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据段起始RVA<BR>DWORD&nbsp;&nbsp; 
      ImageBase;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PE文件的装载地址<BR>DWORD&nbsp;&nbsp; 
      SectionAlignment;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//块对齐<BR>DWORD&nbsp;&nbsp; 
      FileAlignment;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//文件块对齐<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;MajorOperatingSystemVersion;//所需操作系统版本号<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;MinorOperatingSystemVersion;//<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;MajorImageVersion;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用户自定义版本号<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;MinorImageVersion;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;MajorSubsystemVersion;&nbsp;&nbsp;&nbsp;&nbsp;//win32子系统版本。若PE文件是专门为Win32设计的<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;MinorSubsystemVersion;&nbsp;&nbsp;&nbsp;&nbsp;//该子系统版本必定是4.0否则对话框不会有3维立体感<BR>DWORD&nbsp;&nbsp; 
      Win32VersionValue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保留<BR>DWORD&nbsp;&nbsp; 
      SizeOfImage;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//内存中整个PE映像体的尺寸<BR>DWORD&nbsp;&nbsp; 
      SizeOfHeaders;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//所有头+节表的大小<BR>DWORD&nbsp;&nbsp; 
      CheckSum;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//校验和<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;Subsystem;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//NT用来识别PE文件属于哪个子系统<BR>WORD&nbsp;&nbsp;&nbsp;&nbsp;DllCharacteristics;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<BR>DWORD&nbsp;&nbsp; 
      SizeOfStackReserve;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<BR>DWORD&nbsp;&nbsp; 
      SizeOfStackCommit;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<BR>DWORD&nbsp;&nbsp; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -