确定何时在虚拟机中运行

Jim*_*eth 39 delphi virtualization vmware virtualbox virtual-pc

应用程序是否有正式的方法来确定它是在VMWare还是Virtual PC(或微软现在调用它)中运行?我见过的代码通常是在特定版本的VMWare或Virtual PC中利用一些奇怪的行为副作用的黑客.

理想的Delphi代码,但如果你可以链接到官方解释,那么我相信我可以转换它.

小智 34

去年,我用源代码写了一系列文章.VMware和Wine检测就在这里.Virtual PC就在这里.所有这三个都具有非常铁的检测,因为有记录的管理程序回调(在Wine的情况下,标准DLL的扩展).我在评论部分放了一个未经测试的VirtualBox检测器(没有安装它来测试).使用回调也可以检测到Parallels,但我没有安装它.文档的链接(由于它来自一个专注于漏洞利用的安全研究人员,因此很差),但是如果您安装了这些文档并且感兴趣,那么它就位于此处.这里还有一个PPT ,其中包含有关检测Sandbox,Bochs和Xen的一些信息.不是很多代码,但如果你必须检测它们,它可能会给你一个起点.

  • 应该注意的是,它没有使用一些正式记录的方案来检测VirtualPC的存在.它使用的指令应该在真实硬件上无效,VPC用于与外部通信.没有什么可以说这些指令将来不会改变,或者英特尔无法释放那些随后使用那些"未使用"指令的CPU. (2认同)

TSt*_*per 5

代码项目显示了一种检测程序是否在虚拟机内运行的方法,该虚拟机详细介绍了如何实现它以便更好地理解