菜单

序列号生成

相关源文件

本文档介绍了 Docker-OSX 中的序列号生成系统,解释了为什么序列号对于 macOS 虚拟化至关重要,生成过程如何工作,以及如何根据不同的用例配置序列号。

目的与范围

Docker-OSX 中的序列号生成为虚拟化的 macOS 系统提供唯一的硬件标识符,使其看起来像合法的 Apple 设备。这对于以下方面至关重要:

  • 启用 Apple 服务 (iCloud, iMessage, App Store)
  • 安全研究目的
  • 创建多个唯一的 macOS 实例
  • 防止 Apple 服务被屏蔽

本文档专门介绍序列号的生成和应用。有关 OpenCore 配置的详细信息,请参阅 OpenCore 配置

序列号为何重要

在 macOS 中,有几个唯一的标识符可以验证系统是否为Genuine Apple设备

  • 序列号:设备的唯一序列号
  • 主板序列号 (MLB):主逻辑板序列号
  • UUID:系统的唯一标识符
  • MAC 地址:网络接口标识符(也用于导出 ROM 值)
  • ROM:从 MAC 地址导出的硬件标识符

登录时,Apple 服务会检查这些值。不正确或重复的值可能会触发账户锁定或服务限制。

来源: README.md1214-1396

序列号生成架构

下图展示了序列号生成与 Docker-OSX 的集成方式

来源: README.md1214-1396 custom/generate-unique-machine-values.sh1-397 custom/generate-specific-bootdisk.sh1-291

序列号生成方法

Docker-OSX 提供三种主要的序列号生成和应用方法

1. 通过环境变量在运行时生成

最简单的方法是在启动容器时使用环境变量

来源: README.md1281-1351

2. 使用 generate-unique-machine-values.sh

用于在运行时之前生成一组值

此脚本为一台或多台虚拟机创建带有随机序列信息的输出文件。

来源: custom/generate-unique-machine-values.sh1-397

3. 使用 generate-specific-bootdisk.sh

用于创建带有预定序列值的启动盘

来源: custom/generate-specific-bootdisk.sh1-291

技术实现

值生成过程

系统采用以下方法生成一致、逼真的值

  1. 序列号和主板序列号:使用 OpenCorePkg 中的 Apple 特有 macserial 工具生成
  2. UUID:标准 UUID,大写格式
  3. MAC 地址:厂商特定(Apple)MAC 地址,带随机后缀
  4. ROM:小写 MAC 地址,去掉冒号

来源: custom/generate-unique-machine-values.sh215-221 custom/generate-unique-machine-values.sh276-290

配置应用

生成的价值通过以下方式插入到 OpenCore 配置中

  1. 模板替换:一个带有占位符(例如,{{SERIAL}})的模板 config.plist 会进行值替换
  2. 启动盘创建:修改后的配置被打包成可启动的 QEMU 磁盘映像
  3. 运行时集成:QEMU 在虚拟机启动时使用此磁盘

config.plist 模板中的占位符

  • {{DEVICE_MODEL}}
  • {{SERIAL}}
  • {{BOARD_SERIAL}}
  • {{UUID}}
  • {{ROM}}
  • {{WIDTH}}
  • {{HEIGHT}}
  • {{KERNEL_ARGS}}

来源: custom/generate-unique-machine-values.sh341-349 custom/generate-specific-bootdisk.sh249-257

使用示例

1. 运行时生成随机序列

2. 使用特定序列号

3. 生成并保存序列值以备后用

来源: README.md1263-1339

保持序列号持久化

为了确保序列号在容器重启后保持不变

  1. 保留您生成的启动盘:

  2. 保存您的序列值:

  3. 在后续运行中重新使用这些值,并使用 GENERATE_SPECIFIC 选项。

来源: README.md1353-1396

设备型号和显示分辨率

序列号生成系统还管理

  1. 设备型号选择:控制模拟的 Mac 型号

  2. 显示分辨率:配置虚拟显示器

常见分辨率

  • 800x600
  • 1280×768
  • 1600×900
  • 1920×1080
  • 2560×1600

来源: README.md1398-1489

验证和故障排除

验证序列号

要检查序列号是否正确应用

故障排除

如果 Apple 服务不识别您的序列号

  1. 确保所有五个值均已正确设置(SERIALBOARD_SERIALUUIDMAC_ADDRESS 和导出的 ROM
  2. 验证 DEVICE_MODEL 是否合适(较新的服务可能需要较新的型号)
  3. 对于 iMessage/iCloud 问题,尝试创建新的序列集
  4. 检查序列号是否看起来真实(应符合 Apple 的格式)

来源: README.md1221-1229

总结

序列号生成是 Docker-OSX 的关键组成部分,它允许虚拟 macOS 实例

  1. 向 Apple 服务进行身份验证
  2. 显示为Genuine Apple硬件
  3. 创建多个唯一的虚拟 Mac 实例
  4. 支持安全研究和测试

该系统提供了灵活的选项,用于在运行时和准备阶段生成随机或特定的序列号。