PE格式的理解(待补充)
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格式的理解(待补充)的更多相关文章
- 基础篇-初步认识PE格式
1 PE(Portable Executable)格式,是Win32环境可移植可执行文件(如exe.dll.vxd.sys和vdm等)的标准文件格式.PE格式衍生于早期建立在VAX(R)VMS(R)上 ...
- WinHex分析PE格式(1)
最近在一直努力学习破解,但是发现我的基础太差了,就想学习一下PE结构.可是PE结构里的结构关系太复杂,看这老罗的WiN32汇编最后一章 翻两页又合上了..把自己的信心都搞没了.感觉自己的理解能力不行, ...
- PE格式第六讲,导出表
PE格式第六讲,导出表 请注意,下方字数比较多,其实结构挺简单,但是你如果把博客内容弄明白了,对你受益匪浅,千万不要看到字数多就懵了,其实字数多代表它重要.特别是第五步, 各种表中之间的关系. 作者: ...
- PE格式第七讲,重定位表
PE格式第七讲,重定位表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶何为重定位(注意,不是重定位表格) 首先, ...
- PE格式第八讲,TLS表(线程局部存储)
PE格式第八讲,TLS表(线程局部存储) 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶复习线程相关知识 首先讲解 ...
- 可执行文件(ELF)格式的理解
摘自http://www.cnblogs.com/xmphoenix/archive/2011/10/23/2221879.html 可执行文件(ELF)格式的理解 ELF(Executable an ...
- PE格式第四讲,数据目录表之导入表,以及IAT表
PE格式第四讲,数据目录表之导入表,以及IAT表 一丶IAT(地址表) 首先我们思考一个问题,程序加载的时候会调用API,比如我们以前写的标准PE 那么他到底是怎么去调用的? 他会Call 下边的Jm ...
- PE格式第五讲,手工添加节表
PE格式第五讲,手工添加节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 首先我们要用汇编编写一段汇编代码,用来生成 ...
- PE格式第九讲,资源表解析
PE格式第九讲,资源表解析 一丶熟悉Windows管理文件的方法 首先,为什么标题是这个,主要是为了下边讲解资源方便,因为资源结构体很乱.如果直接拿出来讲解,那么就会很晕. 1.windows管理文件 ...
随机推荐
- 响应式Web设计基础
本文所有内容来自Responsive Web Design Fundamentals 手机.大屏手机.平板电脑.桌面电脑.游戏控制台.电视.甚至是可穿戴设备,如此多的设备也形成了多种多样的屏幕尺寸.屏 ...
- 最简洁粗暴版的虚拟用户配置FTP
最简洁粗暴版的虚拟用户配置FTP yum安装FTP: yum install vsftpd pam* db4* -y 设置为系统服务:chkconfig –level 35 vsftpd on 2.v ...
- Web服务器控件表
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAykAAAFRCAIAAAD/5nW4AAAgAElEQVR4nOydd3gVxfrHN6TXQ0KXEn
- objective-C常量与变量
1.Objective-C中声明常量使用关键字const.如:const double PI = 3.1514; 2.Objective-C中变量可以分为成员变量.局部变量和全局变量(用的很少,尽量不 ...
- 学习jQuery在表单信息修改之中的常用方法;
submitHandler: function (form) { var parm = $("#myform").serialize(); var url = $("#m ...
- Apache中RewriteCond规则参数介绍
Apache中 RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了.RewriteCond就像我们程序中的if语句一样,表示如果符合某个 ...
- 1)Java JDK和JRE
>JRE : Java Runtime Enviroment Java的运行环境.面向Java程序的使用者,而不是开发者.如果你仅下载并安装了JRE,那么你的系统只能运行Java程序(不能 ...
- delphi 基础之一 数据类型和基本语法
1. 数据类型 特定类型 日期和时间 Delphi 也用实型数表示日期和时间数据.但为了更准确起见,Delphi 特别定义了TDateTime 数据类型,这是一个浮点类型,因为这个类型必须足够宽,使变 ...
- SQL Server 基础:子查询
1.子查询的概念:子查询就是嵌套在主查询中的查询.子查询可以嵌套在主查询中所有位置,包括SELECT.FROM.WHERE.GROUP BY.HAVING.ORDER BY.2.子查询的分类:2.1按 ...
- js常用函数收集
在js中,可以使用typeof获取变量或函数的类型,如下: <head runat="server"> <title></title> < ...