为什么要判断物理机,因为授权不能对虚拟机安装后的软件进行授权。虚拟机可以复制可以克隆,无法作为一个不可复制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无用。