首页
论坛
课程
招聘
[调试逆向] [病毒木马] [问题讨论] [原创]咬文嚼字·浅说OEP和EP
2021-4-8 16:23 1019

[调试逆向] [病毒木马] [问题讨论] [原创]咬文嚼字·浅说OEP和EP

2021-4-8 16:23
1019

工具说明

使用工具: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太脆弱了,一停电只能干着急;


[公告]春风十里不如你,看雪团队诚邀你的加入!

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