まずはFace IDシステムがどのようなもので、どのように機能するのかから始めましょう。


ハードウェア的にこのシステムは、IRカメラとRGBカメラのペア、そして2種類のIR照射器(通常の照明と特殊なドットプロジェクター)で構成されています。
iPhone Xから外装を取り外し、不要なものを取り除くと、フロントカメラブロックがむき出しになります。IR照明は別ですが、他のすべてのコンポーネントは手元にあります。それらは金属フレームにしっかりと固定されています。
ここにはIRカメラとIRドットプロジェクターが見えます。TrueDepthとFaceIDシステムの動作は、まさにこの赤外線ペアにかかっています。そして今日の物語の主役は、まさにドットプロジェクターなのです。
FaceIDの簡単な動作原理

IRドットプロジェクターは、まさにその名前が示すとおり、指令を受けて周囲の世界に数万個の赤外線ドットを吐き出します。そして、この指令を出しているIRカメラは、すぐにこれらのドットを撮影します。
プロジェクター、カメラの光学特性、そしてそれらの間の距離を知ることで、iPhoneプロセッサ内のISPは、各ドットがどれだけ離れているかを概算できます。プロセスの数学的な詳細は私自身も完全に理解していませんし、リバースエンジニアリングも難しいでしょう。しかし、異なるドットパターンで一連の画像を撮影することで、個々のドットの位置を非常に正確に推測し、それによって完全な深度マップを作成できます。LIDARやToFなしで。
まさにこの深度マップのおかげで、FaceIDはプリンターで印刷された写真に騙されません。写真は平面的ですが、顔には凹凸があり、FaceIDにとって顔の地形図は顔の色よりも重要なのです。

もっとも、システムは顔の色も見ています。IRカメラはRGBカメラとハードウェア的に同期しており、両方のカメラが同時に顔を撮影します。さらに、iPhoneはIRプロジェクターだけでなく、IR照明も点滅させることができ、顔全体をIRスペクトルで撮影することもできます。
深度マップ自体はかなり粗いものですが、IRおよびRGB画像での顔のテクスチャのニューラルネットワークによる分析により、深度をより正確にし、表情などの詳細をより良く理解することができます。昼光でも暗闇でも。
このシステムに見覚えがあるなら、それはおそらく、Xbox 360のKinectから直接引き抜かれたものだからでしょう。Kinectは巨大な塊でしたが、こちらはスマートフォンの画面の切り欠きサイズにまで縮小されています。
これを実現したのはPrimeSense社で、Kinect 1の基礎となる技術を開発し、その後Appleに3億5000万ドルで買収されました。特許、ノウハウ、従業員、その他の内部構造すべてを含めて。
プロジェクターの内部構造を分解する

さらに深くリバースエンジニアリングを進めましょう。iPhone Xのカメラブロックからドットプロジェクターを取り出し、構成部品に分解します。FPCフレックスケーブル、発光アセンブリ、光学アセンブリで構成されています。
フレックスケーブルは完全に受動的なため、あまり面白くありません。発光アセンブリに半田付けされており、iPhone Xのマザーボードに接続されるFPCコネクタに信号を出力します。コネクタのコンタクトピッチは0.35mmで、カスタム(Appleのろくでなし)、JAE製と思われます。
光学系の主要部品を見てみましょう。

そして、発光器の内部を見てみましょう。

そして、MOSFETと謎のチップの役割に興味を持ちました。なぜでしょうか?なぜなら、彼らが一体何をしているのか不明だからです。
最初の明白な可能性は、謎のチップがシリアル番号とキャリブレーションデータ用のメモリであることです。チップにはメモリに典型的なI2Cインターフェースがあり、内部には確かにメモリがあります。プロジェクターにはシリアル番号があり、製造日などを特定できます。また、プロジェクター全体を交換すると、iPhoneはシリアル番号の不一致を認識し、交換品での動作を拒否します。しかし、ごく普通のI2C EEPROMは、非常に小型のWLCSP-4パッケージで見られます。そして、どうしても必要なら、再書き込みを禁止することもできます。したがって、チップは単なるメモリではない可能性があります。彼は間違いなく何か他のことをしています。

2番目に明白な可能性は、謎のチップがレーザードライバーであり、MOSFETがそのスイッチであることです。そして確かに、MOSFETはチップによって制御されています。しかし、レーザードライバーのような非常に重要なものでも、チップはありえません。
まず第一に、MOSFETはレーザーアセンブリの共通カソードの途中にあり、4つの独立したアノードは直接フレックスケーブルに出て、iPhoneの多層基板の奥深くまで続いています。そして第二に、リバースエンジニアリングのデータ収集中に、中国の修理業者からのさまざまな指示に出くわしました。

