PE文件结构(二)

参考

书:《加密与解密》

视频:小甲鱼 解密系列 视频

区块

在区块表 后面的就是一个一个区块,每个区块占用对齐值的整数倍,一般的文件都有代码块 跟 数据块( 它们的名字一般为.text 跟 .data 但这是可以修改的)。每个区块的数据具有相同的属性。编译器先在obj中生成不同的区块, 链接器再按照一定的规则合并不同obj跟库中的快。例如每个obj中肯定有.text 块, 连接器就会把它们合并成一个单一的.text 块;再如,如果两个区块具有相同的的属性就有可能被合并成一个块。

文件偏移与RVA转换

因为磁盘对齐跟内存对齐可能不同。还有每个块必须是对齐值的整数倍即在磁盘中可执行文件的每个块的大小是磁盘对齐值的整数倍,程序加载到内存中后块的大小是内存对齐值的整数倍。会导致文件偏移与RVA转换的不同,需要转换。

例子:转换输入表的RVA与文件偏移

通过查看可执行文件的二进制可以找到输入表的RVA,但是不能找到输入表的文件偏移。

先查看这个可执行文件的二进制,可以发现这个程序的磁盘对齐为200h内存对齐为1000h(IMAGE_OPTIONAL_HEADER中的SectionAlignment跟FileAlignment)

图片1

用LoadPE可以方便的得到:

图片2

再从可执行文件的二进制找到输入表的RVA(IMAGE_OPTIONAL_HEADER中的DataDirectory[1]就是输入表的信息)

图片3

也可以通过LoadPE方便的查看(点击目录,查看输入表的RVA):

图片4

转化文件偏移与RVA,通过上面的信息还不够,还需要每个区块在文件中跟在内存中的起始地址,可以用LoadPE方便的查看(点击 区段 即可):

图片5

输入表的RVA为204Ch,可以通过区段表知道,它在 .rdata 区段中,它相对 .rdata 头 的值为 4Ch。.rdata 断在磁盘中开始 的 文件偏移值为A00h,

用4Ch 加 A00h 即可得到输入表的文件偏移为A4Ch,通过LoadPE的“位置计算器” 可验证输入表的文件偏移值确实是A4Ch。

图片6

时间: 2024-10-22 13:33:10

PE文件结构(二)的相关文章

PE文件结构详解(二)可执行文件头

在PE文件结构详解(一)基本概念里,解释了一些PE文件的一些基本概念,从这篇开始,将详细讲解PE文件中的重要结构. 了解一个文件的格式,最应该首先了解的就是这个文件的文件头的含义,因为几乎所有的文件格式,重要的信息都包含在头部,顺着头部的信息,可以引导系统解析整个文件.所以,我们先来认识一下PE文件的头部格式.还记得上篇里的那个图吗? DOS头和NT头就是PE文件中两个重要的文件头. 一.DOS头 DOS头的作用是兼容MS-DOS 操作系统中的可执行文件,对于32位PE文件来说,DOS所起的作用

PE文件结构详解

1.定位标准PE头 DOS Stub长度不固定,所以DOS头不是一个固定大小的数据结构.DOS头位于PE的起始位置,通过DOS头去定位后面标准PE头的位置就是通过字段e_lfanew. e_lfanew字段的值是一个相对偏移量,绝对定位时需要加上DOS MZ头的基地址. 也就是PE头的绝对位置是: PE_start = DOS MZ 基地址+IMAGE_DOS_HEADER.e_lfanew 2.PE文件结构 在32位系统下,最重要的部分是PE头和PE数据区. 32位系统下的PE文件被划分为:D

PE文件结构详解(四)PE导入表

PE文件结构详解(二)可执行文件头的最后展示了一个数组,PE文件结构详解(三)PE导出表中解释了其中第一项的格式,本篇文章来揭示这个数组中的第二项:IMAGE_DIRECTORY_ENTRY_IMPORT,即导入表. 也许大家注意到过,在IMAGE_DATA_DIRECTORY中,有几项的名字都和导入表有关系,其中包括:IMAGE_DIRECTORY_ENTRY_IMPORT,IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT,IMAGE_DIRECTORY_ENTRY_IAT

