跳到主内容
@wquguru
精选82Hacker News Best(web_list)技巧与观点

HackiOS:在安卓手机上运行完整 iOS 16.5 系统

Run full iOS 16.5 firmware on Android Devices

原文
发到 X
## HackiOS — XNU内核 HackiOS在Android手机硬件上引导苹果开源的XNU内核(xnu-8796.121.2,即iOS 16.5的内核),并在其之上运行未经修改的iOS 16.5用户空间:launchd → backboardd → SpringBoard → apps。我们自己的EFI加载器、对苹果封闭驱动程序的替换方案、UEFI移植版本以及兼容层上的Linux Wi-Fi驱动程序使得这一切成为可能。它在两个地方运行:- POCO X5 Pro 5G (redwood, Snapdragon 778G) — 无需刷入任何内容:通过fastboot boot启动UEFI,整个系统驻留在RAM中,重启后手机恢复至Android状态;- QEMU (virt, aarch64) — 在任何Linux计算机上实现相同功能,无需使用手机。此仓库是项目的一半:仓库hackios-xnu-kernel(本仓库)XNU补丁、EFI加载器、UEFI移植、Wi-Fi支持、QEMU脚本、xl工具、预编译内核/加载器/UEFI、common/脚本 hackios-xnu-userland我们的init程序、注入库、launchd作业、APFS镜像构建器、从Apple IPSW中提取iOS的工具、Metal/Mesa相关代码 这两个仓库均不包含任何Apple文件。ios165/fetch.sh会从Apple自身的CDN下载iOS 16.5 IPSW到本地机器并提取所需内容。HackiOS 是 OOSEX GANG 的一个独立研究项目,与 Apple Inc. 无关,未获得其授权或认可。iOS、iPhone 和 Apple 均为 Apple Inc. 的商标。照片拍摄于手机,Adreno GPU 绘图 (gpu=1)。更多信息见截图。
## 功能支持情况
支持尚不支持
锁屏、滑动解锁、主屏幕及所有图标(两页)、iOS 16 自带壁纸蜂窝网络、蓝牙
系统手势:上滑(主页、应用切换器)、边缘滑动(返回)、控制中心充电(在我们的内核下,手机仅放电)
应用:设置、时钟、日历、照片、备忘录、Safari 等;手机上的小组件(天气、日历)应用的 Metal 支持(进行中:456 个系统着色器中已有 293 个在 Adreno 上运行,详见 hackios-xnu-userland 中的 docs/air.md)
手机触摸屏(Goodix GT9916)、多点触控、触摸唤醒;真实的电源键和音量键App Store 内容和 Apple ID 登录(无 Secure Enclave;FairPlay 守护进程退出)
最多 8 个 CPU 核心 (cpus=8),大核频率 2.4 GHz,约 20 秒进入锁屏界面视频和实况照片录制
通过 Mesa/freedreno 的 Adreno 642L GPU (gpu=1,CoreAnimation 使用 OpenGL ES)Wi-Fi (WCN6750, ath11k):从设置加入、Wi-Fi 下的 Safari、55–90 Mbit/s
声音(扬声器、主麦克风)、Camera.app 中的相机(前置/后置、预览、对焦、HEIC 照片)iOS 写入的数据在重启后得以保留 (var_store=1 ufs_write=1);手机闪存上的 iOS 根卷
Sileo + Procursus (dpkg, apt)、插件、SSH这是一个研究平台,而非 ROM:会话持续指定秒数,随后内核返回加载程序并移交其日志。
## 快速开始:QEMU,无需构建内核
prebuilt/ 目录包含从这些仓库构建的内核、加载程序和我们自己的程序,因此你只需要系统镜像,它是在你的机器上基于 Apple 的 IPSW 制作的。需求:Linux x86-64,约 12 GB 空闲磁盘空间,4 GB 空闲内存。软件包(Arch):``` 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 # 将 hackios-xnu-userland 引入同一树结构,检查主机 ios165/fetch.sh # 从 Apple CDN 下载 7.4 GB 并提取所需内容(5-15 分钟)common/build.sh qemu-virt # 构建 APFS 镜像(如果存在工具链,则构建内核)common/run.sh qemu-virt # 在 QEMU 窗口中进行 20 分钟的会话 ``` 锁屏界面将在 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。- SpringBoard 刚出现时,系统仍在注册应用:请等待 30–40 秒。- Debian/Ubuntu UEFI 固件:QEMU_EFI=/usr/share/AAVMF/AAVMF_CODE.fd QEMU_VARS=/usr/share/AAVMF/AAVMF_VARS.fd。## 在手机(POCO X5 Pro 5G)上你需要一台具有已解锁引导加载程序、adb 和 fastboot 的 POCO X5 Pro 5G(redwood),以及上一节中的镜像文件。不会向手机存储写入任何内容。手机自身的固件不在仓库中,也无法包含:它属于供应商,并且将从其将要运行的手机及其 Android 系统中获取:``` adb pull /vendor/firmware/a660_{gmu.bin,sqe.fw,zap.mdt,zap.b00,zap.b01,zap.b02} fw-gpu/ # GPU (gpu=1) adb pull /vendor/firmware_mnt/image/wpss.{mdt,b02,b03,b04,b05,b06,b07} fw-wifi/ # Wi-Fi (wifi=1) adb pull /vendor/firmware_mnt/image/adsp.{mdt,b02,...,b36} fw-audio/ # 声音 (adsp=1) adb pull /vendor/firmware/aw8697_haptic.bin fw-haptic/ # 触觉反馈 ```(将 fw-* 目录放置在 workspace 旁边。)Wi-Fi 还需要 fw-wifi/mac(无线电设备的地址,占一行)和 fw-wifi/network(网络名称和密码)。userland/build.sh 会打印出使用了哪个固件。) ``` common/build.sh redwood GL=1 # images + out/redwood-boot.img common/run.sh redwood 900 # loader 载入 RAM,系统镜像载入 RAM,运行 15 分钟 ``` 或者使用 xl 逐步执行:``` ./xl enter # Android -> fastboot -> 我们位于 RAM 中的 loader (fastboot boot);它会建立自己的 USB 连接 ./xl ramdisk # 将系统镜像上传到手机的 RAM 中(2.5 GB,约 80 秒),每个 loader 会话只需一次 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 ``` 不带参数的 ./xl 会列出所有命令(日志、屏幕和声音录制、相机帧、停止、状态...)。## 预构建的启动镜像每个版本都附带 hackios-redwood-boot.img:这是包含我们 loader 的 redwood UEFI,已准备好用于 fastboot boot。它不包含任何 Apple 文件;系统镜像仍然需要在你的机器上构建(见上文)。## 从源代码构建common/build.sh 会运行该机器能运行的所有步骤,其余部分使用 prebuilt/。- 内核 — 需要 ~/theos 中的 theos(cctools 和 iPhoneOS16.5.sdk)以及 clang lld python perl。详情:xnu/README.md。``` xnu/apply.sh && xnu-deps/setup.sh && ./xnu-build.sh -j8 -k ``` - Loader — xnuloader/build.sh(clang + lld-link,一个没有 EDK2 的 EFI 应用程序)。- 镜像 — REST=1 userland/build.sh(变量文档在该文件顶部)。- UEFI — uefi/README.md(Project Silicium 移植版);运行时不需要,prebuilt/uefi 中已有。- 重新构建后:tools/update-prebuilt.sh 会刷新 prebuilt/。## 移植到其他设备``` common/new-device.sh path/to/device.dtb # 从手机的设备树中提取 profile + loader 平台 ```然后遵循 docs/PORTING.md:UEFI 移植、loader 的平台描述、内核的驱动程序、固件。设备配置文件位于 common/devices/ 中(redwood.conf、qemu-virt.conf、_template.conf)。## 工作原理

更进一步:量化金融体系

看懂新闻只是起点——沿量化金融路径,把它变成能交付的工程能力

进入量化体系 →

榜上的人在聊

近 7 天涨粉榜上的创作者

相似阅读

关联信息,但可能不是同一事件