首页
社区
课程
招聘
[原创]VMP分析插件应用实例:一个简单的CrackMe
发表于: 2013-2-21 22:43 109240

[原创]VMP分析插件应用实例:一个简单的CrackMe

2013-2-21 22:43
109240
收藏
免费 9
支持
分享
最新回复 (155)
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
虽然写的比较细了,无法学习,只能膜拜
2013-2-23 10:30
0
雪    币: 89
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
膜拜,今天上班还能看到这样的好东东,mark
2013-2-23 11:35
0
雪    币: 4506
活跃值: (4483)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
一键还原成 右边的注释就好了 那VMP就真的拜拜了  楼主太强悍
2013-2-23 13:12
0
雪    币: 102
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
顶大牛!!!!
顶大牛!!!!
顶大牛!!!!
顶大牛!!!!
顶大牛!!!!
2013-2-23 13:22
0
雪    币: 64
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
MARK
2013-2-23 14:43
0
雪    币: 1432
活跃值: (3107)
能力值: ( LV9,RANK:156 )
在线值:
发帖
回帖
粉丝
31
先膜拜后学习。
2013-2-23 18:56
0
雪    币: 43
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
问一下楼主,这个神器可以分析VMP的SDK吗?
2013-2-23 20:13
0
雪    币: 1270
活跃值: (230)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
33
可以,这个CrackMe里调用了4个SDK函数,VMProtectIsDebuggerPresent、VMProtectIsVirtualMachinePresent、VMProtectIsValidImageCRC、VMProtectDecryptStringA,分别是检测调试器、检测虚拟机、检测文件改变、解密字符串。其他的没试过,应该也可以的,SDK就是一段虚拟程序,跟其他的好像没什么区别。
2013-2-23 20:32
0
雪    币: 204
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
爆句粗话          很好很强大
2013-2-24 13:17
0
雪    币: 476
活跃值: (307)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
这个必须膜拜。。。。。。。。
2013-2-24 14:27
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
36
发重复了。纠正一下。
2013-2-24 15:55
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
37
我看到一个VMP的程序,貌似里面有以下4个API,不知是不是SDK。另外,不知道SDK的API直接RET如何操作,请楼主再指点一二。

0053227C   硬件断点 1 位于 terminal.0053227C
           [ebp]: 76A47E1A | kernel32.IsDebuggerPresent
0053227C   硬件断点 1 位于 terminal.0053227C
           [ebp]: 76A3504E | kernel32.CheckRemoteDebuggerPresent
0053227C   硬件断点 1 位于 terminal.0053227C
           [ebp]: 76A60651 | kernel32.UnhandledExceptionFilter
0053227C   硬件断点 1 位于 terminal.0053227C
           [ebp]: 77546048 | ntdll.ZwQueryInformationProcess
2013-2-24 15:56
0
雪    币: 1270
活跃值: (230)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
38
[QUOTE=csjwaman;1145506]我看到一个VMP的程序,貌似里面有以下4个API,不知是不是SDK。另外,不知道SDK的API直接RET如何操作,请楼主再指点一二。

0053227C   硬件断点 1 位于 terminal.0053227C
           [ebp]: 76A47E1A | kernel32.Is...[/QUOTE]
VMP的反调试确实有这几个API,入口的调试器检测和VMProtectIsDebuggerPresent中的方法是一样的。如果调用API时文件还没有解压,可能是入口的检查,否则应该是SDK,当然也有可能是用户自己加的。如果只是想过反调试的话,直接用StrongOD插件就行了,我是为了脱壳时不用填充这些API地址才修改的SDK。
我的方法是在SDK的入口直接退出虚拟机,先要找到入口,如果中断在API的话可以在返回到的地址选择分析虚拟机,选中进入虚拟机时中断,进入虚拟机调试状态后一直Ctrl+F9直到正常代码(不包括调用),往前一点就应该是进入虚拟机的位置,在这里分析虚拟程序。如果SDK是虚拟机中调用的就跟进去找虚拟机内调用,SDK中有一些很明显的特点比如使用vCall指令调用API等,普通程序中没有这些。找到入口后就可以让他在做检测之前退出虚拟机,方法这篇教程里讲过了,在最后脱壳的地方,这里再说一下。
VMP在进入虚拟机后会把堆栈中的初始数据弹出,退出虚拟机前把真实寄存器压栈,vRet负责恢复。所以我们要找到初始数据全部被弹出(堆栈长度为0)的地方,按顺序压入真实寄存器对应的数据,然后用vRet退出虚拟机就行了,注意EAX的返回值要正确。
2013-2-24 17:59
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
39
实在太精彩了
2013-2-24 18:05
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
40
感谢回复。这几个API是在脱壳后,使用某些功能时才调用的。 这几个API没有放在输入表中,估计是LocalAlooc时放入的。应该是反DUMP的手段吧。不知也可以直接RET不?
2013-2-24 20:35
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
41
会火~~~~~~~~~~~~
2013-2-25 08:04
0
雪    币: 6
活跃值: (1201)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
42
lz太强了,文章有点长,留着慢慢看
2013-2-25 09:43
0
雪    币: 1270
活跃值: (230)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
43
脱壳后还能调用,说明脱壳后的程序中还有这些API的地址,一般SDK中使用的API地址都是加密后放在动态分配的内存中的,DUMP时应该保存不下来。如果想脱壳后去掉这些API调用的话,在SDK做任何事之前退出虚拟机就行了,就像我前面说过的。
2013-2-25 11:44
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
44
非常感谢,继续研究!
2013-2-25 14:25
0
雪    币: 525
活跃值: (789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
45
看的好晕,要是有个视频配着这文字说明就好了。插件反汇编窗口右键查看- 注释 表达式 引用数据 产生数据 怎么都没有显示呢?
2013-2-27 13:55
0
雪    币: 1270
活跃值: (230)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
46
这些东西要分析后才能显示的,你是不是反汇编后没有分析啊,选中菜单里的反汇编后自动分析试试,或者按Ctrl+A手工启动分析。
2013-2-28 22:22
0
雪    币: 196
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
楼主精神可嘉,膜拜,必须地
2013-3-3 19:28
0
雪    币: 525
活跃值: (789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
所有的全选上了,遇到临时指令块。是没有分析数据的。怎么分析这个所谓的临时指令块呢。进入临时指令块后,按ctrl+A没什么用啊!
2013-3-6 12:03
0
雪    币: 1270
活跃值: (230)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
49
临时指令块是调试过程中遇到没有分析过的代码时从中断的vEIP临时反汇编的,不是完整的虚拟程序,所以不能分析,一般是启用进入虚拟机时中断后中断到没有分析过的代码里。想分析的话有两种方法,第一个是数据窗口中跟随当前vEIP,右键菜单里选分析虚拟程序,需要填写虚拟机指令表地址,这种方法不能分析初始化部分,而且当前vEIP不是指令块的第一条指令的话还有可能分析失败。另一种是找到虚拟程序入口再分析,这是比较好的方法,可以先执行到返回,直到退出虚拟机(不包括调用时的退出),前面应该就是调用虚拟机的地方。
2013-3-7 12:08
0
雪    币: 8320
活跃值: (3995)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
50
神帖~~神帖~~神帖~~神帖~~神帖~~
2013-3-8 13:15
0
游客
登录 | 注册 方可回帖
返回
//