(前言:很多的小伙伴基本上信心满满的下载了一个辅助,拖入PEID查壳,看到.vmp1的字样就放弃了,因为VMP确实挺难的,更何况加上一个虚拟机的检测。)
正题!
- 我们先来看看虚拟机检测是什么样子的。
这是我在市场上随便抓来的一款检测虚拟机的辅助。这句话的意思是(Sorry,this application coannot run under a Virtual Machine)请勿在虚拟机中运行程序的意思。
那么要破解有这玩意可不行啊,很麻烦的,大家都知道OD是动态调试工具。那这种检测都不能发挥OD的功能呀,我们来解决掉这个虚拟机检测吧。
- 载入OD
日常VM,一堆看不懂的。哈哈哈哈。
3.VMP虚拟机检测的原理(针对3.0以上的VMP壳)
(VMP3.x 以上的版本的壳代码引入了一个标志位数值 Flags, 根据这个Flags值的位执行对应的事情。 比如: and 2 = 2 表示检测用户层调试器 and 4 = 4 表示检测内核调试器
and 10 = 10 表示检测虚拟机
只要将这个值修改为0,调试器和虚拟机检测甚至内存校验,文件校验都直接bypass. ( ps: 写了这么多壳代码就这么简单就过了:) 那么现在的问题是如何快速定位到这个值。这里介绍一种比较简单快速的方法,测试了几个程序都有效。)
- Ctrl G搜索LocalAlloc.
来到这里之后可以看到一个Push,细心的人可能已经看到了,这里是系统领空。
F2下一个断点,运行之后程序会被断下来。
接下来就在堆栈窗口右键查找地址-搜索HEX地址00400000。
来到这里之后可以看到有两个00400000
找到第二个下面的0000001F修改这个数值。
全部修改为0。
点击确定之后,跑程序,就会有惊喜哦。
可以看到完美的躲过了虚拟机检测。
接下来能不能破解就是看个人了。
VMP3.x 以上的版本的壳代码引入了一个标志位数值 Flags, 根据这个Flags值的位执行对应的事情。 比如: and 2 = 2 表示检测用户层调试器 and 4 = 4 表示检测内核调试器 and 10 = 10 表示检测虚拟机 只要将这个值修改为0,调试器和虚拟机检测甚至内存校验,文件校验都直接bypass. ( ps: 写了这么多壳代码就这么简单就过了:) 那么现在的问题是如何快速定位到这个值。这里介绍一种比较简单快速的方法,测试了几个程序都有效。