vmware的检测与反检测

先说3种方法
代码:
#include <windows.h>
#include <stdio.h>
BOOL gInVMWARE, gInVirtualPC;
BOOL VMWareTest()
{
BYTE PortValue1,PortValue2;
__try
{
    __asm
    {
      pushad
      pushfd
      xor ebx,ebx
      mov ecx,0xa
      mov eax, 'VMXh'        ; EAX=magic    //564D5868
      mov dx, 'VX'            ; DX=magic
      in eax, dx            ; specially processed io cmd
      cmp ebx, 'VMXh'        ; also eax/ecx modified (maybe vmw/os ver?)
      sete al;
    movzx eax, al
      mov gInVMWARE, eax;
      popfd
      popad
    }
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
    gInVMWARE=FALSE;
}
return gInVMWARE;
}
BOOL VirtualPCTest()
{
__try
{
    __asm
    {
      pushad     
      mov ebx, 0 // Flag
      mov eax, 1 // VPC function number
      __emit 0Fh
      __emit 3Fh
      __emit 07h
      __emit 0Bh
      test ebx, ebx
    sete al
    movzx eax, al
      mov gInVirtualPC , eax;
      popad
    }
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
    gInVirtualPC=FALSE;
}
return gInVirtualPC;
}
BOOL VMTest()
{
    ULONG xdt = 0 ;
    ULONG InVM = 0;
    __asm
    {
        push edx
            sidt [esp-2]
            pop edx
            nop
            mov xdt , edx
    }
    printf("idt = %08x\n" , xdt);
    if (xdt &gt; 0xd0000000)
    {
        //printf("IDT Test :running in vm!\n");
        InVM = 1;
    }
    else
    {
        InVM = 0;
    }
    __asm
    {
        push edx
            sgdt [esp-2]
            pop edx
            nop
            mov xdt , edx
    }
    printf("gdt = %08x\n" , xdt);
    if (xdt &gt; 0xd0000000)
    {
        InVM += 1;
    }
    else
    {
        InVM += 0;
    }
    return InVM;
}
int main()
{
    if (VMWareTest())
    {
        printf("In Vmware !!!");
    }
    else if (VirtualPCTest())
    {
        printf("In VirtualPC!!!!");
    }
    else if (VMTest())
    {
        printf("In VM !");
    }
    else
    {
        printf("In Host!");
    }
    getchar ();
    return 1;
}
OK,这样VMWare里面基本都能检测到
检测虚拟机,一般来说有3种方法:
1,是猥琐法,比如系统中有没有vmware类似的服务,进程等,检查BIOS的信息,虚拟设备的名称等等,这种方法是很猥琐的,优点是防不胜防,缺点就是不准确,而且都能修改(注意:BIOS也是能修改的)。
2,是模拟漏洞法,由于虚拟机毕竟不是真机,模拟上面是有一定的漏洞的,上面的VMTest就是漏洞法。优点是准确,基本上100%可以确定,因为是模拟的漏洞,所以不容易修改,缺点基本上没有。
3,是后门法,虚拟机需要和host进行通讯,利用通讯检测虚拟机,如上面的那个VMWare.GetVersion的后门。优点是准确,缺点是可以屏蔽掉后门。
所以,一般来说都是用后门法,高级一点用模拟漏洞。
随着硬件虚拟化技术的迅猛发展,模拟的漏洞越来越少,开了VT功能后,使用VMWare 6.0以上基本上灭掉了所有模拟的漏洞,后门法,patch一下主程序和guest的tools。
下面图是我修改过的开了VT-x的VMWare,用上面的代码是检测不出来的

注意红框,如果修改配置文件屏蔽后门,vmware tools是无法启动的。我这里是Patch了Vmware tools和vmware-vmx.exe的主程序实现的,后来想想,还是避不开猥琐的校验。。
能过99%的anti vmware,主要还是靠VT技术,实在太强大了。
由于某些原因,上面的模拟漏洞我只贴了MJ0011的代码,还有几个漏洞(暂时不公开写出来,当然无法对付VMWare的)可以对付其他几款虚拟机,比如VBox(开了VT也被检测)。

 

======================

