VMP3.X过虚拟机检测

实战VMP,过虚拟机检测


(前言:很多的小伙伴基本上信心满满的下载了一个辅助,拖入PEID查壳,看到.vmp1的字样就放弃了,因为VMP确实挺难的,更何况加上一个虚拟机的检测。)

正题

1. 我们先来看看虚拟机检测是什么样子的。

VMP3.X过虚拟机检测 第1张

这是我在市场上随便抓来的一款检测虚拟机的辅助。这句话的意思是(Sorry,this application coannot run under a Virtual Machine)请勿在虚拟机中运行程序的意思。

那么要破解有这玩意可不行啊,很麻烦的,大家都知道OD是动态调试工具。那这种检测都不能发挥OD的功能呀,我们来解决掉这个虚拟机检测吧。

2. 载入OD

VMP3.X过虚拟机检测 第2张

日常VM,一堆看不懂的。哈哈哈哈。

 

3.VMP虚拟机检测的原理(针对3.0以上的VMP壳)

(VMP3.x 以上的版本的壳代码引入了一个标志位数值 Flags, 根据这个Flags值的位执行对应的事情。 
比如:
and 2 = 2 表示检测用户层调试器
and 4 = 4 表示检测内核调试器

and 10 = 10 表示检测虚拟机

只要将这个值修改为0,调试器和虚拟机检测甚至内存校验,文件校验都直接bypass.  ( ps: 写了这么多壳代码就这么简单就过了:)
那么现在的问题是如何快速定位到这个值。这里介绍一种比较简单快速的方法,测试了几个程序都有效。)

1. Ctrl+G搜索LocalAlloc.

VMP3.X过虚拟机检测 第3张

来到这里之后可以看到一个Push,细心的人可能已经看到了,这里是系统领空。

VMP3.X过虚拟机检测 第4张

F2下一个断点,运行之后程序会被断下来。

VMP3.X过虚拟机检测 第5张

接下来就在堆栈窗口右键查找地址-搜索HEX地址00400000

VMP3.X过虚拟机检测 第6张

来到这里之后可以看到有两个00400000

找到第二个下面的0000001F修改这个数值。

VMP3.X过虚拟机检测 第7张

全部修改为0

VMP3.X过虚拟机检测 第8张

点击确定之后,跑程序,就会有惊喜哦。

VMP3.X过虚拟机检测 第9张

可以看到完美的躲过了虚拟机检测。

接下来能不能破解就是看个人了。

VMP3.x 以上的版本的壳代码引入了一个标志位数值 Flags, 根据这个Flags值的位执行对应的事情。 
比如:
and 2 = 2 表示检测用户层调试器
and 4 = 4 表示检测内核调试器
and 10 = 10 表示检测虚拟机
只要将这个值修改为0,调试器和虚拟机检测甚至内存校验,文件校验都直接bypass.  ( ps: 写了这么多壳代码就这么简单就过了:)
那么现在的问题是如何快速定位到这个值。这里介绍一种比较简单快速的方法,测试了几个程序都有效。