【旧文】VMP3.X过虚拟机检测

2022-04-25 19:15:04 浏览数 (2)

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

正题!

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

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

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

  1. 载入OD

日常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.

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

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

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

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

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

全部修改为0。

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

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

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

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

0 人点赞