news 2026/5/26 23:51:38

从源码到执行:unlocker工具patchsmc函数如何修改VMware SMC表?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从源码到执行:unlocker工具patchsmc函数如何修改VMware SMC表?

从源码到执行:unlocker工具patchsmc函数如何修改VMware SMC表?

【免费下载链接】unlockerVMware Workstation macOS项目地址: https://gitcode.com/gh_mirrors/unlo/unlocker

如果你在Windows或Linux系统上使用VMware Workstation想要运行macOS虚拟机,那么你一定听说过unlocker工具。这个神奇的解锁工具通过修改VMware的SMC(系统管理控制器)表,让VMware能够识别和运行macOS系统。今天,我们将深入探讨unlocker工具中最核心的patchsmc函数,看看它如何巧妙修改VMware的SMC表结构,实现macOS虚拟化的完美支持。🛠️

📊 什么是SMC表?为什么需要修改?

SMC(System Management Controller)是苹果硬件中的一个关键组件,负责管理电源、温度、风扇等硬件功能。在真实Mac电脑中,SMC通过特定的密钥(keys)与操作系统通信。VMware为了支持macOS虚拟化,需要模拟苹果的SMC控制器,这就是SMC表的作用。

然而,VMware默认的SMC实现包含了一些限制,阻止了非苹果硬件上运行macOS。unlocker工具的patchsmc函数正是通过修改这些限制,让VMware能够在普通PC上运行macOS虚拟机。

🔍 patchsmc函数的工作原理

1. SMC表结构解析

在深入研究patchsmc函数之前,我们需要了解SMC表的基本结构。从unlocker.py文件的注释中可以看到:

# vSMC Header Structure # Offset Length Struct Type Description # ---------------------------------------- # 0x00/00 0x08/08 Q ptr Offset to key table # 0x08/08 0x04/4 I int Number of private keys # 0x0C/12 0x04/4 I int Number of public keys # vSMC Key Data Structure # Offset Length Struct Type Description # ---------------------------------------- # 0x00/00 0x04/04 4s int Key name (byte reversed e.g. #KEY is YEK#) # 0x04/04 0x01/01 B byte Length of returned data # 0x05/05 0x04/04 4s int Data type (byte reversed e.g. ui32 is 23iu) # 0x09/09 0x01/01 B byte Flag R/W # 0x0A/10 0x06/06 6x byte Padding # 0x10/16 0x08/08 Q ptr Internal VMware routine # 0x18/24 0x30/48 48B byte Data

每个SMC密钥条目大小为72字节,包含密钥名称、数据类型、读写标志、内部例程指针和实际数据。

2. 关键密钥:OSK0和OSK1

patchsmc函数主要修改两个关键密钥:

  • OSK0:包含"ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"字符串
  • OSK1:包含"rnfrqbagfgrny(p)NccyrPbzchgreVap"(经过ROT-13编码)

这两个密钥是苹果验证硬件合法性的关键。unlocker通过修改这些密钥的值和对应的处理例程,绕过苹果的硬件验证机制。

3. patchsmc函数的执行流程

让我们看看patchsmc函数的具体实现:

def patchsmc(name, sharedobj): with open(name, 'r+b') as f: # 1. 读取文件内容 vmx = f.read() # 2. 查找SMC表头 smc_header_v0 = b'\xF2\x00\x00\x00\xF0\x00\x00\x00' smc_header_v1 = b'\xB4\x01\x00\x00\xB0\x01\x00\x00' # 3. 查找关键密钥 key_key = b'\x59\x45\x4B\x23\x04\x32\x33\x69\x75' # #KEY adr_key = b'\x72\x64\x41\x24\x04\x32\x33\x69\x75' # $Adr # 4. 定位SMC表 smc_header_v0_offset = vmx.find(smc_header_v0) - 8 smc_header_v1_offset = vmx.find(smc_header_v1) - 8 # 5. 查找密钥表位置 smc_key0 = vmx.find(key_key) smc_key1 = vmx.rfind(key_key) # 6. 调用patchkeys函数修改密钥 smc_old_memptr, smc_new_memptr = patchkeys(f, smc_key0)

🔧 patchkeys函数:修改SMC密钥的核心

patchkeys函数是实际修改SMC密钥的核心逻辑。它遍历SMC密钥表,找到OSK0和OSK1密钥并进行修改:

  1. 查找+LKS密钥:首先找到+LKS密钥,获取其内部例程指针
  2. 修改OSK0:将OSK0的内部例程指针替换为+LKS的指针,并写入新的数据
  3. 修改OSK1:同样替换OSK1的内部例程指针,并写入ROT-13编码的数据

