一种快速过VMP3.x调试器虚拟机检测的方法

VMP3.x 以上的版本的壳代码引入了一个标志位数值 Flags, 根据这个Flags值的位执行对应的事情。 

 

比如:

and 2 = 2 表示检测用户层调试器

and 4 = 4 表示检测内核调试器

and 10 = 10 表示检测虚拟机

 

只要将这个值修改为0,调试器和虚拟机检测甚至内存校验,文件校验都直接bypass.  ( ps: 写了这么多壳代码就这么简单就过了:)

那么现在的问题是如何快速定位到这个值。这里介绍一种比较简单快速的方法,测试了几个程序都有效。

 

如下图:

 

一种快速过VMP3.x调试器虚拟机检测的方法_第1张图片

 

1. 首先下断点到LocalAlloc

 

2. 中断下来后,在数据窗口CTRL+G输入ESP, 然后从这个地址开始搜索 当前模块加载基地址 如这里的 011C0000 

    不过这里为了保险,防止搜索到多个结果,应该搜索 模块默认加载基地址 + 模块当前加载基地址 组合起来的8个字节

   如图中的: 00400000 + 011C0000

 

3. 找到后修改下面的那个值为0即可, 如图中箭头所指。

 

VMProtect 3.x 用了两种方法检测VMware
XP系统: CPUID ecx最高位是否1为1, ZwOpenSection  "\device\physicalmemory" 
WIN7系统: CPUID ecx最高位是否1为1 ,EnumSystemFirmwareTables

你可能感兴趣的:(一种快速过VMP3.x调试器虚拟机检测的方法)