首页
社区
课程
招聘
[原创]咬文嚼字·浅说OEP和EP
发表于: 2021-4-8 16:23 16624

[原创]咬文嚼字·浅说OEP和EP

2021-4-8 16:23
16624

使用工具:CFF、PETool、IDA、WinHex;

有一个老哥问我OEP和EP的知识点,睡意朦胧中回复的可能不太清晰,水一帖论述一下问题;

先说结论:
EP:原名EnterPointer,就是入口点的意思,对应的是PE文件中的AddressOfEntryPoint字段,这里的字段是一个RVA(理解就是在内存中从ImageBase(依旧是PE文件中的字段)开始算起的偏移大小),这里是程序的入口点

OEP:原名OriginEnterPointer,就是原始入口点的意思;

一般有两种情况:

​ 一种就是程序被加壳了,EP的位置被写成了别的地址,在运行程序之前,先跳转运行解壳或者检测程序,然后再跳转到原本我们正确的程序入口地址(OEP);

​ 一种情况就是入口点被hook(劫持),同样的道理;

说完结论,我们来看一下老哥的问题,我从老哥那要来的工具PETool,查看一下[原创] 小试牛刀·手动构建HelloWorld弹窗可执行文件中制作的文件,或者随便找个可执行文件

image-20210408154348060

入口点EP(RVA)显示的0x00001080,我们再使用CFF看一看;

image-20210408154536866

这两个地址是一样的;

那么在PETool中的OEP指的是啥呢?

image-20210408154800630

原来PETool工具中的OEP指的是EP在文件中的偏移位置,跟真正OEP没有太大的关系,所以才会用RAW注明;

其实,工具中RVARAW已经说的很清楚了

所以,这就是一场乌龙

对于这个程序有没有加壳,还是需要更细致的跟程序,或者使用PEiD以及exeinfoPE之类的工具了;

说到OEP,不得不说一下常见入口点OEP特征;

这里我们不能使用手动制作的文件了,先用VC++写一个helloworld吧;

image-20210408160824291

这就是我们用VC++编译器的入口特征;

在一般情况下,我们可以通过常见的入口特征来查找在程序中藏匿的程序(并不能用来查找shellcode,因为shellcode是硬编码,没有程序入口);

还有一些其它编译器的入口特征,可以自行百度或者实验;

因为我搜到的入口特征并没有得到我自己的验证(没有安装相应编译环境),所以我就不放在这个帖子上了,有兴趣的兄die可以自行实验;


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

最后于 2021-4-9 12:42 被平头猿小哥编辑 ,原因: 补充说明
收藏
免费 4
支持
分享
最新回复 (2)
雪    币: 25
活跃值: (580)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢小老弟解惑,来根华子!
2021-4-8 17:03
1
雪    币: 2810
活跃值: (2913)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
夺命黑裤衩 感谢小老弟解惑,来根华子!
老哥来根辣条
2021-4-8 17:04
0
游客
登录 | 注册 方可回帖
返回
//