为什么要判断物理机,因为授权不能对虚拟机安装后的软件进行授权。虚拟机可以复制可以克隆,无法作为一个不可复制ID来使用。

总结了如何判断物理机:

1. 用systeminfo的系统型号。(注,有资料是看处理器和bios。但是我这台不明确。看系统型号准确一些)

腾讯云是这样的。

 华为云是这样的。

所以这个必须枚举所有的名字。不是太好的办法。

2. 在任务管理器》性能中查看“逻辑处理器”还是“虚拟处理器”。虚拟机,看“是“、”否”。

这里可以看。但是怎么编程得到。可以再找找资料。

3. 用vmprotect加密时,判断虚拟机。能检测到vmware中的win7.  它说明书上面写可以检测VMware, Virtual PC, VirtualBox, Sandboxie. 但是对于云主机测试了四台,完全无法检测。这非常遗憾。云主机一般采用KVM,它应该支持才妙。

4. 搜了资料找到一种编程方法判断的。

#define CPUID dw 0xa20f

DWORD dwCPUName, dwCPUReserved1, dwCPUReserved2, dwCPUID;

 asm
    {
    PUSHAD
    MOV EAX, 1
    CPUID
    //MOV dwCPUName, EAX
    //MOV dwCPUReserved1, EBX
    MOV dwCPUReserved2, ECX
    //MOV dwCPUID, EDX
    POPAD
    }

执行后,判断wCPUReserved2>=0x80000000为虚拟机(最高字节1),否则物理机(最高字节0)

if((unsigned long)dwCPUReserved2>=0x80000000){

        //退出

end if

这个方法对云主机,对vmware有用。对Sandboxie无用(好在vmprotect可以处理sanboxie)。

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