HackiOSがAndroidデバイスとQEMUで完全なiOS 16.5ファームウェアを実行

HackiOSがAndroidとQEMUでiOS 16.5を起動

要点: HackiOSプロジェクトは、AppleのオープンソースXNUカーネル(バージョンxnu-8796.121.2、iOS 16.5)をSnapdragon 778G搭載のAndroidスマートフォンとaarch64 QEMU上で正常に実行し、デバイスをフラッシュすることなく完全に機能するiOS 16.5ユーザースペースを提供します。


プロジェクトが達成すること

  • 完全なiOS 16.5スタック: XNUカーネルがlaunchd → backboardd → SpringBoard → アプリを起動し、完全なiOSエクスペリエンスを再現します。
  • リポジトリにAppleファイルは含まれません: すべてのiOSバイナリはビルド時にAppleのCDNから取得されます(ios165/fetch.sh)。
  • 2つの展開モード:
    1. POCO X5 Pro 5G(redwood、Snapdragon 778G) – fastboot bootで起動。すべてRAM上で実行され、再起動するとAndroidに戻ります。
    2. QEMU virt aarch64 – 任意のLinuxホストで実行可能、スマートフォンは不要です。
  • 研究用であり、ROMではありません: セッションは時間制限があり、カーネルは設定可能な期間後にローダーに制御を返します。

機能のハイライト

動作する機能 まだ機能しない機能
ロック画面、スワイプでロック解除、アイコン付きホーム画面、iOS 16壁紙 セルラー、Bluetooth
システムジェスチャー(ホーム、アプリスイッチャー、戻る)、コントロールセンター カスタムカーネルでの充電(スマートフォンが放電する)
コアアプリ(設定、Safari、写真など)とウィジェット ほとんどのアプリでのMetalレンダリング(293/456シェーダーが動作)
タッチスクリーン(Goodix GT9916)、マルチタッチ、電源/音量キー App Storeコンテンツ、Apple IDサインイン(Secure Enclaveが欠落)
最大8つのCPUコア、ロック画面まで約20秒 ビデオ/Live Photoキャプチャ
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、tweaks –

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(長押し) = 5本指ジェスチャー。
  • スクリプト入力の例:
    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)での実行

  1. ブートローダーのロックを解除し、adb/fastbootをインストールします。
  2. READMEの説明に従って、スマートフォンからベンダーファームウェア(GPU、Wi-Fi、オーディオ、ハプティクス)を取得し、fw-*ディレクトリをワークスペースの隣に配置します。
  3. ブートイメージをビルドして実行:
    common/build.sh redwood GL=1          # out/redwood-boot.imgを生成
    common/run.sh redwood 900             # 15分のセッション
    
  4. または、xlヘルパーを使用して細かい制御を行う:
    ./xl enter            # カスタムUEFIローダーをfastboot boot
    ./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に戻る
    
    ローダーは完全にRAM上で実行され、スマートフォンのストレージに永続的な変更は加えられません。

プリビルドブートイメージ

各リリースには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デバイスへの移植

  1. デバイスプロファイルを生成: common/new-device.sh <codename> path/to/device.dtb。
  2. 生成されたcommon/devices/<codename>.confを編集して、UEFIプラットフォーム、ローダーパラメータ、ドライバの置き換えを記述します。
  3. 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のstdoutまたはスマートフォンでは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、そしていくつかのXiaomiデバイスでも動作するのはかなり印象的です。" – aghuang

"任意のAndroidスマートフォンで実行できるGSIを作れますか?" – Velocifyer

"ついに誰かがこれをやった、すごい!2026年はますますクレイジーになっていく。" – pmkary

"なぜこれらのデモはすべてiOS 16で止まっているのですか?iOS 17で何が変わったのですか?" – bigwheels

"素晴らしい仕事です。これはmacOSの古い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から直接ダウンロードします。

詳細情報の入手先


結論

HackiOSは、クローズドソースのドライバをオープンソースの同等品に置き換え、カスタムUEFIローダーで起動することで、iOS 16.5のカーネルとユーザースペースを非Appleハードウェアで実行できることを実証しています。まだ研究プロトタイプであり、セルラー、Bluetooth、完全なMetalサポート、App Store機能が欠けていますが、iOSの実験、クロスプラットフォームテスト、セキュリティ研究の新たなフロンティアを開きます。

Sources