📄 关于pe可执行文件的修改.htm
字号:
<!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> 文章分类 </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>编程技术
<<</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> 文章推荐 </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&act=Profile&do=03&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、 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; <BR>//PE文件头标志
:“PE\0\0”。在开始DOS header的偏移3CH处所指向的地址开始<BR>IMAGE_FILE_HEADER
FileHeader; //PE文件物理分布的信息<BR>IMAGE_OPTIONAL_HEADER32
OptionalHeader; //PE文件逻辑分布的信息<BR>}
IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;<BR><BR>typedef struct
_IMAGE_FILE_HEADER
{<BR>WORD Machine; //该文件运行所需要的CPU,对于Intel平台是14Ch<BR>WORD NumberOfSections; //文件的节数目<BR>DWORD
TimeDateStamp; //文件创建日期和时间<BR>DWORD
PointerToSymbolTable; //用于调试<BR>DWORD
NumberOfSymbols; //符号表中符号个数<BR>WORD SizeOfOptionalHeader; //OptionalHeader
结构大小<BR>WORD Characteristics; //文件信息标记,区分文件是exe还是dll<BR>}
IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;<BR><BR>typedef struct
_IMAGE_OPTIONAL_HEADER
{<BR>WORD Magic; //标志字(总是010bh)<BR>BYTE MajorLinkerVersion; //连接器版本号<BR>BYTE MinorLinkerVersion; //<BR>DWORD
SizeOfCode; //代码段大小<BR>DWORD
SizeOfInitializedData; //已初始化数据块大小<BR>DWORD
SizeOfUninitializedData; //未初始化数据块大小<BR>DWORD
AddressOfEntryPoint; //PE装载器准备运行的PE文件的第一个指令的RVA,若要改变整个执行的流程,可以将该值指定到新的RVA,这样新RVA处的指令首先被执行。(许多文章都有介绍RVA,请去了解)<BR>DWORD
BaseOfCode; //代码段起始RVA<BR>DWORD
BaseOfData; //数据段起始RVA<BR>DWORD
ImageBase; //PE文件的装载地址<BR>DWORD
SectionAlignment; //块对齐<BR>DWORD
FileAlignment; //文件块对齐<BR>WORD MajorOperatingSystemVersion;//所需操作系统版本号<BR>WORD MinorOperatingSystemVersion;//<BR>WORD MajorImageVersion; //用户自定义版本号<BR>WORD MinorImageVersion; //<BR>WORD MajorSubsystemVersion; //win32子系统版本。若PE文件是专门为Win32设计的<BR>WORD MinorSubsystemVersion; //该子系统版本必定是4.0否则对话框不会有3维立体感<BR>DWORD
Win32VersionValue; //保留<BR>DWORD
SizeOfImage; //内存中整个PE映像体的尺寸<BR>DWORD
SizeOfHeaders; //所有头+节表的大小<BR>DWORD
CheckSum; //校验和<BR>WORD Subsystem; //NT用来识别PE文件属于哪个子系统<BR>WORD DllCharacteristics; //<BR>DWORD
SizeOfStackReserve; //<BR>DWORD
SizeOfStackCommit; //<BR>DWORD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -