了解安装程序的第一步是确定安装程序是用什么产品创建的,然后查看是否有任何已知的提取命令行。Universal Extractor 2等工具也可以帮助自动执行此操作。在这种情况下,如果您使用ProcMon等工具,您可以看到 VMWare 的 setup.exe 提取 MSI 并执行它。
我们可以将管理员安装命令行传递给 setup.exe,然后将其传递给提取 MSI 的 Windows Installer msiexec.exe。VMWare 在从与 VMware Workstation 捆绑的 VMware Tools中提取驱动程序中也记录了这一点
setup /A /P C:\setup
这会将文件与 MSI 一起输出到 C:\setup。然后,您可以浏览文件夹结构以识别文件,或使用 MSI 编辑工具(例如ORCA)打开 MSI 以查看注册表和自定义操作。
另请注意,还有更多低级选项,然后只需查找文件/驱动程序来检测 VMWare 中的运行情况,例如根据确定软件是否在 VMware 虚拟机中运行的机制
- 测试 CPUID 管理程序存在位 测试虚拟 BIOS
- DMI 信息和管理程序端口
使用 CPU id 的示例:
int cpuid_check() {
unsigned int eax, ebx, ecx, edx;
char hyper_vendor_id[13];
cpuid(0x1, & eax, & ebx, & ecx, & edx;;
if (bit 31 of ecx is set) {
cpuid(0x40000000, & eax, & ebx, & ecx, & edx;; memcpy(hyper_vendor_id + 0, & ebx, 4); memcpy(hyper_vendor_id + 4, & ecx, 4); memcpy(hyper_vendor_id + 8, & edx, 4); hyper_vendor_id[12] = '\0';
if (!strcmp(hyper_vendor_id, "VMwareVMware")) return 1; // Success - running under VMware }
使用 DMI 信息:
int dmi_check(void) {
char string[10];
GET_BIOS_SERIAL(string);
if (!memcmp(string, "VMware-", 7) || !memcmp(string, "VMW", 3)) return 1; // DMI contains VMware specific string. else return 0; }