首页
社区
课程
招聘
[原创][原创]关于OEP和EP
发表于: 2021-4-8 17:54 7308

[原创][原创]关于OEP和EP

2021-4-8 17:54
7308

今天学习IDA的时候,视频中提到了EP这个词,之前学习的时候我还特意记了一下OEPEP的区别以及两者之间的关系(差值很有规律),但是今天遇到了有突然想不起来了。问了很多朋友都没有get到我心中的的那个点,百度上的答案也是五花八门,解释看起来比较专业的是下边两个:

a、EPEntryPoint简称,就是入口点。如果程序加壳后,程序会有个入口点,就是EntryPoint。但加壳前的程序入口点就称为OEPOriginal EntryPoint),

b、如果源程序被加了壳或者入口函数被劫持,则会产生OEP

其实上边两个回答都不对,一个200+KB的PE解析工具能有这么玄乎?还能分析出来程序有没有被改动过?我又老老实实的找了一下笔记,原来之前海哥讲过,下边我就讲一下OEPEP

查看PE结构,我经常要用到PE解析工具PETool,已打开记事本程序为例,打开之后是这样PE工具界面1

上边的箭头指向的就是EPOEP

EPIMAGE_OPTIONAL_HEADER32结构体中的AddressOfEntryPoint属性,表示在内存中,程序入口函数相对于imagebase的偏移(内存偏移)。见下图:

PE工具界面2

那什么是OEPOEP是在文件中,程序入口函数相对于imagebase的偏移(文件偏移偏移)。

以第一个图为例:

EP0x0000739d(已经不用验证了,看上边第2个图,PETool已经给出来了)

OEP0x0000679d

下边来验证我上边的解释:OEP是在文件中,程序入口函数相对于imagebase的偏移(文件偏移偏移),下图为笔记本程序的节信息:

PE工具界面3

0x0000739d>0x00001000并且0x0000739d<0x00009000,这就表明入口点在第一个节中;

下边计算在内存中,入口点相对于第一个节起始点的偏移;

RVA=0x0000739d-0x00001000

既:RVA=0x0000639d

因为入口点在内存中相对于第一个节起点的偏移==入口点在文件中相对于第一个节起点的偏移,因此入口点在文件中的偏移=RVA+第一个点在文件中的偏移,计算如下:

RVA+0x00000400既0x0000639d+0x00000400

结果:入口点在文件中的偏移=0x0000679d,结果就是第一张图上的OEP的值!

这涉及到文件对齐值和内存对齐值是否一致,见下图:

PE工具界面4


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 3
支持
分享
最新回复 (6)
雪    币: 2810
活跃值: (2913)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2

老哥,你说错了呀。OEP就是原始入口点,这个是相对于EP来说的(如果EP被更改了)。只不过在PETool这个工具中,它的OEP(RAW),指的是EP的RAW,就是入口点在文件中的位置;

2021-4-8 18:13
0
雪    币: 7373
活跃值: (4075)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不是你这样理解的
2021-4-8 18:39
0
雪    币: 1853
活跃值: (1923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个我当时用这个软件也有这个疑问来,继续关注,可能是一些约定俗称不一致导致的
2021-4-8 18:39
0
雪    币: 1853
活跃值: (1923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个我当时用这个软件也有这个疑问来,继续关注,可能是一些约定俗称不一致导致的
2021-4-8 18:39
0
雪    币: 35726
活跃值: (7155)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
oep等价ep
不信看x64dbg.chm
2021-4-8 20:31
0
雪    币: 25
活跃值: (580)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这里说的OEP特指的是PETool里的OEP,我图1已经指出来了。不排除在OEP在其他地方有别的含义。EP是入口点,OEP是原始入口点,因为相对于内存中的入口点,本地文件中的入口点就是它的"源"对吧.....
2021-4-9 08:20
0
游客
登录 | 注册 方可回帖
返回
//