首页
社区
课程
招聘
[原创]找寻OEP的两种通用方法
发表于: 2018-5-13 11:06 11277

[原创]找寻OEP的两种通用方法

2018-5-13 11:06
11277

本次我们将了解找寻OEP的两种通用方法,希望能起到抛砖引玉的作用~

调试器:OD

环境:winXP SP3 虚拟机

一.最后一次异常法

壳代码有时主动抛出异常,比如利用异常处理机制做反调试。但是CODE段没有异常。  所以最后一次异常距离真OEP应该很近了。

首先要忽略所有异常,并且配置好反反调试。

F9运行后,点击L来到日志窗口。

这里面一定有一行:程序入口点,它是EP(entry point),不是OEP(original entry point),是带壳的入口点,这是程序最先开始执行的地方。

假设最后一次异常发生在40E88F

重新载入,这次我们不忽略异常,每次当执行到异常被断下时,都按下shift+f9手动忽略异常,直到断到最后一次发生在40e88f的异常。

在代码段设置内存访问断点,按下shift+f9,断到OEP。

注:考虑到过早在代码段设置内存执行断点,就可能被检测到。等到离OEP很近时下断就比较安全了。

本次我们将了解找寻OEP的两种通用方法,希望能起到抛砖引玉的作用~

调试器:OD

环境:winXP SP3 虚拟机



一.最后一次异常法

壳代码有时主动抛出异常,比如利用异常处理机制做反调试。但是CODE段没有异常。  所以最后一次异常距离真OEP应该很近了。

首先要忽略所有异常,并且配置好反反调试。

F9运行后,点击L来到日志窗口。

这里面一定有一行:程序入口点,它是EP(entry point),不是OEP(original entry point),是带壳的入口点,这是程序最先开始执行的地方。

假设最后一次异常发生在40E88F

重新载入,这次我们不忽略异常,每次当执行到异常被断下时,都按下shift+f9手动忽略异常,直到断到最后一次发生在40e88f的异常。

在代码段设置内存访问断点,按下shift+f9,断到OEP。

注:考虑到过早在代码段设置内存执行断点,就可能被检测到。等到离OEP很近时下断就比较安全了。


二.利用壳常用函数定位OEP
壳代码经常需要调用一些关键函数,跟踪这些关键函数的执行,在合适时机给CODE段下断,到达OEP。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-5-25 13:55 被r0Cat编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 871
活跃值: (9841)
能力值: ( LV13,RANK:385 )
在线值:
发帖
回帖
粉丝
2
你知不知道,GetProcAddress可以重写.如果重写情况下是不是要对导出表做内存访问找到关键代码.不过还是赞一个.
2018-5-15 09:18
0
雪    币: 8715
活跃值: (8619)
能力值: ( LV13,RANK:570 )
在线值:
发帖
回帖
粉丝
3
是的,这个是最理想的状况;  实际情况比这个要麻烦的
2018-5-16 21:22
0
雪    币: 9142
活跃值: (1630)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
4
学习了,感谢分享
2018-6-25 15:16
0
雪    币: 14
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
刚刚好学到这里,挖贴了,感谢作者分享
2019-12-26 13:08
0
游客
登录 | 注册 方可回帖
返回
//