PE文件格式

一、基本结构

1、DOS头一般到节区头成为PE头部分,其下称为PE体。文件的内容一般可分为代码(.text)、数据(.data)、资源(.rsrc),分别保存。

2、PE头与各节区的尾部存在一个区域,称为NULL填充,为了提高效率,计算机使用“最小基本单位”这一概念,文件/内存中节区的起始位置应该在各文件/内存最小单位的整数倍上。

3、RVA+ImageBase=VA

4、当DLL加载到进程虚拟内存指定位置时,可能该位置已经被占用,则需要使用重定位方式加载到其他空白的地方。

5、文件结束处有其他区域,是一些混杂的区域,包括重分配信息、符号表信息、行号信息以及字串表数据

二、PE头

1、DOS头:IMAGE_DOS_HEADER结构体中重要成员:e_magic:DOS签名(MZ)(文件开始为4D5A)、e_lfanew:指示NT头的偏移(根据不同文件有可变值)(Notepad.exe为000000E0小端序标识法)。

2、DOS存根:位于DOS头下方,是个可选项,大小不固定。多数由编译器或者汇编器自动生成。

3、NT头:IMAGE_NT_HEADERS重要成员:签名结构体(50450000h--“PE”00)、文件头和可选头,结构体大小为F8.

4、NT头:文件头:Machine(machine码)、NumberOfSections、SizeOfOptionalHeader、Characteristics(记住2000h和0002h两个值)

5、NT头:可选头:Magic、AddressOfEntryPoint、ImageBase、SectionAlignment/FileAlignment、SizeOfImage、SizeOfHeaders、Subsystem(区分文件)、NumberOfRvaAndSizes(数组大小)、DataDirectory(重要成员:EXPORT/IMPORT/RESOURCR/TLS Direction)

6、节区头

三、载入PE

1、PE被执行时,装载器为进程分配虚拟地址空间,在此情况下,并不是把完整的PE文件载入到磁盘中,而是做一个简单的内存映射。

2、PE装载器在内核中创建进程对象和主进程对象以及其他的内容。

3、PE装载器搜索输入表,装载应用程序所用的动态链接库,方式类似于应用程序的装载。

4、PE装载器执行PE文件首部所指定地址的代码,开始执行应用程序。

四、RVA TO RAW

RAW=RVA-VirtualAddress+PointToRawData

例子1:RVA=5000,求File Offset?

5000位于第一节区.text,假设基址为01000000则RAW=5000-1000+400=4400(这边需要文件和内存之间的映射关系)

例子2:RVA=13314,求File Offset

13314位于第三个节区.rsrc,RAW=13314-b000+8400=10714

五、IAT

1、IAT导入地址表:是一种表格,记录程序正在使用哪些库中的哪些函数。

2、DLL:加载DLL方式:显示链接,程序使用DLL加载,使用完毕后释放内存;隐式连接,程序开始时即一同加载DLL,程序终止时释放占用的内存。

3、DLL重定位:使得我们无法对实际地址硬编码,同时PE头中表示地址的是VA而不是RVA。

六、常用工具

