HackiOS 在 Android 设备和 QEMU 上运行完整的 iOS 16.5 固件
HackiOS 在 Android 和 QEMU 上启动 iOS 16.5
要点: HackiOS 项目成功在骁龙 778G Android 手机和 aarch64 QEMU 上运行了苹果开源 XNU 内核(版本 xnu-8796.121.2,iOS 16.5),提供了功能完整的 iOS 16.5 用户空间,无需刷机。
项目成果
- 完整的 iOS 16.5 技术栈: XNU 内核启动 launchd → backboardd → SpringBoard → 应用,重现了完整的 iOS 体验。
- 仓库中不包含任何 Apple 文件: 所有 iOS 二进制文件在构建时从 Apple 的 CDN 获取(
ios165/fetch.sh)。 - 两种部署模式:
- POCO X5 Pro 5G(redwood,骁龙 778G) – 通过
fastboot boot启动;所有内容在 RAM 中运行,重启后手机恢复 Android。 - QEMU virt aarch64 – 可在任何 Linux 主机上运行,无需手机。
- POCO X5 Pro 5G(redwood,骁龙 778G) – 通过
- 研究级,而非 ROM: 会话有时间限制;内核在可配置的时间后返回加载器。
功能亮点
| 可用 | 尚未实现 |
|---|---|
| 锁屏、滑动解锁、带图标的主屏幕、iOS 16 壁纸 | 蜂窝网络、蓝牙 |
| 系统手势(主页、应用切换器、返回)、控制中心 | 自定义内核下的充电(手机会放电) |
| 核心应用(设置、Safari、照片等)和小组件 | 大多数应用的 Metal 渲染(293/456 个着色器可用) |
| 触摸屏(Goodix GT9916)、多点触控、电源/音量键 | App Store 内容、Apple ID 登录(缺少 Secure Enclave) |
| 最多 8 个 CPU 核心,约 20 秒进入锁屏 | 视频/实况照片拍摄 |
| 通过 Mesa/freedreno 的 Adreno 642L GPU(用于 CoreAnimation 的 OpenGL ES) | – |
| Wi-Fi(WCN6750,ath11k)– 55–90 Mbit/s | – |
| 音频、麦克风、前置/后置摄像头(HEIC 照片) | – |
持久化 iOS 数据(var_store=1 ufs_write=1) |
– |
| Sileo + Procursus 包管理器、SSH、插件 | – |
在 QEMU 上快速开始(无需构建内核)
# 安装依赖(Arch 示例)
sudo pacman -S --needed git python 7zip lz4 gcc qemu-system-aarch64 qemu-ui-gtk edk2-aarch64
# 克隆仓库并设置工作区
git clone https://github.com/oosexgang/hackios-xnu-kernel.git hackios
cd hackios
common/setup.sh # 拉取 hackios-xnu-userland,检查主机
ios165/fetch.sh # 下载约 7.4 GB IPSW,提取所需部分
common/build.sh qemu-virt # 构建 APFS 镜像(使用预构建内核)
common/run.sh qemu-virt # 启动约 20 分钟的 QEMU 会话
- 锁屏在 2–3 分钟后出现。
- 按住鼠标左键模拟手指;
H= 主页,L= 锁屏,方向键 = 音量,F11(按住)= 五指手势。 - 脚本输入示例:
qemu/touch.py swipe 0.5 0.985 0.5 0.3 250 qemu/touch.py tap 0.615 0.71 qemu/touch.py key home qemu/screendump.sh shot.png - 使用主机的 UEFI 固件:
QEMU_EFI=/usr/share/AAVMF/AAVMF_CODE.fd QEMU_VARS=/usr/share/AAVMF/AAVMF_VARS.fd。
在 POCO X5 Pro 5G(redwood)上运行
- 解锁引导加载程序并安装
adb/fastboot。 - 按照 README 中的说明从手机提取供应商固件(GPU、Wi-Fi、音频、触觉),并将
fw-*目录放在工作区旁边。 - 构建启动镜像并运行:
common/build.sh redwood GL=1 # 生成 out/redwood-boot.img common/run.sh redwood 900 # 15 分钟会话 - 或使用
xl助手进行精细控制:
加载器完全在 RAM 中运行;不会对手机存储进行任何持久更改。./xl enter # fastboot boot 自定义 UEFI 加载器 ./xl ramdisk # 上传 2.5 GB iOS 系统镜像到 RAM XL_SECS=900 XL_CMDLINE="touchscreen=1 cpufreq=1 bootcpu=7 cpus=8 gpu=1 wifi=1 adsp=1" ./xl run ./xl screenshot shot.png ./xl reboot # 返回 Android
预构建启动镜像
每个版本都附带 hackios-redwood-boot.img,这是一个包含自定义加载器的即用型 UEFI 镜像。它不包含任何 Apple 二进制文件;您仍然需要使用 ios165/fetch.sh 在本地生成 iOS 系统镜像。
从源码构建内核和加载器
- 内核: 需要 theos(
~/theos)、cctools、iPhoneOS16.5.sdk、clang、lld、python、perl。按照xnu/README.md并运行xnu-build.sh。 - 加载器: 使用
xnuloader/build.sh构建(纯 clang + lld-link,无需 EDK2)。 - UEFI: 从 Project Silicium 移植;预构建二进制文件位于
prebuilt/uefi。 - 镜像:
REST=1 userland/build.sh创建 APFS 容器和 rootfs。 - 重新构建后,运行
tools/update-prebuilt.sh刷新prebuilt/目录。
移植到其他 Android 设备
- 生成设备配置文件:
common/new-device.sh <codename> path/to/device.dtb。 - 编辑生成的
common/devices/<codename>.conf以描述 UEFI 平台、加载器参数和驱动替换。 - 按照
docs/PORTING.md中的详细步骤(UEFI 移植、内核驱动补丁、固件提取)。
HackiOS 的工作原理
fastboot boot → UEFI (Mu-Silicium) → xnuloader (EFI 应用)
│ 保持驻留,提供 USB 链接、看门狗、内核日志
▼
XNU(基于 BCM2837 配置,为 redwood/QEMU 打补丁)
├─ GICv3、定时器、视频控制台、返回加载器路径
├─ RAM 中的 APFS 镜像,用于 /private/var 和 /tmp 的 ramfs
├─ Mini-crypto、AMFI 和 Sandbox 存根(MAC 策略)
├─ 驱动替换:IOSurface、IOMobileFramebuffer、AppleKeyStore、网络栈
├─ 输入:/dev/redwood-touch(Goodix GT9916)或 virtio-input
├─ GPU:通过 Mesa/freedreno 的 Adreno 642L,Wi-Fi:ath11k(LinuxKPI),声音:ADSP/virtio-sound
▼
launchd → logd、notifyd、cfprefsd、runningboardd、backboardd、SpringBoard、应用
└─ 使用 DYLD_INSERT_LIBRARIES 注入的库提供虚拟 HID 服务和 ObjC 方法交换。
iOS 二进制文件未被修改;缺失的功能由内核驱动垫片或注入的用户空间库提供。
调试和开发工作流
- 会话日志: QEMU 标准输出或手机上的
logs/HHMMSS-run.log。 - 自动启动应用:
RC_JOBS=rc.jobs.tour REST=1 userland/build.sh构建一个打开每个首屏应用的镜像。 - 崩溃诊断: 查找
userabort:(进程调用abort())或usertrap:(使用systrace=1)。 - 实时堆栈跟踪(QEMU):
qemu/touch.py stacks NAME然后qemu/symstack.py LOG NAME(需要ipsw工具)。 - 检查可靠性: 参见
docs/checks.md了解已知的误报。
社区反应(Hacker News 评论)
"我觉得这个网站看起来令人作呕,所以我决定改用 GitHub 链接。但它在 QEMU、POCO X5 Pro 5G 和一些小米设备上运行,这相当令人印象深刻。" – aghuang
"你能制作一个 GSI 在任何 Android 手机上运行吗?" – Velocifyer
"终于有人做到了,哇!2026 年真是越来越疯狂。" – pmkary
"为什么这些演示都停在 iOS 16?iOS 17 有什么变化?" – bigwheels
"干得好。这很酷,有点像旧 Mac 的 Hackintosh。有了这个,你能访问 App Store 吗?我认为 Android 缺少一个唯一标识符使其无法工作。" – dj_io
这些评论表达了兴奋、对更广泛设备支持的好奇,以及对 App Store 访问和未来 iOS 版本的疑问。
许可
- 仓库本身采用 Apple Public Source License 2.0(APSL 2.0),因为它包含 XNU 的衍生作品。
- 第三方组件保留其原始许可证(ath11k 的 BSD-3-Clause-Clear、FreeBSD LinuxKPI 的 BSD-2-Clause、libzbitmap 和 libdeflate 的 MIT、AOSP UEFI 助手的 Apache-2.0)。
- 不分发任何 iOS 二进制文件;
ios165/fetch.sh直接从 Apple 的 CDN 下载它们。
更多信息
- 源代码: https://github.com/oosexgang/hackios-xnu-kernel
- 用户空间仓库: https://github.com/oosexgang/hackios-xnu-userland
- 文档:
docs/文件夹包含截图、移植指南和详细检查。 - 社区频道: Telegram 群组 https://t.me/oosexgangdevs
结论
HackiOS 证明了 iOS 16.5 内核和用户空间可以在非 Apple 硬件上运行,方法是用开源等价物替换闭源驱动,并通过自定义 UEFI 加载器启动。虽然仍是一个研究原型——缺少蜂窝网络、蓝牙、完整的 Metal 支持和 App Store 功能——它为 iOS 实验、跨平台测试和安全研究开辟了新的领域。