PE文件结构详解(三)PE导出表

上篇文章 PE文件结构详解(二)可执行文件头 的结尾出现了一个大数组,这个数组中的每一项都是一个特定的结构,通过函数获取数组中的项可以用RtlImageDirectoryEntryToData函数,DataDirectory中的每一项都可以用这个函数获取,函数原型如下: PVOID NTAPI RtlImageDirectoryEntryToData(PVOID Base, BOOLEAN MappedAsImage, USHORT Directory, PULONG Size); Base:模

再探.NET的PE文件结构(安全篇)

一.开篇 首先写在前面,这篇文章源于个人的研究和探索,由于.NET有自己的反射机制,可以清楚的将源码反射出来,这样你的软件就很容易被破解,当然这篇文章不会说怎么样保护你的软件不被破解,相反是借用一个软件来讲述是怎么被攻破的,也会有人说这是一篇破文,我其实这篇文章已经写了很长时间了,不知道以什么形式发出来,因为毕竟是有些破解类的东西.但是我觉得从这篇文章相反的是能够带来一些启发.大家应该都知道Reflector这个反编译软件还有一个插件是专门用来改IL的插件叫Reflexil,这里我们也要用到前面

PE文件结构与函数导出表——详解与实例

PE文件结构与函数导出表--详解与实例 随着windows系统从Xp升级到Win7.Win8, 从32位升级到64位,PE文件结构在整体未变的情况下发生了一些小的变动,一方面是推荐的程序装载地址未采用,另一方面,导出函数序号不再是简单的升序,而是一定程度上的进行了乱序.本文首先对PE文件结构进行了详尽的解说,接着介绍了如何得出函数导出表,整个过程采用SysWoW64目录下的wininet.dll实例进行说明.在介绍过程中,明确指出了Win7.Win8等新系统相对Xp带来的区别. 文章链接:htt

PE文件结构(五)基址重定位

PE文件结构(五) 参考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 基址重定位 链接器生成一个PE文件时,它会假设程序被装入时使用的默认ImageBase基地址(VC默认exe基地址00400000h,dll基地址10000000h),并且会把代码中所有指令中用到的地址都使用默认的基地址(例如 程序代码中 push 10001000,就是把10000000h当做了基地址,把push 10001000写入到文件中).如果一个exe程序中一个dll装载时的地址与其它dll地址发生冲突(因为

PE文件结构(四) 输出表

PE文件结构(四) 参考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 输出表 一般来说输出表存在于dll中.输出表提供了 文件中函数的名字跟这些函数的地址, PE装载器通过输出表来修改IAT. IMAGE_OPTIONAL_HEADER中的 DataDirectory[0] 提供了输出表的RVA.输出表是以一个IMAGE_EXPORT_DIRECTORY结构 开始的. IMAGE_EXPORT_DIRECTORY结构: typedef struct _IMAGE_EXPORT_DIREC

PE文件结构(一)

参考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 exe,dll都是PE(Portable Execute)文件结构.PE文件使用的是一个平面地址空间,所有代码和数据都被合并在一起,组成一个很大的结构.先看2张图,来大概了解一下PE文件结构. PE文件的框架结构 通过这张图(开始在下面),我们可以知道PE文件的大概结构,PE文件是由 DOS头,PE文件头,块表,块,调试信息 这些部分组成的.这些结构的定义在 winnt.h 中的  "Image Format"  这一

PE文件结构(三) 输入表

PE文件结构(三) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 输入表 输入函数,表示被程序调用可是它的代码不在程序代码中的,而在dll中的函数.对于这些函数.磁盘上的可执行文件仅仅是保留相关的函数信息,如函数名,dll文件名称等. 在程序执行前.程序是没有保存这些函数在内存中的地址.当程序执行起来时.windows载入器会把相关的dll装入内存.而且将输入函数的指令与函数真在内存中正的地址联系起来.输入表(导入表)就是用来保存这些函数的信息的. 在   IMAGE_OPTIONA