4个检测:

  1. 1. STR WORD PTR SS:[EBP] ; in vmware TR = 0x4000
  2. 2. IN EAX,DX ; EAX = "VMXh", DX = "VX" 著名的 vmware backdoor
  3. 3. POPFD ; flag = 393 TF set
  4.    RDTSC ; vmware处理rdtsc的一个漏洞,在TF标志职位的情况下执行rdtsc,vmware和真机对eip处理不同,前者多加了1       
  5. 4. POPFD ;
  6.    CPUID ; 这里引发单步异常,去检测cpuid返回,具体啥区别懒得看了:)

复制代码

本来想写个loader完事,但是好像很不完美,有没办法隐藏vmware呢。。。google之
果然很强大vmx可以设置很多东西有一些隐藏参数:
monitor_control.restrict_backdoor = "true"   ---可以对付2
monitor_control.virtual_rdtsc = "false"      ---可以对付3
disable_acceleration = "ture"   ---对付1,4,不过这项会让虚拟机运行很慢,最好是先运行起来,在运行vmp保护程序前,再到setting里面processor那里设置,程序起来后在设置回去,这样就不影响了:)

======================

mks.enable3d = "true"

===================

monitor_control.disable_directexec = "TRUE"
isolation.tools.getVersion.disable = "TRUE"

===========

themida再加上这行就可以了
monitor_control.disable_directexec = "TRUE"

====================

找到 VMWARE 虚拟文件的目录

用文本方式打开目录下的后缀为 vmx 的文件。在后面加入:
isolation.tools.getVersion.disable = "TRUE"
monitor_control.disable_directexec = "TRUE"

这个是虚拟提高模拟程度 会让虚拟机运行速度降低。这样就可以启动梦幻了 如果不行再看下面!!!!

下面列出具体的VMX后缀文件的参数 按照上面方法不行的在对照 !!!!仔细看说明!!!!

config.version = "8" *

virtualHW.version = "4" *

scsi0.present = "TRUE" *

memsize = "256" *

MemAllowAutoScaleDown = "FALSE" *

ide0:0.present = "TRUE"

ide0:0.fileName = "Windows XP Professional.vmdk" *

ide1:0.present = "TRUE"

ide1:0.fileName = "F:\下载\Deepin-LiteXP-5.10.iso" *

ide1:0.deviceType = "cdrom-image"

floppy0.present = "FALSE"

ethernet0.present = "TRUE"

usb.present = "TRUE"

sound.present = "TRUE"

sound.virtualDev = "es1371"

sound.fileName = "-1"

sound.autodetect = "TRUE"

displayName = "按键[1]" *

guestOS = "winxppro"

nvram = "Windows XP Professional.nvram" *

ide0:0.redo = ""

ide1:0.startConnected = "TRUE"

ethernet0.addressType = "generated"

uuid.location = "56 4d 83 e2 76 1d 70 b6-38 7c 08 b3 98 5a 85 3b"

uuid.bios = "56 4d 83 e2 76 1d 70 b6-38 7c 08 b3 98 5a 85 3b"

ethernet0.generatedAddress = "00:0c:29:5a:85:3b"

ethernet0.generatedAddressOffset = "0"

tools.syncTime = "TRUE"

ide1:0.autodetect = "TRUE"

workingDir = "."

sound.startConnected = "TRUE"

isolation.tools.getVersion.disable = "TRUE"

monitor_control.disable_directexec = "TRUE"

修改完还是运行不了梦幻 就对比参数 看哪里不同 修改一下就可以了 *号的可以忽略不该

===========

0、

MSN不能保存聊天记录,选项为灰色[解决办法]
文章来源:http://www.ljf.cn/2007/6/Item2618.html

因为该帐号也为来宾帐号.把来宾组(Guests)中该用户名删除就OK了(权限设置为User权限即可)

Excel去除数据表中的重复行

http://www.sumwill.com/bbs/dispbbs.asp?boardid=4&Id=35

一、重复行的内容完全一致的情况;

如:姓名 性别   专业 年级             | 结果:姓名 性别   专业 年级

AA     女     经济   05                 |            AA     女     经济   05

        CC     男     财务    06                   |           CC     男     财务    06

AA     女     经济   05                  |

