12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
游戏盒子— 各种稀有手游私服,可以下载 各种变态版 手游交流群:117375085 进入游戏
刀剑演武 现金BOSS,不氪金也能毕业! 创角就赠送至尊8 绝版GM装备送! 进入游戏
《绝世秘籍》 每日精彩活动嗨不停 充值赠送会员 积分换极品装备 进入游戏
《百战沙城》 不肝不氪也可群殴boss 装备满屏爆 超值首充 进入游戏
全民仙战 任意首充送纯白歌宴绝版绚丽时装! 元宝福利免费领 今日新开 进入游戏
查看: 852|回复: 1

PE文件笔记一 PE介绍

[复制链接]
发表于 2021-5-8 00:52:21 | 显示全部楼层 |阅读模式
个人笔记来到新篇章:PE
先前的笔记传送门:逆向底子笔记一 进制篇
之后的笔记索引:
PE文件笔记二 PE文件的两种状态
PE文件笔记三 DOS部门
PE文件笔记四 PE文件头之标准PE头
PE文件笔记五 PE文件头之扩展PE头
PE文件笔记六 节表和节
PE文件笔记七 RVA与FOA转换
PE文件笔记八 实战之HOOK程序添加弹窗
PE文件笔记九 实战之HOOK程序添加弹窗续
PE文件笔记十 扩大节
PE文件笔记十一 新增节
PE文件笔记十二 修正内存对齐
PE文件笔记十三 合并节
PE文件笔记十四 导出表
PE文件笔记十五 导入表
PE文件笔记十六 代码重定位
PE文件笔记十七 重定位表
PE

需要用到的工具

十六进制文本编辑工具:WinHex和UltraEdit
工具论坛任意一搜或者百度就有,这里就不提供了
PS:这两个工具在论坛虚拟机中的工具包里都有集成
工具的作用

首先要明确任何文件在盘算机的存储都是0或1(二进制)
上面的两个工具就是用于查看文件在盘算机存储的内容
由于0和1比较冗长,所以利用十六进制来显示数据
准备好工具后正式开始学习PE
学习PE前需要先了解一下可执行文件
可执行文件

什么是可执行文件

可执行文件 (executable file) 指的是可以由操作系统进行加载执行的文件
可执行文件的格式

Windows平台

PE(Portable Executable)文件布局
翻译为:可移植(这里的可移植局限于Windows平台,差别版本的Win10 Win7 WinXp等)         可执行
Linux平台

ELF(Executable and Linking Format)文件布局
翻译为:执行 和 连接 格式
常见可执行文件

