
核心突破:在安卓硬件上原生运行 iOS
HackiOS 项目成功在安卓手机硬件上启动了苹果开源的 XNU 内核(版本 xnu-8796.121.2,对应 iOS 16.5),并在此基础上运行未经修改的 iOS 16.5 用户空间。系统启动流程完整覆盖从 launchd、backboardd、SpringBoard 到各类应用。这一成果通过自研 EFI 加载器、苹果闭源驱动的替代方案、UEFI 移植版本以及在兼容层上运行的 Linux Wi-Fi 驱动实现。
该项目主要在以下两种环境中运行:
- POCO X5 Pro 5G (redwood, Snapdragon 778G):无需刷入任何内容。通过
fastboot boot启动 UEFI,整个系统驻留于内存中,重启后手机自动恢复为 Android 状态。 - QEMU (
virt, aarch64):可在任何 Linux 计算机上运行,无需物理手机参与。
项目架构与合规声明
本项目代码分为两个独立仓库:
| 仓库 | 包含内容 |
|---|---|
| hackios-xnu-kernel | XNU 补丁、EFI 加载器、UEFI 移植、Wi-Fi 支持、QEMU 脚本、xl 工具、预编译组件及通用脚本。 |
| hackios-xnu-userland | 自定义 init、注入库、launchd 任务、APFS 镜像构建器、IPSW 提取工具、Metal/Mesa 相关工作。 |
重要声明:两个仓库中均不包含任何苹果专有文件。
ios165/fetch.sh脚本会从苹果 CDN 下载 iOS 16.5 IPSW 文件至本地并提取所需内容。HackiOS 是 OOSEX GANG 进行的独立研究项目,与 Apple Inc. 无关,未获得其授权或认可。
功能现状:已实现与待完善
作为一个研究平台而非完整 ROM,每次会话持续固定时间,随后内核返回加载器并移交日志。当前功能状态如下:
| 已实现功能 | 尚未实现(进行中) |
|---|---|
| 锁屏、滑动解锁、主屏幕(含图标及壁纸)、系统手势(上滑主页/多任务、侧滑返回、控制中心) | 蜂窝网络、蓝牙 |
| 基础应用:设置、时钟、日历、照片、备忘录、Safari 等;小组件(天气、日历) | 在该内核下充电(目前仅放电) |
| 触摸屏支持(Goodix GT9916)、多点触控、触摸唤醒;实体电源键和音量键映射 | 应用级 Metal 支持(进展中:456 个系统着色器中已有 293 个在 Adreno 上运行) |
| CPU 支持:最多 8 核,大核频率 2.4 GHz,约 20 秒进入锁屏界面 | App Store 内容及 Apple ID 登录(缺乏安全 enclave;FairPlay 守护进程退出) |
| GPU 加速:通过 Mesa/freedreno 使用 Adreno 642L GPU(CoreAnimation 使用 OpenGL ES) | 视频录制和实况照片录制 |
| Wi-Fi 连接(WCN6750, ath11k):速度 55–90 Mbit/s,支持 Safari 上网 | |
| 音频(扬声器、主麦克风)、相机应用(前后摄预览、对焦、HEIC 照片) | |
| 数据持久化:iOS 写入的数据在重启后保留(根卷位于手机闪存) | |
| 包管理:支持 Sileo + Procursus (dpkg, apt)、插件及 SSH |
快速开始:QEMU 环境(无需编译内核)
prebuilt/ 目录已包含预编译的内核、加载器及程序,用户只需在本地从苹果 IPSW 制作系统镜像即可。
环境需求:Linux x86-64 系统,约 12 GB 空闲磁盘空间,4 GB 空闲内存。
依赖安装示例:
- Arch Linux:
sudo pacman -S --needed git python 7zip lz4 gcc qemu-system-aarch64 qemu-ui-gtk edk2-aarch64 - Debian/Ubuntu:
git python3 7zip liblz4-dev gcc qemu-system-arm qemu-efi-aarch64(注意:7-Zip 必须为 23 或更高版本以支持 APFS)。
运行步骤:
git clone https://github.com/oosexgang/hackios-xnu-kernel.git hackios
cd hackios
common/setup.sh # 初始化工作树并检查环境
ios165/fetch.sh # 下载并提取 iOS 16.5 所需内容(约 7.4 GB)
common/build.sh qemu-virt # 构建 APFS 镜像
common/run.sh qemu-virt # 启动 QEMU 窗口,进行 20 分钟会话
锁屏界面通常在 2–3 分钟后出现。操作映射:按住鼠标左键移动模拟手指触控;H 为主页键,L 为锁屏/电源键。
在手机端运行(POCO X5 Pro 5G)
需要一台 Bootloader 已解锁的 POCO X5 Pro 5G,并具备 adb 和 fastboot 环境。此过程不会向手机存储写入任何永久内容。
固件提取:需从手机当前的 Android 系统中提取专有固件(GPU、Wi-Fi、音频、触觉反馈),并放置在指定目录。
adb pull /vendor/firmware/a660_{gmu.bin,sqe.fw,zap.mdt,zap.b00,zap.b01,zap.b02} fw-gpu/
adb pull /vendor/firmware_mnt/image/wpss.{mdt,b02,b03,b04,b05,b06,b07} fw-wifi/
adb pull /vendor/firmware_mnt/image/adsp.{mdt,b02,...,b36} fw-audio/
adb pull /vendor/firmware/aw8697_haptic.bin fw-haptic/
构建与运行:
common/build.sh redwood GL=1 # 构建镜像及 boot.img
common/run.sh redwood 900 # 载入 RAM,进行 15 分钟会话
也可使用 ./xl 工具逐步执行控制,支持截图、日志记录及重启返回 Android 系统。
技术原理与目录结构
iOS 的程序、框架和 dyld 共享缓存字节未作任何更改。缺失的功能由内核(驱动替换)或通过内核使用 DYLD_INSERT_LIBRARIES 注入的库来补全。
启动流程:
fastboot boot ──► UEFI (Mu-Silicium) ──► xnuloader (EFI 应用程序)
│
▼
XNU (定制平台配置)
├─ 驱动替换: IOSurface, IOMobileFramebuffer, 网络协议栈等
├─ 输入: Goodix 触摸驱动 / virtio-input
├─ GPU: Adreno 642L (Mesa/freedreno)
▼
iOS 16.5 用户空间 (launchd → SpringBoard → 应用)
关键目录说明:
common/:构建、运行脚本及设备配置。xl:通过 USB 控制手机的命令行工具。xnuloader/:不依赖 EDK2 的 EFI 加载器。xnu/:XNU 内核补丁及修改。wifi/lx/:Linux Wi-Fi 驱动兼容层。
许可证与团队
本仓库主要采用 Apple Public Source License 2.0 许可。第三方代码(如 ath11k、FreeBSD LinuxKPI、libzbitmap 等)保留其各自许可(BSD、MIT 等)。
开发团队:OOSEX GANG (@oodze, @netusd, @wannqn, @hxfuxyyXD)。