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

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

2021-4-8 16:23
15011

工具说明

使用工具: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可以自行实验;

总结

帖子写的匆忙,有不完善之处还请指出;

 

不得感叹,IT太脆弱了,一停电只能干着急;


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

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