核心突破:在安卓硬件上原生运行 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)。