操作方法:

1. 选中表中的所有记录(注意,此时应将每列的标题行也选择上,否则筛选完的数据表中将不再包含有该标题行),执行“数据”菜单→“筛选→高级筛选”命令;
2. 在弹出的“高级筛选”对话框中选择“将筛选结果复制到其他位置”一项,并点击“复制到”选择框后面的范围按钮来选择一块区域以存放筛选后的数据(注意:此处千万不要与原数据所处的单元格相重合,否则数据表将会混乱),最后,勾选“选择不重复的记录”复选框后,点击“确定”按钮即可。

图片点击可在新窗口打开查看此主题相关图片如下:z22069w9fph0.gif
图片点击可在新窗口打开查看

- - - - - - - - - - - - - - - - - -

二、行与行比较,只是某一列的内容有重复,其它内容可能不一致的情况;

这时希望以某列为条件,找出重复的内容,把其所在的整行删除;

如:姓名 性别   专业 年级                | 结果:姓名 性别   专业 年级

AA     女      管理   06                  |            AA     女      管理   06

        CC     男     财务    06                  |           CC     男     财务    06

AA     女     经济   05                  |

我们只需要A列(即:姓名列)没有重复。

操作方法:

1、添加新列E,输入数字等差序列(如1、2、3……),拖动手动柄就可以。
2、将全表按A列排序。
3、在F2输入公式:
=IF(A2=A1,"重复","")
拖动手动柄,将公式向下复制到相应行。
4、全选表,"数据-&gt;自动筛选",选定F列"(空白)",这样就筛选出没有重复的数据了。
5、复制筛选后的表,把表黏贴到另外的工作表中。
6、将全表按E列排序,恢复数据原始顺序,然后把E列删除。
7、Ok

在Excel 2007 中去除重复数据的方法

图片点击可在新窗口打开查看

点击“删除重复项”

图片点击可在新窗口打开查看

点击“确定”

图片点击可在新窗口打开查看

图片点击可在新窗口打开查看

防止虚拟机被应用程序检测的代码

http://bibocailian.cn/article/show.asp?id=697

下载: 防止虚拟机被应用程序检测的代码

网上转载的,不知道原始出处在哪里(诶,好像大家都习惯转载不留原始出处信息)。留个底,说不定哪天会用到呢。

某不靠谱银行(就不指名道姓了,大家心照不宣)的网银专业版检测到运行在虚拟机里就拒绝登录。有个办法是花钱买��家的 USB Key,映射到虚拟机 guest 里。如果不想花钱,就只好用下面的方法欺骗一下。孟子说,君子可欺之以方。对某银行 IT 部这群偏执狂,更可以欺之而心安理得。

另外,期待其它虚拟机的反检测方案。嘿嘿。

--------------------------------------------------------------------------------

如果你的电脑足够快,那么

首先你把你的 VMware 虚拟机里面的操作系统调到最快的状态(关闭不必要的程序、自动更新等)然后关闭虚拟机;
打开 VMware 虚拟机的配置文件,这是一个后缀为 vmx 的文本文件。在里面加入以下内容
isolation.tools.getPtrLocation.disable = "TRUE"
isolation.tools.setPtrLocation.disable = "TRUE"
isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
monitor_control.disable_directexec = "TRUE"
monitor_control.disable_chksimd = "TRUE"
monitor_control.disable_ntreloc = "TRUE"
monitor_control.disable_selfmod = "TRUE"
monitor_control.disable_reloc = "TRUE"
monitor_control.disable_btinout = "TRUE"
monitor_control.disable_btmemspace = "TRUE"
monitor_control.disable_btpriv = "TRUE"
monitor_control.disable_btseg = "TRUE"
这些参数不一定都需要,不过最保险的是都加。可以提高模拟的真实性,不过速度也会慢很多。

对今天的某行网银专业版而言只需要加

isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
这两个,不影响虚拟机速度。以后不行了再加其它项。

修改 vmx 文件完毕后应测试 VMware 是否能登录专业版。

我这边是由于某软件有自动检测虚拟机,需要如下设置即可:

isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
monitor_control.disable_directexec = "TRUE"

你可能感兴趣的:(vmware,职场,检测,休闲)