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. android studio首次运行出错

    转载2015-10-24 16:28:15 标签:androidstudioandroidstudio无法启androidstudio1.4无法 Internal error. Please repo ...

  2. Android IOS WebRTC 音视频开发总结(六五)-- 给韩国电信巨头做咨询

    本文主要总结咨询过程中的一些问题,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam 韩国电信巨头sk想了解国内移动互联网rtc现状,所以上周请我过去给他们的相关人员 ...

  3. Android IOS WebRTC 音视频开发总结(二四)-- p2p调用堆栈

    本文主要分析webrtc音视频点对点部分的代码结构,文章来自博客园RTC.Blacker,转载请说明出处. 前段时间在查一个偶尔断线的问题(这种问题最蛋疼,不好重现,只能凭经验去搞),所以理了下web ...

  4. 设计模式-中介者模式(Mediator)

    场景分析: 众所周知,电脑有很多组成部分,如硬盘.内存.光驱.音频.键盘等,各个组件之间协同工作才能保证电脑的正常运行. 如果各个组件之间直接交互,可能会比较复杂,如下图: 将上面的各个组件抽象成类, ...

  5. 自定义控件winfrom

    附件代码:http://files.cnblogs.com/files/qtiger/CompositeControl.zip 转载:http://www.cnblogs.com/bomo/archi ...

  6. 新建一个DataTable如何手动给其添加多条数据!

    早晨起来,想起昨天利用winform做类似于sqlserver数据库导入数据功能的时候,用到了新建一个DataTable手动给其添加多条数据,平时用不到,需要的时候想不起来了,这次不妨把他记下来.以下 ...

  7. jquery导航二级栏目下拉

    <div class="Nav_L L"> <ul> <li><a href="" title="" ...

  8. 在Spark中使用Kryo序列化

    spark序列化  对于优化<网络性能>极为重要,将RDD以序列化格式来保存减少内存占用. spark.serializer=org.apache.spark.serializer.Jav ...

  9. MySQL的相关概念介绍

    MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个 ...

  10. SequoiaDB创始人:比MongoDB领先一到两年 打造企业级NoSQL数据库

    CSDN.NET   这几年来, NoSQL数据库凭借其易扩展.高性能.高可用.数据模型灵活等特色吸引到了大量新兴互联网公司的青睐,包括国内的淘宝.新浪.京东商城.360.搜狗等都已经在局部尝试NoS ...