PE文件格式(加密与解密3)(一)

  Windows内部存款和储蓄器:1.物理内存层面;2.设想内部存款和储蓄器层面。

2、汇编中虚构地址(VRA卡塔尔国与公事偏移地址(FileOffsetState of Qatar的人机联作转变:

 学习PE提议看书。。和友好动手。。。

  内部存款和储蓄器管理器能够使进度在事实上唯有512MB物理内部存款和储蓄器的气象下使进度“以为”自个儿装有4GB内部存款和储蓄器(此中囊括代码, 栈空间,能源区,动态链接库等)。

FileOffset = VA - ImageBase - V凯雷德k = 00401000 - 00400000 - C00 = 400(文件物理地址的摆荡地址卡塔尔国

如上便是贰个PE文件的布局图,PE文件使用的是四个平面地址空间,全部的多少都融入在协同,文件的从头到尾的经过又被分割为差别的区块(Section),

  私下认可情形下:平常PE文件的0字节 =》设想内部存款和储蓄器0x00400000岗位,即所谓的装载地方。

 

梯次区块按页的分界来对齐。每一个块都有友好的属性(是还是不是可读,是否可写,是还是不是可进行等等卡塔尔。

  在PE文件中,以磁盘数据正式存放(大家精晓硬盘以一个section为主导单位,即512byte),0x200字节,当叁个数据节不足0x200字节时填充0x00;

|  .text   00001000   00000092  00000400  00000200  60000020|

接下去大家看一下IMAGE_OPTIONAL_HEADE哈弗这么些布局体,同样下边包车型客车是其朝气蓬勃布局体在winnt.h中的定义,上边那一个是三二十位的,还恐怕有63人的,但是基本上的,能够看winnt.htypedef struct _IMAGE_OPTIONAL_HEADER

《软件漏洞深入分析技巧》笔记

 

  在WIN上,31位的可施行文件是PE文件,陆拾一人的是PE32+文件 ,DLL文件的格式和PE格式差不离,唯豆蔻年华的差别是PE和DLL的有一个字段标志这么些文件是EXE照旧DLL。

PE文件与虚构内部存款和储蓄器之间的映射

|  .rsrc   00004000   000003A0  00000A00  00000400  C0000040|

 

  (3).设想内部存储器地址(Virtual Address,VA):PE文件中的指令棉被服装入内存后的地点。

+---------+---------+---------+---------+---------+---------+

      当PE文件棉被服装载器装载了现在,内部存款和储蓄器中的板块被喻为模块。映射文件的胚胎地址被叫做模块句柄---内部存款和储蓄器中的模块代表那进程从那几个可试行文件中所要求的代码、数据、资源、输入表、输出表及任范程程西所使用的事物放在一个一而再的内部存款和储蓄器块中。在装载中,PE文件的一个字段会报告系统把文件映射到内部存款和储蓄器必要有个别内部存款和储蓄器,无法被映射的数额被放置在文件的尾巴。

  标准PE文件常常包括:.text(编写翻译器发生,寄放二进制代码, 反汇编和调理的对象)、.data(开始化数据块)、.idata(使用的外来函数如动态链接库与公事新闻卡塔尔(قطر‎、.rsrc(寄放程序财富),还包含别的如.reloc、.edata、.tls、.rdata等。

+---------+---------+---------+---------+---------+---------+

 

  在扩充File Offset和VA换算时,会由存款和储蓄单位引起节基址差称为节偏移。比方:

+---------+---------+---------+---------+---------+---------+

typedef struct _IMAGE_FILE_HEADER {
      WORD Machine;                     //这里定义的是运行平台,i386= 0x014Ch这个值,还有其他平台,看书吧。。
      WORD NumberOfSections;       //这个是标识区块的数目,紧跟在PE头的后面,也就是IMAGE_NT_HEADERS的后面
      DWORD TimeDateStamp;
      DWORD PointerToSymbolTable;
      DWORD NumberOfSymbols;
      WORD SizeOfOptionalHeader;     //这里表明了IMAGE_NT_HEADERS中的大小(RAW SIZE),32位一般是0x00E0, 64位PE+一般是0x00F0
      WORD Characteristics;       //普通的EXE是0x010fh, DLL文件是0x210Eh
    } IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;

  PE(Portable Executable)是win32阳台下可实行服从的数额格式。通平时见的举例说*.exe和*.dll都是PE文件。

昂CoraVA是争持虚构地址(Relative Virtual Address)的缩写,顾名思义,它是一个“相对”地址,也得以说是“偏移量”,PE文件的各样数据布局中涉嫌到地方的字段大多数都以以奥迪Q5VA代表的。

图片 1

        VA = Image Base + RVA;

 

再有也得以接纳LordPE的PE editor来查看那一个目录,今后的查阅目录表的工具超多。。。。。

  按上表,举例计算设想内存中0x00404141处的一条指令,要换算出该指令在文书中的偏移量:

|  Name     VOffset    VSize    ROffset    RSize      Flags |

本次的问询器重教学PE的基本概念、MS-DOS文件头、PE文件头、区块、输入表、输出表等。

 

VA = FileOffset + ImageBase + V奥迪Q3k = 435 + 00400000 + C00 = 00401035(虚构地址State of Qatar

和相应的数据布局定义。

 

>>>>>>>VaToFileOffset( 虚构地址转文件偏移地址卡塔尔国

MS-DOS头部(IMAGE_DOS_HEADER):

      文件偏移量 = 0x00404141 - 0x00400000(暗中同意的Image Base)-(0x1000 - 0x400卡塔尔国(代码存于.text文件中) = 0x3541

如VA = 00401000 (虚构地址卡塔尔(قطر‎

PE的率先等第到这里,接下去会继续深造,增添熟识度。。。。。。。。。。-----------好学不倦,天天向上!

  FileOffset = VA - Image Base -节偏移

|  .data   00003000   0000018E  00000800  00000200  C0000040|

接下去笔者么就看大器晚成看那一个数目目录表,数据目录表轻巧点说便是叁个尺寸为16的IMAGE_DATA_DIRECTOCRUISERY构造体数组而已

  这种意况和实在生活中国银行行平常,你要求用的钱其实并不等于你富有的财物,银行其实具备的金额数稍低于全部储户的能源和。

如FileOffset = 435(文件偏移地址卡塔尔国

#define IMAGE_DIRECTORY_ENTRY_EXPORT 0              //Export Table
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1        //Import Table              输入表这里比较重要
#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
#define IMAGE_DIRECTORY_ENTRY_SECURITY 4
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6
#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8
#define IMAGE_DIRECTORY_ENTRY_TLS 9
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
#define IMAGE_DIRECTORY_ENTRY_IAT 12          //IAT (import address table), 这里也很重要
#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
返回列表