彼らは問題の本質を直接明らかにはしていませんが、これらの指示の多くで、「壊れた」プロジェクターを修理するには、分解してMOSFETを取り外し、ドレインとソース間のジャンパーに置き換える必要があると述べられていました。結局のところ、内部にMOSFETの代わりにジャンパーがあるプロジェクターは動作し、FaceID機能は回復します。そして、MOSFETの代わりにジャンパーがあるプロジェクターが正常に動作するなら、このMOSFETは何をしていたのでしょうか?
そして私はひらめきました。これこそが修理の本質だったのです。MOSFETはチップによって制御されるため、チップの意思でレーザーの電源回路を遮断し、それによってプロジェクターを壊すことができます。そして、この修理はその遮断を取り除くのです。
名前は何?
謎のチップがMOSFETとペアになってプロジェクターの正常な動作を妨げていることが明らかになったので、疑問が生じます。なぜ彼はそれをするのでしょうか?なぜプロジェクターを殺すチップをプロジェクターに入れるのでしょうか?
答えを求めて、iPhoneプロセッサのISPブロックのファームウェアを調べました。まさにそれが、I2C経由でカメラセンサーとプロジェクターと通信しているのです。
最初に、iPhone X用の最新のiOS 15ファームウェアイメージをダウンロードしました。iPhone用のファームウェアイメージは、基本的にはzipファイルです。その中で、目的のISPファームウェアをFirmwareisp_bniadc-nike-d22.im4p
というファイルで見つけました。圧縮されたim4pファイルから、AArch64コードが内部にあるMach-O形式のバイナリが抽出されました。Mach-Oは、典型的な「不明なマイクロコントローラー用のファームウェアイメージ」とは異なり、PEやELFに似た、ドキュメント化された実行可能ファイル形式です。ファイル構造、プロセッサアーキテクチャ、コードをロードする必要があるアドレスについて推測する必要はありません。ファイルをGhidraにドロップするだけで、すべてが自動的に整理されます。快適です。

その後、本能が働き、古いファームウェアを解剖することにしました。そして、iOS 13ファームウェアイメージでadc-nike-d22ファイルを見つけました。サイズもほぼ同じでした。しかし、新しいファームウェアにはより多くのコードがありましたが、古いファームウェアにはコードが少なかったものの、シンボルがありました。すべての関数名がそのままです。常に古いバージョンを確認しましょう!
ISPファームウェアには、iPhoneがI2C経由でさまざまなチップ(カメラセンサー、カメラPMU、フラッシュおよびオートフォーカスコントロールチップなど)とどのように通信するかなど、多くの情報が含まれています。そこから、シンボルのおかげで、システムのさまざまな構成部品の「名前」を抽出することができました。そして、その一部はファームウェアの他の部分からの資料や、他のリバースエンジニアや修理業者からの資料と対応しています。たとえば、IRカメラセンサーはSTMicroelectronics VD56G0 “Savage”です。コード内のTrueDepthシステム全体は「Pearl」と呼ばれ、その主要モジュールには「ロミオとジュリエット」の登場人物の名前が付けられています。IRプロジェクターは「Romeo」、IRカメラは「Juliet」、IR照明は「Rosaline」と呼ばれています。「Romeo」内のレーザーと「Rosaline」照明内のレーザーの両方に電力を供給する、iPhoneのマザーボード上にあるレーザードライバーは「Rigel」と呼ばれています。
私たちが興味を持っている謎のチップは?彼にも名前があります。コード内では「MamaBear」、略して「MB」と呼ばれており、その機能は非常に単純なようです。彼はI2Cバス上に住んでいます。彼はシリアル番号やさまざまなキャリブレーションを含むOTPデータを保持しています。彼はコマンドによってMOSFETをオン/オフします。そして彼は測定します… 静電容量?温度ではなく、NTCサーミスタにはまったく接続されていませんが、静電容量です。しかし、何の静電容量でしょうか?
ロミオの悲劇的な死

