图解用工具对PE文件格式做初步研究

工具:

PETool,MiniHex,PEViewer

以本机notepad.exe为研究对象。本机64位,该notepad.exe是64位应用程序。

1 用peviewer打开

PE文件大体包括四部分,DOS头,NT头,节表以及具体的节。下图展示的是前三部分。

2 DOS头

e_magic:一个WORD类型,值是一个常数0x4D5A,用文本编辑器查看该值位‘MZ’,可执行文件必须都是‘MZ‘开头。

e_lfanew:为32位可执行文件扩展的域,用来表示DOS头之后的NT头相对文件起始地址的偏移。

看下图左方给出的e_lfanew为0x000000E8,在下图右方找到此地址,如右方000000E0所示行的光标处;

起始四个字节是50 45 00 00,和右图的PE头的Signature相符合;

3 文件头

PE文件头的定义:

typedef struct _IMAGE_FILE_HEADER {

WORD    Machine;

WORD    NumberOfSections;

DWORD   TimeDateStamp;

DWORD   PointerToSymbolTable;

DWORD   NumberOfSymbols;

WORD    SizeOfOptionalHeader;

WORD    Characteristics;

} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

Machine:该文件的运行平台,是x86、x64还是I64等等,可以是下面值里的某一个。

NumberOfSections:该PE文件中有多少个节,也就是节表中的项数。

TimeDateStamp:PE文件的创建时间,一般有连接器填写。

对照下图左方显示和右方光标处,其内容相符合;

4 导入表

自己算下导入表的起始地址,比较难算;用工具看下,如下图;导入表起始地址是

0x00000178

peviewer给出的导入表内容;

看16进制文件中的00000178,与peviewer给出的似乎不符,不过此处还不太理解;

16进制文件和PETool给出的内容是相符合的;

5 导入表中的函数名

试着找下导入的SetWindowText函数的名字在16进制文件中的位置;

什么是Thunk RVA,对相关计算尚不太熟悉;

直接找到0000D640处看看,不是SetWindowText;

用搜索功能找SetWindowText;在如下位置;这个RVA的计算是比较复杂;以后再搞;

链接

http://www.pediy.com/kssd/tutorial/chap8-1-6.htm

http://blog.csdn.net/evileagle/article/details/11693499

时间: 2024-10-05 21:57:13

图解用工具对PE文件格式做初步研究的相关文章

图解使用PowerTool对Windows内核做初步研究探索

PowerTool下载 http://pan.baidu.com/s/1skZx4TZ PowerTool_1.6_PortableSoft.7z 1 系统检测 自动检测了如下安全项: 有个 流氓快捷方式 项 顽固桌面图标删不掉3种办法: 1.桌面上点鼠标右键-排列图标-运行桌面图标清理向导-选择要清理的图标-点下一步就可以了 2.如果有360安全卫士,可以尝试: 打开 360安全卫士--修复IE,全选,立即修复! 然后打开 360顽固木马专杀大全(百度搜索下载),里面也有一个修复, 把里面的与

C++PE文件格式解析类(轻松制作自己的PE文件解析器)

PE是Portable Executable File Format(可移植的运行体)简写,它是眼下Windows平台上的主流可运行文件格式. PE文件里包括的内容非常多,详细我就不在这解释了,有兴趣的能够參看之后列出的參考资料及其它相关内容. 近期我也在学习PE文件格式,參考了很多资料.用C++封装了一个高效方便的PE文件格式解析的类. 该类对想学PE文件结构的朋友可算一份可贵的资料.代码均非常易懂,考虑较全面,具有一定的通用性. 同一时候该类也能够让想创建自己的PE文件解析软件的朋能够轻松在

深入理解 Win32 PE 文件格式

