12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
三国霸业 战车-珍宝-觉醒-攻城掠地SF-全新玩法 免费玩新区 攻城掠地私服 进入游戏
手游私服盒子 各类免费游戏 0.1折送海量资源 各类手游私服 进入游戏
皇家MU2 《奇迹 2:传奇》韩国网禅公司《奇迹》正统续作。 3D锁视角Mmrpg 暗黑3+传奇+流放之路+奇迹 进入游戏
查看: 220|回复: 0

PE文件笔记二 PE文件的两种状态

[复制链接]

52

主题

52

帖子

114

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
114
发表于 2021-5-7 23:26:02 | 显示全部楼层 |阅读模式
PE条记索引可前往:
PE文件条记一 PE先容
PE两种状态

一个PE文件可以分为两种状态:运行态和非运行态
非运行态:当一个PE文件尚未被运行时,其数据存储在磁盘中,也就是PE个人条记一之PE先容中PE的状态
运行态:当一个PE文件被打开后,PE文件的相关数据将被装载到内存中,此时为运行态
在细讲PE两种状态前,回首先前在条记一中的相关内容:
整体结构图


整体结构表

结构对应C数据结构默认占用空间巨细(单位字节)DOS MZ头_IMAGE_DOS_HEADER64DOS Stub仅在MS-DOS系统下有效,不作研究不固定PE文件头_IMAGE_NT_HEADERS4+20+224=248PE文件头标志Signature4PE文件表头/尺度PE头_IMAGE_FILE_HEADER20PE文件表头可选部分/扩展PE头_IMAGE_OPTIONAL_HEADER224块表/节表_IMAGE_SECTION_HEADER40块/节无由块表/节表决定非运行态

回首

先前的条记一中只是简单先容了非运行态下如何判断一个文件是否为PE文件
接下来讲讲为何能通过之前的方法来判断PE文件
判断PE文件的流程可概括为如下三步:

  • 判断头2个字节是否为4D 5A(ASCII码为MZ)
  • 找到3Ch位置数据
  • 根据第二步中的位置数据再找到对应的地点,判断这个地点是否为50 45 00 00(对应ACSII码为PE..)
地点长度(单位字节)对应C的数据结构说明值ASCII02_IMAGE_DOS_HEADER的第一个成员e_magicDOS MZ头的第一个成员4D 5AMZ3C2_IMAGE_DOS_HEADER的最后一个成员e_lfanew指出PE头文件偏移位置不定不定[3C]4SignaturePE文件头标志50 45 00 00PE..下面结合实例再来分析:
这次使用WinHex这个工具来进行检察

此时对应的表格数据为:
地点说明值ASCII0DOS MZ头的第一个成员4D 5AMZ3C指出PE头文件偏移位置F0F0PE文件头标志50 45 00 00PE..上面对一个PE文件的判断只涉及了DOS MZ头和PE文件头中的PE文件头标志
下面继续分析其它结构
后续分析

PE文件头标志和尺度PE头

从先前的PE的结构继续向后看24个字节(PE文件头标志的巨细+尺度PE头巨细 4+20)得到扩展PE头的首地点
先前的地点为:F0
后来的地点为:0xF0+24=240+24=264=0x108
所以从F0~108为PE文件头标志和尺度PE头
从108开始就是扩展PE头了
PE文件头标志和尺度PE头:

扩展PE头

从先前得到的扩展PE头地点继续向后看224个字节(扩展PE头巨细)得到块表的首地点
先前的地点为:108
后来的地点为:0x108+224=264+224=488=0x1E8
所以从108~1E8为扩展PE头
从1E8开始就是块表了
扩展PE头:

块表

从先前得到的块表头地点继续向后看40个字节(块表巨细)得到第二个块表的首地点
先前的地点为:1E8
后来的地点为:0x1E8+40=488+40=528=0x210
所以从1E8~210为第一个块表
从210开始就是第二个块表了
第一个块表:

同理可得剩下的几个块表
第二个块表:

地点从210~238
第三个块表:

地点从238~260
第四个块表:

地点从260~288
第五个块表:

地点从288~2B0
汇总块表

块名称块地点.text1E8~210.rdata210~238.data238~260.rsrc260~288.reloc288~2B0块表后的空隙

块表后面跟着的应该是块,但在块表后和块之前却多出了一段空间
这里为2B0~400

先前的PE结构中心都没有空隙,为连续存储
但在块表和块之间是大概存在空隙的,这个空隙里一般被填充为编译器插入的数据(也可以没有,就是此时的情况)
这段空隙的修改并不会导致程序不可运行,因而可被拿来写入自己想要的代码来对程序进行修改
为什么会存在这段空隙?
这段空隙存在的原因在于块表和块并没有连续存储
所以这段空隙的存在与否及长度 取决于 块的起始位置
而块的起始位置则由扩展PE头中的某个成员决定
给出扩展PE头在C中的定义:
typedef struct _IMAGE_OPTIONAL_HEADER {    //    // Standard fields.    //    WORD    Magic;    BYTE    MajorLinkerVersion;    BYTE    MinorLinkerVersion;    DWORD   SizeOfCode;    DWORD   SizeOfInitializedData;    DWORD   SizeOfUninitializedData;    DWORD   AddressOfEntryPoint;    DWORD   BaseOfCode;    DWORD   BaseOfData;    //    // NT additional fields.    //    DWORD   ImageBase;    DWORD   SectionAlignment;    DWORD   FileAlignment;                                //

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-11-24 19:33 , Processed in 0.078125 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表