首页
社区
课程
招聘
[原创]VMProtect3.31的"OEP之旅"
发表于: 2019-5-8 23:42 35769

[原创]VMProtect3.31的"OEP之旅"

2019-5-8 23:42
35769

最近试着分析找了一下VMP3.31保护下的oep,以前从没分析过,第一次分析还是挺有意思的,打算和大家说说我找oep的旅途,错误纰漏处还请指正包涵。

找暂停点,不仅仅是为了下硬件断点,

下断 CreateToolhelp32Snapshot

run2次

对vmp0下内存执行断点并且run

停在vmp0区段

先把ep第一行nop掉(避免首字节int3检测),ep第二行改成jmp 0x45e53e,使程序只跑在ep这一段代码。

这样做有2个好处:
1.尽量减少原程序的干扰(例如API的调用)
2.跑起来后,直接下断停住,观察寄存器和和堆栈有什么“特点”,同时还可以与初始环境对比。
(我想先试试内存断点快速找到OEP。
一试,要么被抓到(反调试),要么程序没停住。。。
根据第二种情况,我又试图下断VirtualProtect,看看有没有改写text区段的属性。
结果断是断下了很多次,但是并没有看见对text区段的操作,这时我猜测可能模拟wow64直接走syscall了,但这个应付起来有点麻烦,暂且不管,先试试别的方法。)

现在,出现在我脑袋里的是第二个方法:对比环境

左图为初始环境,右图为oep环境
先扫一遍寄存器,都跟OEP无关。再看ebp和esp,发现没有改变,这是个好事
再看堆栈,esp-4处(19FF80)出现了OEP(45E53D)。猜测是push oep,再retn过来的

为了证实这个猜测,我把VMP的反调试选项关闭(解除硬件断点检测的干扰),重新加壳,直接对esp-4处下硬件访问断点。
一路run,run到了oep。(同时多次重新加壳,重复这个操作,都没问题。)

至此,oep已经能锁定。

由于之前VirtualProtect成功停下过,先试试这个。
下断,run9次后跑飞。那就在run8次后停下,下硬件断点,run,看看会不会检测到。
很幸运,此时已经躲过硬件断点检测了,成功到达oep。

同时,我又想到一个念头。既然躲过了硬件断点检测,那内存断点检测是否也不在了。
对此,我在text下内存执行断点,runrunrun。结果一直被停在text区段各个retn上面(应该是vmp为了对付内存断点的手段),run到后面还被反调试查出来了。这个方法宣告死亡
之前第一个方法用VirtualProtect。感觉能找到API,运气成分很大。换别的壳可能就找不到这种API了。
遂想试试第二种方法,稳妥点找到一个API(用的是API Monitor)

虽然vmp从3.1开始有wow64模拟,但是现在看来,wow64模拟也没有模拟全部API。
找API时尽量按以下要求找:
1.从后往前找,越后面调用的API越好
2.尽量不选被检测的API
3.下断API后,run到跑飞的次数要尽可能是固定的(需要多次测试)
4.需要run的次数越少越好(但检测必须已run过去)。

对比,我一直从下往上找,找到了一个适用的

但是这个API有点“不完美”,或者说太底层了。每次重新加载程序,都会在这里停10次左右。
对此,我停住后往下单步走,跟到了壳调用的API

经过多次测试,这个API就很不错,适合做暂停点。不管是默认加壳,还是全保护加壳,都只需要断2次(VirtualProtect会因此需要改变中断次数),便可以下硬件断点

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