深入理解 Win32 PE 文件格式 Matt Pietrek 这篇文章假定你熟悉C++和Win32. 概述 理解可移植可执行文件格式(PE)可以更好地了解操作系统.如果你知道DLL和EXE中都有些什么东西,那么你就是一个知识渊博的程序员.这一系列文章的第一部分,讨论最近这几年PE格式所发生的变化. 这次更新后,作者讨论了PE格式如何适应于用.NET开发的应用程序,包括PE节,RVA,数据目录,以及导入函数.附录中包含了相关的映像头结构以及它们的描述. 很早以前,我为微软系统期刊(现在叫做MSD

PE文件格式分析

第一阶段:PE文件格式分析 使用UltraEdit观察PE文件例子程序hello-2.5.exe的16进制数据,在打印稿中画出该PE文件基本结构. 使用Ollydbg对该程序进行初步调试,了解该程序功能结构,在内存中观察该程序的完整结构. 熟悉各类PE文件格式查看和编辑工具(PEView.Stud_PE等). 使用UltraEdit修改该程序,使得该程序仅弹出第二个对话框. 第二阶段:熟悉并分析PE文件的引出表 找到系统System32目录下的user32.dll文件,用UltraEdit打开并

PE文件格式详解(上)

作者:MSDN 译者:李马 摘要 Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式.PE文件格式的规范包含在了MSDN的CD中(Specs and Strategy, Specifications, Windows NT File Format Specifications),但是它非常之晦涩.  然而这一的文档并未提供足够的信息,所以开发者们无法很好地弄懂PE格式.本文旨在解决这一问题,它会对整个的PE文件格式作一个十分彻底的解释,另外,本文中还带有对所有必需结构的描述

PE文件格式详解(六)

0x00 前言 前面两篇讲到了输出表的内容以及涉及如何在hexWorkShop中找到输出表及输入DLL,感觉有几个地方还是没有理解好,比如由数据目录表DataDirectory[16]找到输出表表后以为找到输入DLL就完了,其实这一流程的最终功能是通过输入DLL找到输入DLL调用的函数,这一步骤是通过输出表结构中的OriginalFristThunk或者OriginalFristThunk所指向的INT或者IAT结构来找到的.这里要说明的是,虽然一般情况通过OriginalFristThunk也

PE文件格式详解(下)

作者:MSDN译者:李马 预定义段 一个Windows NT的应用程序典型地拥有9个预定义段,它们是.text..bss..rdata..data..rsrc..edata..idata..pdata和.debug.一些应用程序不需要所有的这些段,同样还有一些应用程序为了自己特殊的需要而定义了更多的段.这种做法与MS-DOS和Windows 3.1中的代码段和数据段相似.事实上,应用程序定义一个独特的段的方法是使用标准编译器来指示对代码段和数据段的命名,或者使用名称段编译器选项-NT——就和Wi

PE文件格式详解(四)

PE文件格式详解(四) 0x00 前言 上一篇介绍了区块表的信息,以及如何在hexwrokshop找到区块表.接下来,我们继续深入了解区块,并且学会文件偏移和虚拟地址转换的知识. 0x01 区块对齐值 首先我们要知道啥事区块对齐?为啥要区块对齐?这个问题其实困扰了我很久,只能怪我操作系统没学好...我现在的理解是由于内存和磁盘存在分页的问题所以使得不同区块一般要放到不同的分页中,当然也可以多个区块合并以节省空间,但是对于不能合并的区块如代码和数据块就不得不放在不同分页上了.学过操作系统的都知道不

移动应用是大势所趋,微信开发初步研究尝试

微信在我们生活中已无所不在,几乎人手一个手机一个微信,天天刷朋友圈.而作为商家和企业应用的服务号和企业号的开发也是移动应用开发的一个新方向. 经过近期对微信开发进行初步研究,对微信开发有了一些了解,可以打通微信与数据库的查询及交互,实现一些应用系统的定制开发.接下来要做的就是根据实际业务需要来开工建设. 微信除了企业内部应用外,在商业环境的应用如支付.活动现场等的应用也是支持的较好.另外微信wifi项目也可作为一个独立分支结合无线路由器来作为一个广大的商业市场进行运作开发. 微信提供了工具和平台