确定何时在虚拟机中运行
-
13-09-2019 - |
题
有没有一个 官方的 应用程序确定它是否在 VMWare 或 Virtual PC(或 Microsoft 现在所说的任何名称)中运行的方法?我看到的代码通常是一种黑客攻击,利用了特定版本的 VMWare 或 Virtual PC 中的一些奇怪的行为副作用。
理想情况下是 Delphi 代码,但如果您可以链接到官方解释,那么我确信我可以转换它。
解决方案
我去年写了一系列关于此的文章,并附有源代码。VMware 和 Wine 检测是 这里. 。虚拟电脑是 这里. 。所有这三个都具有非常可靠的检测,因为有对虚拟机管理程序的回调记录(对于 Wine,是标准 DLL 的扩展)。我在评论部分放置了一个未经测试的 VirtualBox 检测器(没有安装来测试)。也可以使用回调来检测并行,但我没有安装它。文档的链接(该链接很差,因为它来自专注于漏洞利用的安全研究人员),但位于 这里 如果您已安装并且感兴趣。还有一个PPT 这里 其中包含一些有关检测 Sandbox、Bochs 和 Xen 的信息。其中代码不多,但如果您必须检测这些代码,它可能会给您一个起点。
其他提示
代码项目显示了一种方法来检测,如果你的程序在虚拟机内运行一>是进去很多细节上如何实现它提供一个良好的了解
我觉得这个最好的办法是检查硬件配置文件。虚拟化硬件通常采用公司名称的一部分。如果您检查,而在虚拟PC主板上的描述,你会发现它是由“微软公司”制造。同样在VMWare,以太网适配器将具有的VMnet前缀。
这个线程 SysInternals 论坛上有几个答案(当然是在 Delphi 中),其中包括一个 IsVM 函数。我已经在 VMWare 中的 XP 和 Vista 上托管的 XP 和 Win2003 上进行了测试,结果良好。
有是在这里发表WMI方式: http://blogs.msdn.com/virtual_pc_guy/archive/ 2005/10/27 / 484479.aspx
我双在Virtual PC上运行的XP映像检查,他们正在测试的值仍然是相同的。我不会在这里保证什么其他虚拟机的回报,但...
其实我已经有一个Delphi程序我几年前写得到的列表,并更改使用WMI的默认打印机,而不需要第三方组件之类的东西。如果你不使用从Delphi使用WMI,所以你有什么工作过(它不一定兼容Unicode的,但我可以给你一个副本,但它不应该是太难为我升级吧如果需要的话)。
我使用的 RedPill 方法(翻译成的Delphi,但代码ISN”牛逼很难理解),这得不错。我还包括了一些额外的检查,使用WMI调用得到的东西,如网络适配器供应商名称和版权,但这是用于检测虚拟PC的特定版本。
我的RedPill方法的理解是,它应该工作,并检测基础上,它是如何工作性质的所有虚拟机。有假阳性可能还产生作为视窗7的Windows功能中的新窗口可以被配置为运行无缝内的Windows 7在Windows XP的副本选择的节目的方法可行。
我有好运气只着眼于MAC地址的所有制造商都获得了区块及第一三个部分是唯一的他们。
//look at the MAC address and determine if it's a Virtual Machine
$temp = preg_split("/\s+/",exec("/sbin/ifconfig -a eth0 2>&1 | /bin/grep HWaddr"), -1, PREG_SPLIT_NO_EMPTY);
//Virtual Box MACs all start with '08:00:27:xx:xx:xx'
if (strpos($temp[4], '08:00:27') !== false) $_SESSION['DEVELOPMENT'] = true;
要确定机器是物理或虚拟机
dmidecode | egrep -i 'manufacturer|product'
如果没有找到的dmidecode命令安装相应的转速。
这是根据EXSI,VMWARE和Hyper-V的机器进行测试。
如果你想通常检测任何类型的虚拟化的情况下,即是最分析的性能特征。就拿东西是虚拟化显著慢(如MMU繁重的工作就像一个叉炸弹)和时间,对一个正常的CPU绑定用户空间应用。从比率可以很容易地分辨。
最容易的工作量方面,如果你只关心某个虚拟机监视器是寻找他们的硬件即VMware的PCI设备:
00:07.3桥:Intel公司82371AB / EB / MB PIIX4 ACPI(修订版08) 子系统:VMware公司虚拟机芯片组
15ad:1976
供应商值是 '15ad'
也有跨越不同的VMM在各种版本一起使用的特定的后门端口。 SIDT招也不错,但如果VMM是不是他的代码检查就行了呢?
dmidecode -s system-product-name
测试VirtualBox上,结果是:
Virtualbox