关键修改代码片段:

# 修改OSK0密钥 elif smc_key[0] == b'0KSO': f.seek(offset) f.write(struct.pack(key_pack, smc_key[0], smc_key[1], smc_key[2], smc_key[3], smc_new_memptr)) # 写入新的数据 f.seek(offset + 24) smc_new_data = codecs.encode('bheuneqjbexolgurfrjbeqfthneqrqcy', 'rot_13') f.write(smc_new_data.encode('UTF-8')) # 修改OSK1密钥 elif smc_key[0] == b'1KSO': f.seek(offset) f.write(struct.pack(key_pack, smc_key[0], smc_key[1], smc_key[2], smc_key[3], smc_new_memptr)) # 写入新的数据 f.seek(offset + 24) smc_new_data = codecs.encode('rnfrqbagfgrny(p)NccyrPbzchgreVap', 'rot_13') f.write(smc_new_data.encode('UTF-8'))

🔐 ROT-13编码:简单的加密保护

你可能注意到了代码中使用的ROT-13编码。这是一种简单的替换密码,将字母替换为字母表中后面第13个字母。例如:

  • bheuneqjbexolgurfrjbeqfthneqrqcyourhardworkbythesewordsguardedpleasedontsteal
  • rnfrqbagfgrny(p)NccyrPbzchgreVapeasterbunny(c)AppleComputerInc

这种简单的编码不是为了安全,而是为了绕过基本的字符串扫描。

🚀 如何使用unlocker工具?

虽然我们深入了解了patchsmc函数的内部工作原理,但普通用户不需要理解这些细节。使用unlocker工具非常简单:

Windows用户:

  1. 下载最新版本的unlocker工具
  2. 以管理员身份运行win-install.cmd
  3. 重启VMware Workstation

Linux用户:

  1. 确保已安装Python 3
  2. 给脚本添加执行权限:chmod +x lnx-install.sh
  3. 使用sudo运行:sudo ./lnx-install.sh

⚠️ 重要注意事项

在使用unlocker工具时,请记住以下几点:

  1. 备份重要数据:在修改VMware文件前,工具会自动创建备份,但最好还是手动备份虚拟机
  2. 关闭VMware:运行解锁工具前,确保所有VMware进程都已关闭
  3. 版本兼容性:unlocker支持VMware Workstation 11-26H1和Player 7-25H2
  4. SMC版本设置:创建macOS虚拟机后,可能需要在VMX文件中添加smc.version = "0"

💡 技术细节:SMC表版本

unlocker支持两种SMC表版本:

  • appleSMCTableV0:对应smc.version = "0"
  • appleSMCTableV1:对应smc.version = "1"

patchsmc函数会自动检测并修改两个版本的表,确保兼容不同的VMware版本。

🎯 总结

unlocker工具的patchsmc函数通过精心设计的二进制修改技术,巧妙地绕过了VMware对macOS虚拟化的限制。它通过:

  1. 定位SMC表:在VMware二进制文件中找到SMC表结构
  2. 修改关键密钥:替换OSK0和OSK1密钥的数据和内部例程
  3. 使用ROT-13编码:简单加密绕过基本检测
  4. 支持多版本:兼容不同VMware版本的SMC表结构

这种技术展示了逆向工程和二进制修补的强大能力,让普通PC用户也能享受macOS虚拟化的便利。无论你是开发者想要测试macOS应用,还是普通用户想要体验macOS系统,unlocker工具都提供了一个可靠的解决方案。

记住,虽然技术很有趣,但请确保你的使用符合相关法律法规和软件许可协议。快乐虚拟化!🍎

【免费下载链接】unlockerVMware Workstation macOS项目地址: https://gitcode.com/gh_mirrors/unlo/unlocker

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 23:51:35

SciHubEVA技术架构揭秘:Python+Qt构建跨平台GUI应用的最佳实践

SciHubEVA技术架构揭秘:PythonQt构建跨平台GUI应用的最佳实践 【免费下载链接】SciHubEVA A Cross Platform Sci-Hub GUI Application 项目地址: https://gitcode.com/gh_mirrors/sc/SciHubEVA SciHubEVA是一款基于Python和Qt框架开发的跨平台Sci-Hub图形界面…

作者头像 李华