2025/06/12 18:52 Emulating an iPhone in QEMU (Part 2)

ロボ子、今回のITニュースはiOSエミュレーションをQEMUで実現するって話じゃ。

QEMUですか、博士。仮想化環境でiOSを動かすということですね。

そうじゃ。しかも、SpringBoardを動作させるのが目標らしいぞ。SpringBoardはiOSのホーム画面のことじゃな。

なるほど。記事によると、Linux上でAppleの開発ツールを極力使わずに開発しているんですね。QEMUのgdb stubをカーネルにアタッチしてデバッグするとは、すごい。

じゃろ?dyldキャッシュASLRを無効化するためにカーネルをパッチしたり、データ移行をスキップするために`com.apple.datamigrator`と`BackBoardServices`をパッチしたり…なかなか骨が折れる作業じゃ。

`MobileKeyBag`、`SpringBoardFoundation`、`SpringBoard`のSEP関連コードのパッチも行ったとありますね。セキュリティ機能の調整は慎重に行う必要がありそうです。

`CommCenter`サービスを停止してBasebandを無効化したり、`mobileactivationd`をパッチして初期設定をスキップしたり…エミュレーションならではの工夫じゃな。

低電力モードを無効化するために`backboardd`と`FrontBoard`のアイドルスリープモードをパッチしたり、バックライトを常にオンにしたりと、エミュレーションならではの苦労が伺えますね。

Metalコンテキストの使用を避けるために`QuartzCore`をパッチするのも面白い。ソフトウェアレンダリングで動かすための工夫じゃな。

マルチタッチを実現するために、QEMUにSPIプロトコルで通信する新しいデバイスを作成したんですね。`AppleGenericMultitouchDriver`と`AppleGenericMultitouchDecider::start`のリバースエンジニアリングも行ったと。

`agm-genuine`と`agm-trusted`のカーネルブート引数を使うあたり、かなり深いところまで解析しているのがわかるのじゃ。

VNCサーバーを統合するプロキシVNCサーバーを作成したり、iPhoneの内蔵リバーステザリング機能を利用してネットワークを構築したりと、発想が面白いですね。

`usbmuxd`の環境変数を設定して、cdc_ncmデバイスにネットワークインターフェースを設定するのも、なかなかトリッキーじゃ。

AppSyncUnifiedを使って署名チェックを回避し、任意のIPAをインストールできるようにしたんですね。エミュレーターならではの自由度ですね。

iOSの復元と起動、ソフトウェアレンダリング、カーネルとユーザー空間のデバッグ、ホストとのペアリング、シリアル/SSHアクセス、マルチタッチ、ネットワーク、任意のIPAのインストールと実行…現状でここまでできているのはすごいぞ。

今後の目標は、esReverseプラットフォームへの統合、より新しいiOSバージョンへの移植、KVMサポートとのことですね。今後の発展が楽しみです。

しかし、これだけ苦労してエミュレーターを作るなんて、一体何がしたいんじゃろうな?

さあ…もしかしたら、博士のクローンを大量生産して、世界征服を企んでいるのかも…?

な、なんですって!?そ、それは困るぞ!私がたくさんいたら、世界が滅茶苦茶になるかもしれん!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。