如何快速获取Apple设备标识头?Provision retrieve_headers实战教程
【免费下载链接】ProvisionSet of tools interracting with Apple servers. Don't hesitate to leave a star if you appreciate it.项目地址: https://gitcode.com/gh_mirrors/pr/Provision
在Linux上与Apple服务器打交道,最核心的难题之一是如何让Apple“认出”你的设备。Provision 的retrieve_headers工具正是为此而生:它在本地模拟一台 Mac,向 Apple 服务器完成 Anisette/ADI 设备注册,并直接以 JSON 形式输出一整套 Apple 设备标识头(如X-Apple-I-MD、X-Mme-Device-Id等)。本文带你用 3 步快速获取这套 Apple 设备标识头,并讲清每一步的原理与常见坑。
为什么需要 Apple 设备标识头?
Apple 的许多服务端接口(App Store、iCloud 相关服务、AltServer 生态等)都会校验请求中的设备指纹。这套指纹的核心是Anisette Data(ADI,Apple Device Identification):
- 设备第一次“登录”Apple 服务器时完成provisioning(设备备案),服务器从此记住这台机器,后续请求可少遇 2FA 拦截;
- 每次请求需要携带一组
X-Apple-I-*请求头来标识设备身份; - ADI 由 Apple 的
CoreADI库生成,Linux 上无法原生调用,Provision 通过加载 Apple Music for Android 的库来桥接。
关于 ADI 的更多背景,可参考项目内的 docs/ADI.md 说明文档(以代码内路径docs/ADI.md为准)。
retrieve_headers 能返回哪些标识头?
运行retrieve_headers后,终端会打印一段 JSON,其中每个字段都是构建 Apple 请求时必需的标识头:
| 请求头 | 含义 |
|---|---|
X-Apple-I-MD/X-Apple-I-MD-M | Base64 编码的一次性口令与机器标识,Apple 设备认证核心 |
X-Apple-I-MD-LU | 本地用户 UUID(设备创建时随机生成) |
X-Apple-I-MD-RINFO | 设备区域信息固定值 |
X-Mme-Client-Info | 设备描述,如 MacBookPro13,2 + macOS 13.1 |
X-Mme-Device-Id | 唯一设备标识(UUID 形式) |
X-Apple-I-Client-Time/X-Apple-I-TimeZone | 当前时间与时区,用于服务器校验请求新鲜度 |
X-Apple-Locale | 固定为en_US |
这套输出逻辑集中在 retrieve_headers/app.d 中:首次运行创建“虚拟机器”,未备案时自动 provisioning,随后向 ADI 请求 OTP 并组装 JSON 输出。
三步快速获取 Apple 设备标识头
第一步:获取项目并编译
需要 D SDK(含dub包管理器):
git clone https://gitcode.com/gh_mirrors/pr/Provision --recursive cd Provision dub build -b release也可以使用 CMake + Ninja 构建:
mkdir build && cd build cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release ninja编译成功后,可执行文件位于bin/目录下,其中retrieve-headers即为本教程的主角(子包定义见 dub.sdl)。
第二步:放置 Apple 运行时库(最易被忽略的一步)
retrieve_headers运行时依赖 Apple 的原生库,必须放在可执行文件同级目录下的lib/<架构>/中:
- 下载 Apple Music 的 Android APK(或只取对应架构的切片);
- 解压出其中的
lib/文件夹放到可执行文件旁; - 架构目录名必须与本机匹配:
x86_64、x86、arm64-v8a或armeabi-v7a(对应逻辑见 retrieve_headers/app.d 中architectureIdentifier的定义)。
💡 想缩小体积?只保留libstoreservicescore.so和libCoreADI.so两个文件即可,其余可删。
第三步:运行并解析输出
在bin/目录(编译时已设为工作目录)下执行:
./retrieve-headers首次运行会看到类似过程:
Creating machine...—— 生成虚拟 Mac 身份并写入~/.config/Provision/device.json(Windows 为%LocalAppData%\Provision\);Machine requires provisioning...—— 向 Apple 服务器备案,完成后机器即被标记为“可信设备”;- 最后打印上述 JSON 标识头,可直接复制进你的 HTTP 请求。
排查问题时可加debug参数输出 TRACE 级日志:
./retrieve-headers debug使用要点与避坑清单
- ⚠️不要用主力 Apple 账号测试。作者明确声明不对账号后果负责,强烈建议用备用小号。
- 🔒保护好 ADI 数据:备案成功后,ADI 数据会缓存在
~/.adi/adi.pb。该文件等同“设备身份证”,泄露意味着他人可伪装你的设备身份。 - 🧠备案只需一次:
retrieve_headers每次运行都会检查是否已 provisioning,已备案则直接取 OTP 输出,重复执行是安全的。 - ⏱️注意时间准确性:
X-Apple-I-Client-Time取本机系统时间,时间漂移过大可能导致请求被拒。 - 🐳需要长期服务?同项目还内置
anisette_server(anisette_server/app.d),在 6969 端口提供 Anisette provisioning 服务,可供 AltServer-Linux 等第三方软件复用,README 中给出了 Docker 部署方式。
常见问题
Q:运行报找不到库或段错误?确认lib/<架构>/目录名与 CPU 架构严格一致,且libstoreservicescore.so、libCoreADI.so齐全。
Q:X-Mme-Client-Info能改吗?可以。它来自device.json中的serverFriendlyDescription,首次创建后可手动修改为你的设备型号描述。
Q:能跨平台运行吗?支持 Linux 与 Windows(架构支持 x86/x86_64/ARM),配置目录按平台自动选择。
总结
retrieve_headers用一条命令完成了「创建虚拟 Mac → Apple 服务器备案 → 输出设备标识头」全流程,是 Linux 上对接 Apple 服务生态的便捷入口。记住三件事:放对lib/架构目录、用备用账号、保管好~/.adi/adi.pb,你就能稳定获取到一整套可用的 Apple 设备标识头。
【免费下载链接】ProvisionSet of tools interracting with Apple servers. Don't hesitate to leave a star if you appreciate it.项目地址: https://gitcode.com/gh_mirrors/pr/Provision
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考