gpt4 book ai didi

virtualbox - 从应用程序中检测虚拟化操作系统?

转载 作者:行者123 更新时间:2023-12-03 05:33:14 32 4
gpt4 key购买 nike

我需要检测我的应用程序是否在虚拟化操作系统实例中运行。

我找到了an article以及有关该主题的一些有用信息。同一篇文章出现在多个地方,我不确定原始出处。 VMware实现特定的无效 x86 指令以返回有关其自身的信息,而 VirtualPC使用魔数(Magic Number)和带有 IN 指令的 I/O 端口。

这是可行的,但在这两种情况下似乎都是未记录的行为。我想 VMWare 或 VirtualPC 的 future 版本可能会改变该机制。有没有更好的办法?这两种产品都有受支持的机制吗?

同样,有没有办法检测XenVirtualBox

我不担心平台故意隐藏自己的情况。例如,蜜 jar 使用虚拟化,但有时会掩盖恶意软件用于检测它的机制。我不在乎我的应用程序会认为它没有在这些蜜 jar 中虚拟化,我只是在寻找“尽力而为”的解决方案。

该应用程序主要是 Java,但我希望使用 native 代码加上 JNI 来实现此特定功能。 Windows XP/Vista 支持是最重要的,尽管引用文章中描述的机制是 x86 的通用功能,并且不依赖于任何特定的操作系统设施。

最佳答案

您听说过 blue pill, red pill? 。这是一种用于查看您是否在虚拟机内运行的技术。该词的由来源于the matrix movie为 Neo 提供蓝色或红色药丸(留在矩阵内 = 蓝色,或进入“真实”世界 = 红色)。

以下是一些代码,将检测您是否在“矩阵”内运行:
(代码借自 this site,其中还包含一些有关当前主题的有用信息):

 int swallow_redpill () {
unsigned char m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3";
*((unsigned*)&rpill[3]) = (unsigned)m;
((void(*)())&rpill)();
return (m[5]>0xd0) ? 1 : 0;
}

当您在虚拟机中运行时,该函数将返回 1,否则返回 0。

关于virtualbox - 从应用程序中检测虚拟化操作系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/154163/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com