Начнём с начала: как система FaceID выглядит, и как она работает:
![Всё нужное для работы FaceID железо стоит именно в этом вырезе в экране Всё нужное для работы FaceID железо стоит именно в этом вырезе в экране](https://habrastorage.org/getpro/habr/upload_files/e76/f18/a87/e76f18a87fd2f5b3d8ecb9621a8c1ad6.png)
![](https://habrastorage.org/getpro/habr/upload_files/db7/4d0/ddf/db74d0ddfea3651d1be8d7c34c54c992.png)
Аппаратно эта система состоит из пары камер - ИК и RGB, и двух видов ИК-излучателей - обычной подсветки, и специализированного прожектора точек.
Снимаем с iPhone X шкурку, убираем всё лишнее, и видим блок фронтальных камер в голом виде. ИК подсветка существует отдельно, но все остальные компоненты у нас в руках — они надёжно закреплены в этой металлической рамке.
Тут мы видим ИК камеру и прожектор ИК точек. Именно на этой инфракрасной парочке держится работа систем TrueDepth и FaceID. И главный герой сегодняшнего рассказа — как раз прожектор точек.
Краткий принцип работы FaceID
![Излучаемые iPhone X точки — фото отсюда. Излучаемые iPhone X точки — фото отсюда.](https://habrastorage.org/getpro/habr/upload_files/951/cf4/857/951cf4857843af19022b21c51fbc440e.jpg)
Прожектор ИК точек делает именно то, о чём говорит его название — выплёвывает по команде в окружающий мир десятки тысяч инфракрасных точек. А ИК камера, которая и отдаёт эту команду, тут же фотографирует эти точки.
Зная оптические характеристики прожектора, камеры и расстояние между ними, ISP в процессоре iPhone может прикинуть, насколько далеко каждая точка находится. Математику процесса я и сам до конца не понимаю, и реверсить её будет тяжело — но снятие серии изображений с разными паттернами точек позволяет весьма точно угадать позицию каждой отдельной точки, и сделать таким образом цельную карту глубины. Без LIDAR и без ToF.
Именно карта глубины позволяет FaceID не обманываться распечатанными на принтере фотографиями. Фотография плоская — а лицо имеет рельеф, и для FaceID топографическая карта морды важнее её расцветки.
![Блок-схема референсной камеры PrimeSense Блок-схема референсной камеры PrimeSense](https://habrastorage.org/getpro/habr/upload_files/6c1/95c/2fa/6c195c2fa946750a8acacede75b5ce35.png)
Впрочем, на расцветку лица система тоже смотрит. ИК камера аппаратно синхронизирована с RGB камерой, и лицо обе камеры снимают одновременно. А ещё iPhone может моргать не только ИК прожектором, но и ИК подсветкой — и снять всё лицо в ИК спектре.
Карта глубины сама по себе достаточно грубая, и анализ текстуры лица в ИК и RGB снимках нейросетью позволяет как уточнить глубину, так и лучше разбираться в деталях вроде мимики — причём как при свете дня, так и в темноте.
Если эта система кажется вам знакомой, то это, наверное, потому, что она напрямую выдрана из Kinect от Xbox 360. Только тот Kinect был огромной бандурой, а тут его ужали до размера выреза в экране смартфона.
Сделала это компания PrimeSense, которая и разработала технологии в основе Kinect 1 — а потом была куплена Apple за 350 миллионов долларов. Целиком — со всеми патентами, наработками, сотрудниками и иными потрохами.
Разбираем кишки прожектора
![](https://habrastorage.org/getpro/habr/upload_files/c38/503/482/c385034828bc34e1dca278592a8328dc.jpg)
Идём глубже в реверс: вынимаем прожектор точек из блока камер iPhone X и разбираем его на составные части. Состоит он из FPС-шлейфа, излучающей сборки и оптической сборки.
Шлейф полностью пассивный, и поэтому малоинтересный. Он припаивается к излучающей сборке, и выводит сигналы на FPC-разъём, который подключается к материнской плате iPhone X. Разъём с шагом контактов 0.35мм, кастомный (Apple засранцы), и похоже что сделан компанией JAE.
Посмотрим на основные компоненты оптики:
![Прожектор в разрезе: фото отсюда, подписи мои Прожектор в разрезе: фото отсюда, подписи мои](https://habrastorage.org/getpro/habr/upload_files/ddc/433/714/ddc43371443eb98f7f32f7ddd5fdfd00.png)
И посмотрим, что находится внутри излучателя:
![](https://habrastorage.org/getpro/habr/upload_files/c8e/1a9/01d/c8e1a901de1349b166ee696e2e3fbdc7.png)
И вот роль MOSFET и таинственного чипа меня заинтересовала. Почему? Потому что неясно, чем они там вообще занимаются.
Первый очевидный вариант — таинственный чип это память для серийного номера и данных калибровки. У чипа типичный для памяти интерфейс I2C, и память внутри точно есть. У прожекторов есть серийные номера, по которым можно в том числе определить дату производства — а если прожектор заменить целиком, то iPhone увидит несовпадение серийного номера и с заменой работать откажется. Но самый обычный I2C EEPROM встречается в крохотном WLCSP-4 корпусе — и его можно даже заблокировать от перезаписи, если очень хочется. Поэтому простой памятью чип быть не может. Он точно делает что-то ещё.
![Распиновка прожектора от китайских мастеров из JCID. Надписи кривые, но в общем сходятся. Распиновка прожектора от китайских мастеров из JCID. Надписи кривые, но в общем сходятся.](https://habrastorage.org/getpro/habr/upload_files/72f/49c/d61/72f49cd616d2b627e795cf450a8ba99d.png)
Второй очевидный вариант — таинственный чип это драйвер лазеров, а MOSFET - его ключ. И да, MOSFET и правда управляется чипом. Вот только чем-то критически важным, как драйвер лазера, чип тоже быть не может.
Во-первых MOSFET стоит в разрыве общего катода лазерной сборки — а 4 раздельных анода выходят напрямую на шлейф и идут дальше в недра слоёной платы iPhone. И во-вторых я по ходу сбора данных для реверса натыкался на разные инструкции от китайских ремонтных мастеров.
![MOSFET заменяется на аккуратный проводок MOSFET заменяется на аккуратный проводок](https://habrastorage.org/getpro/habr/upload_files/cbf/e71/5a4/cbfe715a44f1fd6f0816b1895627c656.png)
Сути вопроса они напрямую не прояснили, но во многих из этих инструкций говорилось: для ремонта «сломанного» прожектора нужно его разобрать, MOSFET снять, и заменить перемычкой между стоком и истоком. Прожектор в итоге с перемычкой внутри заработает, и функционал FaceID восстановится. А раз прожектор с перемычкой вместо MOSFET нормально работает, то что этот MOSFET там делал?
И меня осенило: в этом-то и была суть ремонта. MOSFET управляется чипом - поэтому по желанию чипа может разорвать цепь питания лазера, и сломать тем самым прожектор. А ремонт этот разрыв устраняет.
Что в имени тебе моём
Раз стало ясно, что таинственный чип в паре с MOSFET мешает нормальной работе прожектора, то возникает вопрос — зачем он это делает? Зачем в прожектор ставят чип, который убивает прожектор?
За ответами я полез в прошивку блока ISP в процессоре iPhone – именно она и разговаривает по I2C с сенсорами камер и с прожектором.
Сначала я скачал образ прошивки iOS 15 для iPhone X, свеженький. Образы прошивки для iPhone — это по сути zip-файлы. Внутри я и нашёл искомую прошивку ISP — в виде файла \Firmware\isp_bni\adc-nike-d22.im4p
. Из сжатого im4p-файла извлёкся бинарник, в формате Mach-O с AArch64 кодом внутри. Mach-O, в отличии от типичного «образа прошивки для неизвестного микроконтроллера» — это задокументированный формат исполняемого файла, похожий на PE или ELF. Нет никаких гаданий про структуру файла, архитектуру процессора или адрес, по которому нужно загружать код. Просто кидаешь файл в Ghidra и всё само раскладывается по полочкам. Приятно.
![](https://habrastorage.org/getpro/habr/upload_files/b11/255/425/b11255425b037a927d696005b076a4be.png)
Потом инстинкт взял своё, и я решил распотрошить более старые прошивки. И в образе прошивки iOS 13 нашёл файл adc-nike-d22. Даже размер был почти такой же. Вот только в новой прошивке было больше кода — а в старой кода было меньше, зато были символы. Все имена функций на месте. Всегда проверяй старые версии!
В прошивке ISP есть много информации, включая то, как iPhone общается по I2C с разными чипами — с сенсорами камер, с PMU камер, с чипами управления вспышками и автофокусом. Оттуда же, спасибо символам, удалось извлечь «имена» разных составных частей системы — и часть из них соотносится с материалами из других частей прошивки, а так же от других реверсеров и ремонтников. Например, сенсор ИК камеры — это STMicroelectronics VD56G0 “Savage”. Вся система TrueDepth в коде называется “Pearl”, а её основным модулям даны имена персонажей из «Ромео и Джульета». ИК прожектор называется “Romeo”, ИК камера — “Juliet”, а ИК подсветка называется “Rosaline”. Драйвер лазеров, который живёт на материнской плате iPhone и запитывает как лазеры внутри “Romeo”, так и лазер внутри подсветки “Rosaline”, называется “Rigel“.
Интересующий нас таинственный чип? У него тоже есть имя. Его в коде называют “MamaBear”, кратко “MB”, и похоже что его функционал весьма прост. Он живёт на шине I2C. Он хранит в себе OTP-данные, включая серийный номер и разные калибровки. Он включает и выключает по команде MOSFET. И ещё он измеряет... ёмкость? Не температуру, к NTC-термистору он вообще не подключен, а именно ёмкость. Вот только ёмкость чего?
Трагическая гибель Ромео
![](https://habrastorage.org/getpro/habr/upload_files/a9f/3e1/d4a/a9f3e1d4afad7610c386c779e96fab2b.png)
Ответ на этот вопрос нам опять помогают получить китайские схемы. В схеме от JCID видно, что в модуле “Romeo” есть три контакта для связи излучающей сборки с оптической сборкой. Один — земля, а ещё два идут напрямую в чип “MamaBear”. Эти контакты проходят по специальному переходнику на боку оптической сборки, и попадают на самую её верхушку — на дифракционный оптический элемент.
Дифракционный расщепитель луча неуправляемый, и на ток не реагирует. Но он имеет ёмкость. И с помощью тех трёх линий эту ёмкость можно измерять. Но зачем?
Дело в том, насколько важную роль играет этот дифракционный расщепитель. Рисунок точек, используемых прожектором, задаётся расположением крохотных лазеров-«ямок» на VСSEL-кристалле. А потом этот рисунок размножается дифракционным элементом, который из одного пучка лучей делает сотни пучков лучей.
![Сравнение расположения лазеров анода “SPARSE” и проецируемых точек Сравнение расположения лазеров анода “SPARSE” и проецируемых точек](https://habrastorage.org/getpro/habr/upload_files/dd3/480/82e/dd348082e2abdbba2e3c15a6ece2ee6b.png)
А значит, что будет, если этот дифракционный элемент оторвать?
Лучи не будут расщепляться. Вместо сотни пучков лазерных лучей будет один пучок — зато в сотню раз мощнее. А это всё-таки лазер. Инфракрасный лазер опаснее красного, потому что человек его не видит — и поэтому не станет инстинктивно отводить взгляд даже от опасно мощного источника света. И есть ненулевой шанс что характерный рисунок из точек окажется в таком случае выжжен у пользователя в сетчатке.
Для предотвращения этого и нужен чип-убийца. После включения он постоянно следит за ёмкостью дифракционного элемента — и если элемент оказывается выломан или повреждён, то ёмкость вылетает за пределы дозволенного, и чип тут же отрубает MOSFET и разрывает питание VCSEL. А так как элемент находится на самой верхушке оптической сборки, то повредить ударом остальную сборку, не сломав при этом его и не нарушив контакт, практически невозможно.
После аварийного отключения лазера чип выжигает себе в OTP флаг, который обозначает прожектор как дефектный — а значит, разорванное питание навсегда останется разорванным. Никакие команды из ISP больше не будут иметь над ним силы. MOSFET всегда будет закрыт, и прожектор больше не будет работать никогда.
Чип “MamaBear”, как намекает название – это чип защиты. Это “killswitch” для аварийной остановки лазера. Он убивает прожектор чтобы не дать повреждённому лазерному устройству светить пользователю в глаза. А модуль “Juliet”, оставшись без парного ему “Romeo”, теряет смысл жизни — и вся система TrueDepth приходит в негодность.
Трудовые будни техножрецов
Но эта схема защиты имеет изъян. Дело в том, что прожектор точек стоит на верхнем крае устройства, и рядом с динамиком. Если внутрь iPhone попадает жидкость, то одно из самых частых для этого мест — именно там. А ёмкостные датчики чувствительны к проводящим ток жидкостям. Поэтому часто случается так, что FaceID ломается после падения устройства в воду — даже если попадание воды минимально, и никаких других повреждений нет. Просто “Romeo” не так понял ситуацию, и совершил Роскомнадзор зазря.
Такие устройства несут в ремонт. Часто в неофициальный ремонт. А так как iPhone сверяет серийные номера запчастей (привет, Apple), то просто махнуть весь блок камер на рабочий блок с донора нельзя. Телефон будет отторгать новый блок, и FaceID всё равно не заработает. Значит, надо каким-то образом чинить старый. Но как можно «воскресить» прожектор, который сам себя намеренно вывел из строя?
Производители неофициальных инструментов для ремонта придумали для этого целый ряд различных ритуалов. А пряморукие техножрецы-ремонтники им свято следуют, и проводят микрохирургию этой сложной и откалиброванной оптической системы. Прямизна рук нужна невообразимая — компоненты внутри размером в считанные миллиметры, а оптика крайне чувствительная. Если калибровка из-за хирургических вмешательств слишком сильно уплывёт, то работать система не будет. Инструментов для программной перекалибровки не существует (привет, Apple) — ты либо найдёшь способ попасть в оригинальные параметры, либо останешься без FaceID.
![«Высоковольтный» программатор «Высоковольтный» программатор](https://habrastorage.org/getpro/habr/upload_files/a65/900/f41/a65900f418443a3217df0b4b17286def.png)
Как это работает? Ну, первым делом надо считать данные OTP из оригинального чипа “MamaBear”.
Данные читаемы даже если прожектор считает себя неисправным. Для вычитки данных китайцы делают специальные «ремонтные» программаторы — которые поставляются с наборами разъёмов-переходников, и работают с целым рядом разных компонентов от разных моделей iPhone, включая и прожекторы.
А потом нужно сделать две вещи — разобраться с разрывающим питание MOSFET, и подменить оригинальный чип защиты. И тут есть множество разных методов.
![Шлейф с чипом-обманкой Шлейф с чипом-обманкой](https://habrastorage.org/getpro/habr/upload_files/3a1/510/dd6/3a1510dd62ed5c9a4a84cdfaa0ada7f7.png)
Можно, например, кинуть вместо MOSFET перемычку, как на фотке выше в статье, а чип “MamaBear” подменить, отпаяв оригинальный FPC-шлейф и заменив его на специальный шлейф с китайским чипом-обманкой.
Оригинальный чип “MamaBear” при этом может оставаться внутри, и бессильно орать о том, что прожектор ни в коем случае не должен работать. Но у него больше нет MOSFET чтобы выключить прожектор принудительно, а iPhone со своей стороны видит только китайский чип — который отдаёт залитую программатором копию оригинальных данных, и рапортует о том, что прожектор точно-точно исправен.
![Выскабливаем старые кишки и ставим новые Выскабливаем старые кишки и ставим новые](https://habrastorage.org/getpro/habr/upload_files/a29/9d5/339/a299d5339991ef33f4c7d7a368695de5.png)
А можно выдрать чип “MamaBear” целиком, и поставить на его штатное место китайскую замену два-в-одном — она и контакты MOSFET замыкает, и копию данных OTP в телефон отдаёт.
![Плата-переходник с чипом-обманкой Плата-переходник с чипом-обманкой](https://habrastorage.org/getpro/habr/upload_files/be6/5ea/cbf/be65eacbf1dd95aedd9733a0431a2691.png)
Ну и есть вариант с минимумом пайки. «Переходник» с чипом-обманкой, который ставится между оригинальным шлейфом и материнской платой iPhone.
Проблему с MOSFET он не решает, но и к ней китайцы нашли оригинальный подход, сделав «высоковольтные» программаторы.
Знаете, как всякие ATtiny можно «раскирпичить» и перезаписать с помощью специального высоковольтного программатора? Тут ситуация совсем другая. Китайский высоковольтный программатор брутально и необратимо «программирует» MOSFET внутри прожектора в короткое замыкание между стоком и истоком.
Все эти разные приспособления делаются и продвигаются разными продавцами ремонтного оборудования. Всевозможные чипы-обманки работают только с «родными» программаторами, а в программаторах часто стоят DRM-фичи вроде привязки к аккаунту и ограниченного количества «ремонтов», за пополнение которых приходится платить.
Знают ли чинилы, что они своим ремонтом полностью уничтожают систему, придуманную Apple для защиты глаз пользователя? На самом деле нет. Они не реверсеры — они шаманы. Понимания принципов работы у них нет. У них есть ритуалы и есть результаты, и этого им хватает. А ушлые реверсеры из Китая неохотно делятся своими секретами с публикой. То, что я описал в этой статье, известно в полном объёме только инженерам Apple и десятку китайцев «в теме». И мне. И тебе, теперь.
Почему Apple уроды
Знаете, я не могу слишком сильно винить инженеров Apple за то, что их “killswitch” слишком активен, и ломает прожекторы, которые вполне могли бы ещё поработать. Лазеры — тема опасная, и идея защитить пользователя от «худших сценариев» абсолютно здравая. Хоть реализация этой защиты и требует доработок.
Но политика Apple по борьбе с неофициальными ремонтами — это худшее из всех зол. Если бы блоки TrueDepth можно было спокойно менять с устройства на устройство, без оглядки на серийные номера, то в жутких извращённых ритуалах ремонта практически не было бы смысла. Зачем извращаться с микрохирургической пайкой и плясать с программаторами, если можно снять с очередного «донора» с битым экраном абсолютно рабочий блок TrueDepth, поставить его в телефон клиента, полностью восстановить функционал, и жить спокойно? Ремонтникам это было бы проще, а владельцам устройств — безопаснее.
Но история уродского антиремонтного поведения у Apple чётко показывает, что этому не бывать. Ну, если в США или в ЕС всяческие движения “Right to Repair” не сделают привязку запчастей по серийным номерам незаконной. А это сейчас возможно. В шутке про то, что Евросоюз добавляет в новые модели iPhone больше полезных фич чем Apple, очень высока доля правды. Так что будем следить за законодательными инициативами.
Комментарии (18)
goldexer
08.09.2024 15:00+3Думал сейчас будет так, нынче модно - два слова и те - вода. Но нет, статья очень интересная! Всё разобрано по полочкам и кроме того, аргументированно с точки зрения принципов работы самого железа, а так же здоровья и морали. Спасибо, будем ждать следующую часть
kenomimi
08.09.2024 15:00+4Вот интересно, сколько мощность у этого лазера?
А то что-то мне подсказвает, что система сделана исключительно для прохода сертификаций, чтобы не клеить наклейку про использование лазера. По тем же американским законам чуть ли не 5мВт лазер (указка) уже должен быть обозначен...
EvgeniyIvanovhabr
08.09.2024 15:00+2Очень интересная статья, спасибо. Так увлекательно писать про железки – это талант. Пишите ещё обязательно :-)
И конечно буду беречь свой Айфон от воды гораздо тщательнее теперь.
aush99
08.09.2024 15:00Написано интересно, но называть "уродами" людей, которые стараются по максимуму не сжечь лазером глаза потребителей это перебор.
acc0unt Автор
08.09.2024 15:00+3Так я прямым текстом в статье написал, за что именно я Apple уродами называю.
Не за то, что они ставят в телефоны этот чип. И даже не за то, что работает чип кривовато. А за то, что они годами воюют с ремонтом устройств, ревностно сверяют серийные номера на запчастях, и не дают даже оригинальные запчасти на оригинальные же запчасти менять.
Если бы можно было просто снять с "донора" полностью рабочий блок FaceID, и поставить его в ремонтируемый телефон? И ремонтникам было бы работать проще, и для пользователей это было бы безопаснее. Но любимая Apple политика строгой привязки к "родным" запчастям заставляет чинил для "восстановления" этих родных запчастей творить вещи на грани фола.
aush99
08.09.2024 15:00Так может это для того, чтобы не было такого самопала? Отдайте в АСЦ, а не в подвал, и все будет нормально. А то статья из разряда "Apple уроды потому что я синей изолентой починить не могу"
ThingCrimson
08.09.2024 15:00+2Спасибо за интересную статью! Подозревал, что FaceID штука слишком навороченая, но в подробности не вникал. Теперь вот в курсе…
Хотел было проголосовать, но пункта «Не пользуюсь iPhone с FaceID» нет. Так-то я уже 10 лет только на iPhone, но FaceID — нет, нет и ещё раз нет! Пока живут iPhone 7+ (smart phone) и iPhone SE 1st (just phone), надеюсь ещё надолго их хватит.
aush99
08.09.2024 15:00+1но FaceID — нет, нет и ещё раз нет!
А почему?
ThingCrimson
08.09.2024 15:00«Нутром чую бесовщину, но доказать не могу!»
С самого начала не понравилась мне концепция необходимости держать телефон прямо перед собой (плюс-минус) и смотреть в него (с TouchID можно протянуть руку к тумбочке и поднести уже разбокированый телефон). Плюс мне показалось (возможно на ранних версиях), что ощутимо подтормаживает распознавание по сравнению с TouchID. Плюс с FaceID можно прописать только одно лицо, а с TouchID много отпечатков (у меня сейчас 5, и можно не только от одного человека, разумеется).
Ну и UX без кнопки Home (на свайпах) мне категорически не нравтися. А пресловутая диагональ экрана, за увеличением которой все так гонятся — не важна совсем. Так что, пока будут iPhone с кнопкой Home — буду их использовать; а как там будет дальше — не загадываю.
aush99
08.09.2024 15:00Короче, FaceID, не пользовались и вообще не знаете(Мне Карузо Рабинович по телефону напел, поэтому Карузо мне не нравится). Ничего не подтормаживает, убирает проблему мокрых рук, лиц можно несколько прописать(хотя зачем делать из телефона общественный туалет? это личное устройство), замечательно разблокируется пока поднимаешь телефон чтобы на него посмотреть.
onepumpum
08.09.2024 15:00+1Apple уроды
довольно сильное заявление, при этом описываемая политика apple позволяет оградить пользователей от части проблем с палью и другими вещами, в результате не ухудшая опыт этих пользователей, что является плюсом для компании.
Раньше было интересным опытом приходить в сервис и получать вопрос какого качества условный дисплей вам ставить: из мусорки, или оригинал 100% мамой клянусь, как и озадачиваться в целом подобными вопросами.
Везде минусы и плюсы, но опять же, слишком громкое заявление
tech_editor
08.09.2024 15:00Так интересно и ясно рассказывать о железе — это талант! Автор, пишите еще
srubota
08.09.2024 15:00Зачем извращаться с микрохирургической пайкой и плясать с программаторами, если можно снять с очередного «донора» с битым экраном абсолютно рабочий блок TrueDepth, поставить его в телефон клиента, полностью восстановить функционал, и жить спокойно?
иначе рухнет миф что faceid постоянно учится за изменяемым лицом
acc0unt Автор
Если статья "зайдёт", то сделаю вдогонку вторую часть: про то, как запустить этот прожектор точек отдельно от iPhone.
Radisto
Технарская железячная статья. Делайте догонку смело
Astus
Что-то на старохабравском. Пишите ещё.
exTvr
Аффтар - пешы исчо!
Годно. Реально годно.
Спасибо.