1、PEID:通过搜索特征串搜索识别,不同语言编译的程序有固有的启动代码(可参见http://www.cnblogs.com/miaohj/p/5274211.html),被壳处理过的程序会留下与壳相关的软件信息,通过这些可以识别。下载地址:http://down.52pojie.cn/Tools/PEtools/

2、OllyDbg(OD):可视化用户模式调试器,结合了动态调试和静态调试的功能。通过OD脱壳的方式介绍也可参见http://www.cnblogs.com/miaohj/p/5274211.html 。同时也可参见http://www.52pojie.cn/thread-234739-1-1.html的简单教程。下载地址:http://down.52pojie.cn/Tools/Debuggers/

3、IDA Pro(IDA):静态反汇编工具。特性:交互和多处理器。能够详细分析文件各模块功能以及模块之间的复杂调用,准确分析函数的调用规范、参数和临时变量等信息。具体使用方式会在之后的学习中给出。下载地址:http://www.52pojie.cn/thread-319763-1-1.html

PE格式的理解(待补充)的更多相关文章

  1. 基础篇-初步认识PE格式

    1 PE(Portable Executable)格式,是Win32环境可移植可执行文件(如exe.dll.vxd.sys和vdm等)的标准文件格式.PE格式衍生于早期建立在VAX(R)VMS(R)上 ...

  2. WinHex分析PE格式(1)

    最近在一直努力学习破解,但是发现我的基础太差了,就想学习一下PE结构.可是PE结构里的结构关系太复杂,看这老罗的WiN32汇编最后一章 翻两页又合上了..把自己的信心都搞没了.感觉自己的理解能力不行, ...

  3. PE格式第六讲,导出表

    PE格式第六讲,导出表 请注意,下方字数比较多,其实结构挺简单,但是你如果把博客内容弄明白了,对你受益匪浅,千万不要看到字数多就懵了,其实字数多代表它重要.特别是第五步, 各种表中之间的关系. 作者: ...

  4. PE格式第七讲,重定位表

    PE格式第七讲,重定位表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶何为重定位(注意,不是重定位表格) 首先, ...

  5. PE格式第八讲,TLS表(线程局部存储)

    PE格式第八讲,TLS表(线程局部存储) 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶复习线程相关知识 首先讲解 ...

  6. 可执行文件(ELF)格式的理解

    摘自http://www.cnblogs.com/xmphoenix/archive/2011/10/23/2221879.html 可执行文件(ELF)格式的理解 ELF(Executable an ...

  7. PE格式第四讲,数据目录表之导入表,以及IAT表

    PE格式第四讲,数据目录表之导入表,以及IAT表 一丶IAT(地址表) 首先我们思考一个问题,程序加载的时候会调用API,比如我们以前写的标准PE 那么他到底是怎么去调用的? 他会Call 下边的Jm ...

  8. PE格式第五讲,手工添加节表

    PE格式第五讲,手工添加节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 首先我们要用汇编编写一段汇编代码,用来生成 ...

  9. PE格式第九讲,资源表解析

    PE格式第九讲,资源表解析 一丶熟悉Windows管理文件的方法 首先,为什么标题是这个,主要是为了下边讲解资源方便,因为资源结构体很乱.如果直接拿出来讲解,那么就会很晕. 1.windows管理文件 ...

随机推荐

  1. 响应式Web设计基础

    本文所有内容来自Responsive Web Design Fundamentals 手机.大屏手机.平板电脑.桌面电脑.游戏控制台.电视.甚至是可穿戴设备,如此多的设备也形成了多种多样的屏幕尺寸.屏 ...

  2. 最简洁粗暴版的虚拟用户配置FTP

    最简洁粗暴版的虚拟用户配置FTP yum安装FTP: yum install vsftpd pam* db4* -y 设置为系统服务:chkconfig –level 35 vsftpd on 2.v ...

  3. Web服务器控件表

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAykAAAFRCAIAAAD/5nW4AAAgAElEQVR4nOydd3gVxfrHN6TXQ0KXEn

  4. objective-C常量与变量

    1.Objective-C中声明常量使用关键字const.如:const double PI = 3.1514; 2.Objective-C中变量可以分为成员变量.局部变量和全局变量(用的很少,尽量不 ...

  5. 学习jQuery在表单信息修改之中的常用方法;

    submitHandler: function (form) { var parm = $("#myform").serialize(); var url = $("#m ...

  6. Apache中RewriteCond规则参数介绍

    Apache中 RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了.RewriteCond就像我们程序中的if语句一样,表示如果符合某个 ...

  7. 1)Java JDK和JRE

    >JRE :  Java Runtime Enviroment   Java的运行环境.面向Java程序的使用者,而不是开发者.如果你仅下载并安装了JRE,那么你的系统只能运行Java程序(不能 ...

  8. delphi 基础之一 数据类型和基本语法

    1. 数据类型 特定类型 日期和时间 Delphi 也用实型数表示日期和时间数据.但为了更准确起见,Delphi 特别定义了TDateTime 数据类型,这是一个浮点类型,因为这个类型必须足够宽,使变 ...

  9. SQL Server 基础:子查询

    1.子查询的概念:子查询就是嵌套在主查询中的查询.子查询可以嵌套在主查询中所有位置,包括SELECT.FROM.WHERE.GROUP BY.HAVING.ORDER BY.2.子查询的分类:2.1按 ...

  10. js常用函数收集

    在js中,可以使用typeof获取变量或函数的类型,如下: <head runat="server"> <title></title> < ...