この質問への答えを得るのに、またしても中国の回路図が役立ちます。JCIDの回路図では、「Romeo」モジュールに、発光アセンブリと光学アセンブリを接続するための3つの接点があることがわかります。1つはアース、残りの2つは直接「MamaBear」チップに接続されています。これらの接点は、光学アセンブリの側面にある特別なアダプターを通過し、その最上部に到達します。回折光学素子です。
回折ビームスプリッターは制御不能であり、電流に反応しません。しかし、静電容量を持っています。そして、その3本の線を使って、この静電容量を測定できます。しかし、なぜ?
問題は、この回折スプリッターがどれほど重要な役割を果たしているかということです。プロジェクターで使用されるドットパターンは、VCSELチップ上の微小なレーザー「ピット」の配置によって決まります。そして、このパターンは、1つの光線束から数百の光線束を作成する回折素子によって複製されます。

それでは、この回折素子を取り外すとどうなるでしょうか?
光線は分割されません。数百のレーザー光線束の代わりに、1つの光線束になります。しかし、100倍強力になります。そして、これは結局のところレーザーです。赤外線レーザーは赤色レーザーよりも危険です。なぜなら、人間には見えないため、危険なほど強力な光源からでも本能的に目をそらさないからです。そして、特徴的なドットパターンが、そのような場合にユーザーの網膜に焼き付く可能性はゼロではありません。
これを防ぐために、キラーチップが必要なのです。起動後、彼は常に回折素子の静電容量を監視しています。そして、素子が破損または損傷した場合、静電容量が許容範囲を超え、チップはすぐにMOSFETを遮断し、VCSELの電源を遮断します。また、素子は光学アセンブリの最上部にあるため、衝撃で残りのアセンブリを損傷させても、素子を壊したり、接触を損なったりすることはおそらく不可能です。
レーザーの緊急停止後、チップはOTPにフラグを書き込み、プロジェクターを不良品としてマークします。つまり、遮断された電源は永遠に遮断されたままになります。ISPからのコマンドはもはや彼に影響を与えません。MOSFETは常にオフになり、プロジェクターは二度と動作しません。
「MamaBear」チップは、名前が示すように、保護チップです。これは、レーザーを緊急停止させるための「キルスイッチ」です。彼は、損傷したレーザーデバイスがユーザーの目に光を当てないようにするために、プロジェクターを殺します。そして、「Juliet」モジュールは、ペアとなる「Romeo」を失い、生きる意味を失います。そして、TrueDepthシステム全体が役に立たなくなります。
テクノロジー神官の日常
しかし、この保護スキームには欠陥があります。ドットプロジェクターはデバイスの上端、スピーカーの近くにあるからです。iPhoneの内部に液体が侵入した場合、最も一般的な場所の1つはまさにそこです。そして、静電容量センサーは電流を流す液体に敏感です。したがって、デバイスを水に落とした後にFaceIDが故障することがよくあります。水の侵入が最小限であり、他の損傷がない場合でもです。単に「Romeo」が状況を誤解し、むやみにRoskomnadzor(ロシアの検閲機関の意)を実行したのです。
そのようなデバイスは修理に持ち込まれます。多くの場合、非公式の修理です。そして、iPhoneは部品のシリアル番号を照合するため(Appleよ、こんにちは)、カメラブロック全体をドナーからの動作ブロックに交換することはできません。電話は新しいブロックを拒否し、FaceIDはそれでも動作しません。したがって、何らかの方法で古いものを修理する必要があります。しかし、意図的に自分自身を故障させたプロジェクターをどのように「復活」させることができるでしょうか?
非公式の修理ツールメーカーは、このためにさまざまな儀式を考案しました。そして、腕の良いテクノロジー神官のような修理業者は、それらに忠実に従い、この複雑で調整された光学システムのマイクロサージェリーを実行します。信じられないほどの腕の良さが必要です。内部の部品は数ミリメートル単位のサイズであり、光学系は非常に敏感です。外科的介入のためにキャリブレーションが大きくずれてしまうと、システムは動作しません。ソフトウェアによる再キャリブレーションツールは存在しません(Appleよ、こんにちは)。元のパラメーターに入る方法を見つけるか、FaceIDなしで過ごすかのどちらかです。

これはどのように機能するのでしょうか?まず第一に、元の「MamaBear」チップからOTPデータを読み取る必要があります。
プロジェクターが自分自身を故障していると考えている場合でも、データは読み取り可能です。データの読み出しのために、中国人は特別な「修理」プログラマーを作成しています。それらは、コネクターアダプターのセットが付属しており、プロジェクターを含むさまざまなiPhoneモデルのさまざまなコンポーネントで動作します。
そして、2つのことを行う必要があります。電源を遮断するMOSFETに対処し、元の保護チップを置き換えることです。そして、ここにはさまざまな方法があります。

