首页
社区
课程
招聘
[求助]VMP脱壳中的HOOK VM_RETN到底是什么意思啊?
发表于: 2011-7-10 12:13 20852

[求助]VMP脱壳中的HOOK VM_RETN到底是什么意思啊?

2011-7-10 12:13
20852
发现很多脱文上教的寻找OEP的步骤都是下VirtualProtect断点——text段下断——hook vm_retn

这里的hook vm_retn到底是什么意思呢,要怎么样操作?

ximo  [分享] 也来谈谈VMP2.05的脱壳   

VMP的外壳部分不能说难,只能说烦。特别是IAT的修复,由于函数调用的错位(并非是规则的call xxxx nop或者nop call xxxx系列)、寄存器使用的随机性、大量的乱序等,使得写脚本修复是个非常蛋疼的事情,而且往往会修复错,修复漏,而VM代码里的IAT更是无法得到修复。于是,目前公开的方法中,最简单的也是最治本的修复方式,就是先生成张调用关系的表,然后写个DLL去读,在程序运行前,修正一些值,来达到跨平台。其他的,还真想不到有更完美的方法。或许牛人间有更好的处理方法,我这种菜鸟实在想不到了。。

至于修复IAT,牛人的文章不少了,比如kissy牛的2个视频,以及aa1ss2牛的学习笔记,这里就不再多说了。

下面写下个人脱壳的记录,当算是个简单的笔记,跟步骤的总结,没什么技术含量,一切都是按牛人的脚步学习的。

试练品是个XP记事本,加上VMP外壳的全选项,顺便把OEP处的代码也给和谐掉。下面开始脱壳:

1.CTRL+G,VirtualProtect,在VirtualProtectEx的调用处下好断点:

7C801AE3    E8 75FFFFFF          call kernel32.VirtualProtectEx

接着,在数据窗口定位到代码段,比如,这个样本的为01001000.主要是为了观察是否已经解码,找返回的时机。

2.一直F9,一直到代码段解码,取消断点。ALT+F9,返回到程序代码区。

3.HOOK VM_RETN,找程序的入口。------------------------这个是什么意思啊  内存断点  硬件断点 还是? 这里完全可以 写怎么操作的么。 我花了 两天时间都没弄明白是什么意思 ,看了很多 资料 。之前用其他办法 但是效果不好。

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

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
HOOK VM_RETN:
被vm的代码跑在vm里,原来的代码照样被执行,这样的话,势必有一个vm到真实代码切换的过程,vm_retn就是这个分界点,hook住这个,返回,看eip是否在原代码段的范围就OK了
2011-7-10 12:56
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
早在分析 1.7 那段时间,我把  jmp to handler  叫做 vm_retn ,其实不对的,楼上的解释才正确
2011-7-10 13:38
0
雪    币: 211
活跃值: (321)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我是不是在原来的代码段下访问断点,一执行就停住是不是就能达到这个效果呢?
2011-7-10 21:39
0
雪    币: 1432
活跃值: (823)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
就是退出vm的那条handle
2011-8-5 11:25
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我也遇到了这个问题,找到你帖子本以为有解决方法,发现没有额。 后来经过查资料, 那个 vm_retn 我们这样的新手是跟踪不出来的,幸好有高手写了个 fkvmp od的插件出来,用 fkvmp 可以找到 vm_retn 的地址。这样找oep的步骤就是

1、od载入程序,停到程序 EP (不是系统入口)
2、右键执行fkvmp,然后打开 Log 窗口,会看到 retn 对应的地址,记下来。
3、od 再次载入程序,停在系统入口,VirtualProtectEx F2下断,直到堆栈出现 PAGE_READONLY,取消断点
4、到 vm_retn 地址F2断点,F9运行,停下后删除断点
5、去代码段下一个内存访问断点,F9运行,就到OEP了

尝试过几个程序,均可找到oep。 仅供跟我一样的新手参考
2012-3-19 00:11
0
雪    币: 130
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
Log 窗口,会看到 retn 对应的地址  ?

我 运行fkvmp 怎么没看到啊。全部是如下数据:

地址:[54                ]GetR32        r8
地址:[12                ]GetR32        r4
地址:[67                ]add32          r0
..
.
.
.
.
     Key = 0x0318D4D

怎么会事?
2012-4-23 20:03
0
雪    币: 57
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=welcomeg;1066673]Log 窗口,会看到 retn 对应的地址  ?

我 运行fkvmp 怎么没看到啊。全部是如下数据:

地址:[54                ]GetR32        r8
地址:[12                ]GetR32        r4
地址:[67           ...[/QUOTE]

你仔细找下  会找到这个 retn     关键是它对应的地址
2012-5-21 16:23
0
雪    币: 12
活跃值: (132)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我仔细研究过VMP的加壳,很多时候如果是全选项加壳,FKVMP是无法识别VM_RETN的
建议你用另外一个插件
叫VMP分析插件,更新到1.2版本了
你用这个插件提供的虚拟机CPU窗口功能  F7几次,然后在注释里就能找到VM_RETN了
2012-5-21 17:44
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我也是百度找到这个帖子的,感谢6和9楼分享经验
2012-6-8 11:20
0
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
很好,留存,将来学习的时候用!
2013-6-1 02:05
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
脱下来有error time at xxxxxxxx 的错误提示。怎么修复啊?
2013-6-6 09:03
0
雪    币: 6092
活跃值: (654)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
13
感谢分享经验
2013-6-6 15:03
0
雪    币: 120
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
过路正好看到这么好的贴子。
2013-6-30 15:20
0
游客
登录 | 注册 方可回帖
返回
//