.exe        .sys .dll等都是windows下的可执行文件(它们都遵循PE文件布局的格式
常见非可执行文件


  • .txt .png .mp4等等都是非可执行文件,它们都需要利用别的可执行文件的软件进行加载
  • .txt可以利用Notepad、UltraEdit等 文本 工具查看
  • .png可以利用PhotoShop等 图片 工具查看
  • .mp4可以利用PotPlayer等 播放器 工具查看
为什么要学习PE


  • PE文件是Windows可执行程序必须满足的规范
  • 对软件的加壳和脱壳都基于PE
  • EXE文件如何加载到内存中也涉及PE的知识
  • 一个合格的逆向人员,必须认识PE
如何识别PE文件

PE文件特征(PE指纹)

前2个字节

分别用UltraEdit打开.exe .dll .sys 文件,观察特征前2个字节
本人利用的三个文件分别为:
.exe:EverEdit.exe(文本编辑工具)
.dll:dbghelp.dll(调试跟踪干系的一个dll,在C:\Windows\System32\dbghelp.dll里拷贝的)
.sys:passTp.sys(自己写的一个驱动程序,作用嘛大家懂的( ̄︶ ̄)↗ )
.exe

.dll

.sys

可以看到这三个文件的头2个字节都是4D 5A(ASCII码为MZ)
3Ch位置数据

再看这三个文件各自位于3Ch位置的数据
.exe

数据为:F0
.dll

数据为F8
.sys

数据为D8
对应数据的位置

.exe
先前的数据为F0,查看对应F0位置的2字节数据

.dll
先前的数据为F8,查看对应F8位置的2字节数据

.sys
先前的数据为D8,查看对应D8位置的2字节数据

可以看到无论是exe、dll还是sys,通过上述方式找到的数据都为:50 45(对应ACSII码为PE)
小总结

如果一个文件,它的头两个字节为4D 5A(ASCII码为MZ),并且通过3Ch位置的数据再找到的位置里的数据为PE则基本可以断定这个文件是Windows下的可执行文件(满足PE布局)
反例

任意拉一个图片png文件进来看看

很显然,开头的两个字节就已经表明它不是一个PE文件了
PS:识别可执行文件不能通过文件的后缀名来判断,而应该采用上述的方式进行判断,因为后缀名是可以改的ˋ( ° ▽、° )
PE文件总体布局

通过前面可以得知如何识别一个文件是否是PE文件
但是前面在前面为什么是查看一个文件的前2个字节和3Ch的位置,以及别的位置数据作用呢
这便是PE布局所规定
下面是PE文件的总体布局

可以看到先前判断PE文件特征里的头两个字节对应这里的文件头:DOS ‘MZ’ HEADER
后面根据3Ch得到的50 45(对应ACSII码为PE)对应这里的PE文件头中的"PE"
PE在C中的界说

PE文件布局天然是一种数据布局,不过这种数据布局比较复杂
在C语言的winnt.h这个头文件中界说了PE文件布局干系的布局体
可以通过C语言中PE的界说来更好地学习PE
任意创建一个空的控制台项目,然后引入winnt.h这个头文件
#includeint main(int argc, char* argv[]){        return 0;}然后在头文件这里右键→打开文档即可

接下来结合winnt.h这个头文件学习PE文件的总体布局:
DOS部首

该部门布局对应winnt.h中的_IMAGE_DOS_HEADER布局体
可以在先前打开的winnt.h中Ctrl+F搜刮_IMAGE_DOS_HEADER

查找后得到:

对应代码为:
typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE header    WORD   e_magic;                     // Magic number    WORD   e_cblp;                      // Bytes on last page of file    WORD   e_cp;                        // Pages in file    WORD   e_crlc;                      // Relocations    WORD   e_cparhdr;                   // Size of header in paragraphs    WORD   e_minalloc;                  // Minimum extra paragraphs needed    WORD   e_maxalloc;                  // Maximum extra paragraphs needed    WORD   e_ss;                        // Initial (relative) SS value    WORD   e_sp;                        // Initial SP value    WORD   e_csum;                      // Checksum    WORD   e_ip;                        // Initial IP value    WORD   e_cs;                        // Initial (relative) CS value    WORD   e_lfarlc;                    // File address of relocation table    WORD   e_ovno;                      // Overlay number    WORD   e_res[4];                    // Reserved words    WORD   e_oemid;                     // OEM identifier (for e_oeminfo)    WORD   e_oeminfo;                   // OEM information; e_oemid specific    WORD   e_res2[10];                  // Reserved words    LONG   e_lfanew;                    // File address of new exe header  } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;关于DOS头里的成员的具体说明这里临时不表,留作的笔记再详细说明
这里主要说明一下各部门的大要作用
首先的这个DOS部首,可以说是Windows的历史遗留题目了,因为Windows程序最早是在DOS系统(16位系统)上运行的
所以该部门主要是给DOS用的(向下兼容)
PE文件头(NT头)

该部门布局对应winnt.h中的_IMAGE_NT_HEADERS布局体
利用同样的方法得到对应的代码:
typedef struct _IMAGE_NT_HEADERS {    DWORD Signature;    IMAGE_FILE_HEADER FileHeader;    IMAGE_OPTIONAL_HEADER32 OptionalHeader;} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;可以看到PE文件头对应的布局体中还包罗了别的布局体,这里仍然只介绍大要作用,细节留作之后的笔记
这里的PE文件头相对于先前的DOS部首则是给Windows利用的
块表(节表)

该部门布局对应winnt.h中的_IMAGE_SECTION_HEADER布局体
利用同样的方法得到对应的代码:
typedef struct _IMAGE_SECTION_HEADER {    BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];    union {            DWORD   PhysicalAddress;            DWORD   VirtualSize;    } Misc;    DWORD   VirtualAddress;    DWORD   SizeOfRawData;    DWORD   PointerToRawData;    DWORD   PointerToRelocations;    DWORD   PointerToLinenumbers;    WORD    NumberOfRelocations;    WORD    NumberOfLinenumbers;    DWORD   Characteristics;} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;块表主要用来表示当前文件一共分为几个部门,和后面的块相对应
块表决定了后面的块,每一块从哪里开始,里面存储的数据是什么等等


块部门是由前面的块表决定的,是具体的存储数据的部门

总结




来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
楼主热帖

0

主题

46

帖子

212

积分

中级会员

Rank: 3Rank: 3

积分
212
发表于 2021-5-16 00:26:25 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2022-10-6 05:54 , Processed in 0.109375 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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