たとえば、上記の写真のようにMOSFETの代わりにジャンパーを配線し、元のFPCフレックスケーブルをはんだ付けして、中国製のおとりチップ付きの特別なフレックスケーブルに交換することで、「MamaBear」チップを置き換えることができます。
元の「MamaBear」チップは内部に残っている可能性があり、プロジェクターは決して動作すべきではないと無力に叫んでいる可能性があります。しかし、彼は強制的にプロジェクターをオフにするMOSFETをもう持っていません。一方、iPhoneは中国のチップのみを見ています。中国のチップはプログラマーによって書き込まれた元のデータのコピーを返し、プロジェクターは間違いなく完全に動作すると報告します。

または、「MamaBear」チップ全体を取り外し、その正規の位置に中国製の2-in-1交換品を取り付けることもできます。それはMOSFET接点を閉じ、電話にOTPデータのコピーを返します。

そして、はんだ付けを最小限に抑えるオプションもあります。オリジナルフレックスケーブルとiPhoneのマザーボードの間に配置される、おとりチップ付きの「アダプター」です。
彼はMOSFETの問題を解決しませんが、中国人はそれに対しても独創的なアプローチを見つけ、「高電圧」プログラマーを作成しました。
さまざまなATtinyを特別な高電圧プログラマーを使用して「復活」させ、再書き込みする方法をご存知ですか?ここでは状況がまったく異なります。中国の高電圧プログラマーは、プロジェクター内部のMOSFETを強引かつ不可逆的に「プログラム」して、ドレインとソース間の短絡にします。
修理の最終段階で、プロジェクターをもう一度プログラマーに接続し、最初の段階で保存したダンプを書き込みます。そして、プロジェクターは動作する準備ができており、自分自身をオリジナルで変更されていないものとして偽装します。
これらすべてのさまざまなデバイスは、さまざまな修理機器ベンダーによって製造および推進されています。あらゆる種類のおとりチップは「ネイティブ」プログラマーでのみ動作し、プログラマーにはアカウントへのリンクや、補充にお金を払う必要がある修理回数の制限など、DRM機能が組み込まれていることがよくあります。
修理業者は、彼らの修理がAppleがユーザーの目を保護するために考案したシステムを完全に破壊していることを知っているでしょうか?実際にはそうではありません。彼らはリバースエンジニアではなく、シャーマンです。彼らは動作原理を理解していません。彼らには儀式と結果があり、それで十分です。そして、中国の抜け目のないリバースエンジニアは、彼らの秘密を公に共有することを嫌がります。この記事で私が説明したことは、Appleのエンジニアと「事情通」の中国人の10人、そして私だけが完全に知っています。そして、あなたも、今では。
なぜAppleはクソなのか
ご存知のとおり、Appleのエンジニアをあまり強く責めることはできません。彼らの「キルスイッチ」が過度に積極的であり、まだ動作する可能性のあるプロジェクターを壊してしまうことを。レーザーは危険なテーマであり、「最悪のシナリオ」からユーザーを保護するというアイデアは絶対に健全です。この保護の実装には改善が必要ですが。
しかし、Appleの非公式修理との戦いのポリシーは、すべての悪の中で最悪です。TrueDepthブロックを、シリアル番号を気にせずに、デバイス間で簡単に交換できるのであれば、恐ろしい歪んだ修理儀式はほとんど意味がなくなるでしょう。マイクロサージェリーはんだ付けで歪んだり、プログラマーと踊ったりする必要があるでしょうか?次の「ドナー」(画面が壊れている)から完全に動作するTrueDepthブロックを取り外し、顧客の電話に取り付け、機能を完全に復元し、安心して暮らすことができるなら?修理業者にとっては簡単になり、デバイスの所有者にとっては安全になるでしょう。
しかし、Appleのクソな反修理行動の歴史は、それが起こらないことを明確に示しています。そうですね、米国またはEUで、あらゆる種類の「修理する権利」運動が、シリアル番号による部品の紐付けを違法にしない限りは。そして、これは今では可能です。欧州連合が新しいiPhoneモデルにAppleよりも多くの便利な機能を追加しているというジョークには、非常に高い割合で真実が含まれています。したがって、立法イニシアチブに注目していきましょう。
この記事はロシア語から翻訳されました。記事の著者はacc0untです。翻訳にあたっては、可能な限り著者のオリジナルのスタイルと表現を維持するよう努めました。