VMAware
VMAware(VM + Aware)是一个跨平台的C++虚拟机检测库。
该库具有以下特点:
- 使用非常简单
- 跨平台(支持Windows、MacOS和Linux)
- 兼容x86和ARM架构,并向后兼容32位系统
- 提供多达100多种独特的虚拟机检测技术[列表]
- 能够检测40多种虚拟机品牌,包括VMware、VirtualBox、QEMU、Hyper-V等[列表]
- 非常灵活,可以完全精细控制执行哪些检测技术
- 能够检测各种半虚拟化技术,如虚拟机监控器、模拟器、容器等
- 支持C++11及以上版本
- 仅头文件实现
- 采用记忆化技术,缓存并检索过去的结果以提高性能
- 提供符合MIT和GPL-3.0许可证的独立库头文件
示例 🧪
#include "vmaware.hpp"
#include <iostream>
int main() {
if (VM::detect()) {
std::cout << "检测到虚拟机!" << "\n";
std::cout << "虚拟机名称:" << VM::brand() << "\n";
} else {
std::cout << "在物理机上运行" << "\n";
}
std::cout << "虚拟机确定性:" << (int)VM::percentage() << "%" << "\n";
}
结构 ⚙️
命令行工具 🔧
本项目还提供了一个小巧但实用的命令行工具,充分利用了库的全部潜力。它可以为您提供有关运行环境的各种详细信息。
安装 📥
要安装该库,只需从最新的发布区下载vmaware.hpp
文件到您的项目中。无需CMake或共享对象链接,就是这么简单。
但是,如果您想要完整的项目(全局可访问的头文件<vmaware.hpp>和命令行工具),请按照以下命令操作:
git clone https://github.com/kernelwernel/VMAware
cd VMAware
Linux系统:
sudo dnf/apt/yum update -y # 根据您的发行版更改此命令
mkdir build
cd build
cmake ..
sudo make install
Windows系统:
cmake -S . -B build/ -G "Visual Studio 16 2019"
如果您只想要二进制文件,请前往最新的发布区
文档 📒
您可以在这里查看完整文档。所有详细信息,如函数、技术、设置和示例都已提供。相信我,它并不令人生畏 ;)
问答 ❓
- 它是如何工作的?
它利用了一份全面的低级和高级反虚拟机技术列表,这些技术在评分系统中进行计算。每种技术的分数(0-100)是任意给定的,每个检测到虚拟机的技术都会将其分数添加到一个累积点数中,通过一个阈值点数来决定它是否真的在虚拟机中运行。
- 这个库适合谁使用?
它专为安全研究人员、虚拟机工程师、游戏开发者以及任何需要在项目中使用实用且可靠的虚拟机检测机制的人设计。例如,如果您正在开发虚拟机并测试其隐藏自身的效果,或者如果您是游戏开发者或任何专有软件开发者想要阻止逆向工程,或者如果您是恶意软件分析师想要检查您的虚拟机环境是否足够好以避免被检测,那么这个库都是适合的。
- 为什么还要开发另一个虚拟机检测项目?
已经有很多具有相同目标的项目,如InviZzzible、pafish和Al-Khaser。但这些项目与本项目的区别在于,它们没有提供可编程接口来与检测机制交互,而且对非Windows系统的支持很少或没有。我希望核心检测技术能以跨平台的方式提供可编程访问,让每个人都能从中受益,而不仅仅是提供一个命令行工具。
- 是否可以伪造结果?
是的。有一些技术很容易被欺骗,无论是故意的假阳性还是假阴性,库都无法解决这个问题。这是每个虚拟机检测项目都面临的问题,这就是为什么该库尝试测试所有可能的技术,以根据运行环境获得最佳结果。
- 关于将其用于恶意软件怎么看?
出于显而易见的原因,本项目不鼓励开发恶意软件。即使你打算将其用于隐蔽目的,它很可能还是会被杀毒软件标记,而且从一开始就没有进行任何混淆。
- 为什么选择 GPL 3.0 和 MIT 许可证?
我本想严格使用 MIT 许可证,这样专有软件也可以使用该库,但是一些使用的技术来自 GPL 3.0 项目,出于法律原因我别无选择,只能使用相同的许可证。这给了我一个想法,制作一个不包含所有 GPL 代码的 MIT 版本,这样就可以在不强制开源代码的情况下使用。需要注意的是,MIT 版本移除了85种技术中的12种(截至1.7版本),机制数量越少,整体结果可能就越不准确。
- 编译时出现链接错误
如果你使用 gcc 或 clang 编译,请添加
-lm
和-lstdc++
标志,或者改用 g++/clang++ 编译器。如果你在全新的 Linux 虚拟机环境中收到链接错误,请使用sudo apt/dnf/yum update -y
更新系统以安装必要的 C++ 组件。
问题和拉取请求 📬
如果你有任何建议、想法或任何形式的贡献,请随时提出!我很乐意在问题部分进行讨论。如果你想私下询问什么,我的 Discord 是 kr.nl
如果你觉得这个项目有用,给个星星就更感谢啦 :)
致谢和贡献者 ✒️
[列出了所有贡献者和项目的名称,保持原文不变]
法律声明 📜
对于你通过任何恶意使用本项目造成的任何损害,我概不负责。
许可证:GPL-3.0