最后于 2019-6-30 11:34 被Lixinist编辑 ,原因: 很多人看不懂,优化文章,添加思维导图
收藏
免费 7
支持
分享
最新回复 (32)
雪    币: 6
活跃值: (3290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习了。。。
2019-5-8 23:54
0
雪    币: 1656
活跃值: (125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
虽然看完没看懂,但还是学学大佬的分析
2019-5-9 08:42
0
雪    币: 5562
活跃值: (2143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
牛逼哄哄!
2019-5-9 09:04
0
雪    币: 2147
活跃值: (3206)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
oep附近的代码被tolen,这还是asp时代创造出来的技术,现在其实保护强度也已经不大了,由于编译器生成的oep大致相同,有固定特点,所以不需要还原vm后的oep,只需按照编译器特点手动写一个oep就行了。不管怎么说,楼主的有些思路还是挺有意思的,不过我个人找oep的方法可能还要简单一些,呵呵
2019-5-9 10:25
1
雪    币: 1036
活跃值: (1306)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
6
VirtualProtect 最后一个区段,在跟个vm_retn 就到OEP了。 所有版本VMP都是这样
2019-5-9 10:54
4
雪    币: 9934
活跃值: (2554)
能力值: ( LV6,RANK:87 )
在线值:
发帖
回帖
粉丝
7
感谢xiaohang版主和Xjun的指点
2019-5-9 11:15
0
雪    币: 12309
活跃值: (5063)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
StriveXjun VirtualProtect 最后一个区段,在跟个vm_retn 就到OEP了。 所有版本VMP都是这样
请问会脱VMP壳吗??
2019-5-9 14:44
0
雪    币: 62
活跃值: (971)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
xiaohang oep附近的代码被tolen,这还是asp时代创造出来的技术,现在其实保护强度也已经不大了,由于编译器生成的oep大致相同,有固定特点,所以不需要还原vm后的oep,只需按照编译器特点手动写一个oep ...
只要oep的代码没被vm即可,利用特征码或者oep处调用的第一个api
2019-5-9 16:04
0
雪    币: 1042
活跃值: (495)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
xie风腾 请问会脱VMP壳吗??
OEP应该只是一个开始吧。
2019-5-9 16:56
0
雪    币: 744
活跃值: (944)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
11
make一下
2019-5-10 04:31
0
雪    币: 9011
活跃值: (1610)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
12
学习了,看起来有些吃力,还要多学呢,谢谢分享
2019-5-12 15:56
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
你好 能联系一下吗? 有些问题想请教下 谢谢2143932917 qq
2019-5-23 11:31
0
雪    币: 9934
活跃值: (2554)
能力值: ( LV6,RANK:87 )
在线值:
发帖
回帖
粉丝
14
hukeni 你好 能联系一下吗? 有些问题想请教下 谢谢2143932917 qq
技术问题可以直接在论坛讨论,互相交流学习
2019-5-23 12:04
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
回帖怎么还要钱啊
2019-5-23 13:44
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
哎 真要命 Lixinist  有没有比较有用的 vmp脱壳 或者破解方面的资料 想学习下 网上很多 都没什么用 有没有点干货资料? 谢谢了
2019-5-23 13:45
0
雪    币: 9934
活跃值: (2554)
能力值: ( LV6,RANK:87 )
在线值:
发帖
回帖
粉丝
17
hukeni 哎 真要命 Lixinist 有没有比较有用的 vmp脱壳 或者破解方面的资料 想学习下 网上很多 都没什么用 有没有点干货资料? 谢谢了
破解没有。想学vmp脱壳,可以先学l4nce写的"浅谈safengine脱壳"
2019-5-23 14:39
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
Lixinist 你好 请问有没有什么系统一点的资料 这些资料 感觉 就算学会了 但是还是有很多不懂的 如果系统学习?
2019-5-31 14:19
0
雪    币: 9934
活跃值: (2554)
能力值: ( LV6,RANK:87 )
在线值:
发帖
回帖
粉丝
19
hukeni Lixinist 你好 请问有没有什么系统一点的资料 这些资料 感觉 就算学会了 但是还是有很多不懂的 如果系统学习?
脱壳并没有什么系统资料,教程都是直接给方法不给分析过程(硬要推荐,我还是推荐l4nce的浅谈safengine脱壳)。但是自己来分析壳,只要打好相关基础,多提高逆向分析水平,多去研究一下就能搞会。
脱壳并没有想的这么难
2019-5-31 15:19
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
Lixinist 好的 谢谢
2019-5-31 15:58
0
雪    币: 47
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
求大佬帮我脱个壳upack 2.x
2019-6-3 14:47
0
雪    币: 1484
活跃值: (1135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
看分析,楼主是大牛,请教一下学vm的还原有什么好的书籍吗
2019-6-6 07:34
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23



看不懂,
2019-6-8 03:47
0
雪    币: 144
活跃值: (44)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
[]
2020-2-15 16:15
0
雪    币: 12502
活跃值: (3048)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
25
StriveXjun VirtualProtect 最后一个区段,在跟个vm_retn 就到OEP了。 所有版本VMP都是这样
这个vm_retn不好找。不过确实可行
2020-2-16 00:56
0
游客
登录 | 注册 方可回帖
返回
//