您可以从程序中隐藏您的操作系统吗?你能欺骗程序认为你在不同的操作系统上吗?

信息安全 操作系统
2021-08-17 12:48:00

有没有办法或程序让另一个程序认为我正在使用不同的系统?

例如,假设我目前使用的是 32 位 Windows 7,并且我希望程序检测到 64 位 Windows 10 或 Windows XP。

我可以用硬件做类似的事情吗?我可以告诉一个程序我从 2003 年初开始在 PC 上运行,即使它是从去年(2019 年)开始的?

4个回答

厚颜无耻的回答:我认为您即将发明虚拟机。

为了使硬件看起来像 2003 主板,您需要处理诸如编写 CPU 指令转换层之类的事情,以便程序提供 2003 时代的 CPU 二进制指令,并且您的层将它们转换为您的 2019 硬件的指令明白。

为了使操作系统看起来像 32 位 Windows 7,您需要隐藏 、 等中的所有二进制文件和其他文件,这些文件C:\Windows显然C:\Program Files是 Windows 10 安装的一部分,而是“伪造”一个完整的文件系统与所有 Windows 7 32 位文件。您还需要一个围绕 Windows 10 内核的包装器,以使程序可访问的内核 API 看起来和行为类似于 Windows 7 内核。即你不能真的“伪造”这个;您基本上需要在 Windows 10 中模拟 Windows 7 32 位的全功能安装。

当你做完这一切的时候,你基本上已经发明了虚拟机那么为什么不直接下载 VirtualBox,将硬件仿真设置为 2003 年的硬件,然后在其上安装 Windows 7 32 位呢?

根据您想要的“技巧”级别,您可以使用内置的兼容性功能来做到这一点。Windows 支持以特殊模式运行程序,以各种方式模拟旧版本和/或旧硬件。仿真并不完美——如果你看的话,很容易分辨出它正在被使用,并告诉你实际的操作系统是什么——但它会满足一个认为它只能在 Windows 2000 或其他操作系统上运行的软件只知道256色模式。

为了诱使软件认为它运行在完全不同的操作系统上——Linux 而不是 Windows 或类似操作系统——你最好的选择(VM 除外)是wine(对于 Linux 上的 Windows 代码)或wsl(适用于 Linux 的 Windows 子系统,运行未修改的 ELF64 Linux 二进制文件和需要 Linux 的脚本,但需要 Win10)。同样,任何寻找它的东西都可以检测到这一点,但它会欺骗只调用程序或库调用以吐出操作系统名称/版本的程序。

你可以在一定程度上做到这一点,但这并不容易。

首先,您可以尝试 WINE,它是适用于 Linux 的 Windows 兼容层。您可以很容易地设置要模拟的 Windows 版本。不利的一面是应用程序的兼容性可能会受到影响,如果您的应用程序无法正常工作,您可能需要找到一种解决方法才能使其正常工作(如果存在的话)

与您的第二个要求(隐藏硬件细节)很好结合的第二种方法是 QEMU。QEMU 是一个免费的虚拟机软件,我之所以在 VMware 或 VirtualBox 之类的东西上提到这一点,是因为它让你可以更好地控制你想要构建的机器类型,但代价是可用性。

例如,您可以使用该-cpu标志来指定要模拟的 CPU 类型。例如,您可以-cpu pentium3用来模拟 Pentium 3 CPU。这就是安装的客户操作系统,因此程序会看到。

有没有办法或程序让另一个程序认为我正在使用不同的系统?

是的,而且很常见。

例如,FreeBSD 有一个“Linuxulator”,它允许运行 Linux 二进制文件。这既不是在虚拟机中,也不是在仿真中。它是 Linux 二进制文件的另一组系统调用。检测二进制文件是使用本机 FreeBSD 系统调用还是 Linux 系统调用是通过可执行文件的 ELF 标头 AFAIK。

WINE(在 Linux 或 BSD 系统上运行 Windows 原生程序)和 Windows Services for Linux 版本 1(在 Windows 上运行 Linux 原生程序)中使用了类似的原理。