Нека започнем отначало: как изглежда системата Face ID и как работи:


Апаратно тази система се състои от двойка камери – инфрачервена и RGB, и два вида инфрачервени излъчватели – обикновена подсветка и специализиран проектор за точки.
Сваляме „кожата“ на iPhone X, премахваме всичко излишно и виждаме блока от предни камери в „гол“ вид. Инфрачервената подсветка съществува отделно, но всички останали компоненти са в ръцете ни — те са надеждно закрепени в тази метална рамка.
Тук виждаме инфрачервена камера и проектор за инфрачервени точки. Именно на тази инфрачервена двойка се крепи работата на системите TrueDepth и FaceID. И главният герой на днешната история е именно проекторът за точки.
Кратък принцип на работа на FaceID

Проекторът за инфрачервени точки прави именно това, което името му подсказва — изстрелва по команда в околния свят десетки хиляди инфрачервени точки. А инфрачервената камера, която и дава тази команда, веднага снима тези точки.
Знаейки оптичните характеристики на проектора, камерата и разстоянието между тях, ISP в процесора на iPhone може да прецени колко далеч се намира всяка точка. Математиката на процеса аз самият не разбирам напълно и да я ревърсна ще е трудно — но заснемането на серия изображения с различни модели точки позволява доста точно да се отгатне позицията на всяка отделна точка и да се направи по този начин цялостна карта на дълбочината. Без LIDAR и без ToF.
Именно картата на дълбочината позволява на FaceID да не се лъже от разпечатани на принтер снимки. Снимката е плоска — а лицето има релеф и за FaceID топографската карта на лицето е по-важна от неговия цвят.

Впрочем, системата гледа и цвета на лицето. Инфрачервената камера е апаратно синхронизирана с RGB камерата и двете камери снимат лицето едновременно. А още iPhone може да мига не само с инфрачервения проектор, но и с инфрачервената подсветка — и да заснеме цялото лице в инфрачервения спектър.
Картата на дълбочината сама по себе си е доста груба, а анализът на текстурата на лицето в инфрачервени и RGB снимки от невронна мрежа позволява както да се уточни дълбочината, така и по-добре да се разберат детайли като мимики — при това както на дневна светлина, така и в тъмнина.
Ако тази система ви се струва позната, то това вероятно е защото тя е директно изкопирана от Kinect на Xbox 360. Само че този Kinect беше огромна бандура, а тук го смалиха до размера на прорез на екрана на смартфона.
Направи го компанията PrimeSense, която и разработи технологиите в основата на Kinect 1 — а после беше купена от Apple за 350 милиона долара. Цялата — с всички патенти, разработки, служители и други карантии.
Разглобяваме вътрешностите на проектора

Отиваме по-дълбоко в реверса: изваждаме проектора за точки от блока камери на iPhone X и го разглобяваме на съставни части. Състои се от FPC-шлейф, излъчващ модул и оптичен модул.
Шлейфът е напълно пасивен и затова не е много интересен. Той се запоява към излъчващия модул и извежда сигнали към FPC-конектор, който се свързва към дънната платка на iPhone X. Конекторът е със стъпка на контактите 0.35 мм, кастъмен (Apple са гадове) и изглежда, че е направен от компанията JAE.
Да разгледаме основните компоненти на оптиката:

И да видим какво се намира вътре в излъчвателя:

И ето ролята на MOSFET-а и тайнствения чип ме заинтригува. Защо? Защото не е ясно с какво въобще се занимават там.
Първият очевиден вариант — тайнственият чип е памет за сериен номер и данни за калибриране. Чипът има типичен за памет интерфейс I2C и памет вътре със сигурност има. Прожекторите имат серийни номера, по които може да се определи и датата на производство — а ако прожекторът се смени изцяло, то iPhone ще види несъвпадение на серийния номер и ще откаже да работи със смяната. Но най-обикновен I2C EEPROM се среща в крохотен WLCSP-4 корпус — и може дори да бъде заключен срещу презапис, ако много се иска. Затова чипът не може да е просто памет. Той със сигурност прави нещо друго.

Вторият очевиден вариант — тайнственият чип е драйвер на лазерите, а MOSFET-ът – негов ключ. И да, MOSFET-ът наистина се управлява от чипа. Само че чипът също не може да е нещо критично важно като драйвер на лазер.
Първо, MOSFET-ът стои в прекъсване на общия катод на лазерния модул — а 4 отделни анода излизат директно на шлейфа и отиват по-нататък в недрата на слоестата платка на iPhone. И второ, по време на събиране на данни за реверса попаднах на различни инструкции от китайски майстори по ремонт.

Те не изясниха директно същността на въпроса, но в много от тези инструкции се казваше: за ремонт на „счупен“ прожектор е необходимо да се разглоби, да се свали MOSFET-ът и да се замени с премостване между стока и източника. Прожекторът в крайна сметка ще заработи с премостване вътре и функционалността на FaceID ще се възстанови. А щом прожекторът с премостване вместо MOSFET работи нормално, то какво е правил този MOSFET там?
И ме осени: в това е била същността на ремонта. MOSFET-ът се управлява от чипа – затова по желание на чипа може да прекъсне веригата на захранване на лазера и да счупи по този начин прожектора. А ремонтът отстранява това прекъсване.
Какво име носиш ти
Щом стана ясно, че тайнственият чип в двойка с MOSFET пречи на нормалната работа на прожектора, то възниква въпросът — защо го прави? Защо в прожектора поставят чип, който убива прожектора?
За отговори се зарових в фърмуера на блока ISP в процесора на iPhone – именно той разговаря по I2C със сензорите на камерите и с прожектора.
Първо свалих имидж на фърмуера на iOS 15 за iPhone X, най-пресния. Имиджите на фърмуера за iPhone — това са по същество zip-файлове. Вътре намерих търсения фърмуер ISP — във вид на файл Firmwareisp_bniadc-nike-d22.im4p
. От сгъстения im4p-файл се извлече бинарник, във формат Mach-O с AArch64 код вътре. Mach-O, за разлика от типичния „имидж на фърмуер за неизвестен микроконтролер“ — това е документиран формат на изпълним файл, подобен на PE или ELF. Няма гадания за структурата на файла, архитектурата на процесора или адреса, на който трябва да се зареди кодът. Просто хвърляш файла в Ghidra и всичко само се подрежда по местата си. Приятно е.

После инстинктът си каза думата и реших да разровя по-стари фърмуери. И в имиджа на фърмуера на 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-термистор той изобщо не е свързан, а именно капацитет. Само че капацитет на какво?
Трагичната гибел на Ромео

Отговорът на този въпрос отново ни помагат да получим китайските схеми. В схемата от JCID се вижда, че в модула “Romeo” има три контакта за връзка на излъчващия модул с оптичния модул. Един — земя, а още два отиват директно в чипа “MamaBear”. Тези контакти минават през специален преходник отстрани на оптичния модул и попадат на самия му връх — на дифракционния оптичен елемент.
Дифракционният разделител на лъча е неуправляем и не реагира на ток. Но той има капацитет. И с помощта на тези три линии този капацитет може да се измерва. Но защо?
Работата е в това колко важна роля играе този дифракционен разделител. Рисунката на точки, използвани от проектора, се задава от разположението на крохотни лазери-„ямки“ на VСSEL-кристал. А после тази рисунка се размножава от дифракционен елемент, който от един сноп лъчи прави стотици снопове лъчи.

А какво ще стане, ако този дифракционен елемент се откъсне?
Лъчите няма да се разделят. Вместо сто снопа лазерни лъчи ще има един сноп — но пък сто пъти по-мощен. А това все пак е лазер. Инфрачервеният лазер е по-опасен от червения, защото човек не го вижда — и затова няма да отмести инстинктивно поглед дори от опасно мощен източник на светлина. И има ненулев шанс характерната рисунка от точки да се окаже в такъв случай изгорена в ретината на потребителя.
За предотвратяване на това е нужен чипът-убиец. След включване той постоянно следи капацитета на дифракционния елемент — и ако елементът се окаже изкършен или повреден, то капацитетът излиза извън позволеното и чипът веднага изключва MOSFET-а и прекъсва захранването на VCSEL. А тъй като елементът се намира на самия връх на оптичния модул, то да се повреди с удар останалият модул, без при това да се счупи той и да се наруши контактът, е практически невъзможно.
След аварийно изключване на лазера чипът си изгаря в OTP флаг, който обозначава прожектора като дефектен — а това означава, че прекъснатото захранване завинаги ще остане прекъснато. Никакви команди от ISP повече няма да имат сила над него. MOSFET-ът винаги ще бъде затворен и прожекторът повече няма да работи никога.
Чипът “MamaBear”, както подсказва името – това е защитен чип. Това е „killswitch“ за аварийно спиране на лазера. Той убива прожектора, за да не даде възможност на повредено лазерно устройство да свети на потребителя в очите. А модулът “Juliet”, останал без сдвоения му “Romeo”, губи смисъл на живот — и цялата система TrueDepth излиза от строя.
Трудовите делници на техножреците
Но тази схема за защита има недостатък. Работата е в това, че проекторът за точки стои на горния край на устройството и до говорителя. Ако в iPhone попадне течност, то едно от най-честите места за това — е именно там. А капацитивните датчици са чувствителни към проводящи ток течности. Затова често се случва така, че FaceID се чупи след падане на устройството във вода — дори ако попадането на вода е минимално и няма други повреди. Просто “Romeo” не е разбрал правилно ситуацията и е „изгорял“ напразно.
Такива устройства се носят на ремонт. Често в неофициален ремонт. А тъй като iPhone сверява серийните номера на резервните части (здравей, Apple), то просто да смениш целия блок камери с работещ блок от донор не може. Телефонът ще отхвърли новия блок и FaceID все пак няма да заработи. Значи трябва по някакъв начин да се поправи старият. Но как може да се „възкреси“ прожектор, който сам себе си е извадил от строя?
Производителите на неофициални инструменти за ремонт са измислили за това цяла поредица от различни ритуали. А сръчните техножреци-ремонтници свято им следват и провеждат микрохирургия на тази сложна и калибрирана оптична система. Сръчността на ръцете трябва да е невъобразима — компонентите вътре са с размер от броени милиметри, а оптиката е изключително чувствителна. Ако калибрирането се отклони твърде много заради хирургическите намеси, то системата няма да работи. Инструменти за програмно прекалибриране не съществуват (здравей, Apple) — или ще намериш начин да уцелиш оригиналните параметри, или ще останеш без FaceID.

Как работи това? Е, първо трябва да се прочетат OTP-данните от оригиналния чип “MamaBear”.
Данните се четат дори ако прожекторът смята себе си за неизправен. За прочитане на данните китайците правят специални „ремонтни“ програматори — които се доставят с набори от конектори-преходници и работят с цяла поредица от различни компоненти от различни модели iPhone, включително и прожектори.
А после трябва да се направят две неща — да се разбере какво да се прави с прекъсващия захранването MOSFET и да се подмени оригиналният защитен чип. И тук има множество различни методи.

Може например да се хвърли премостване вместо MOSFET-а, както на снимката по-горе в статията, а чипът “MamaBear” да се подмени, като се разпои оригиналният FPC-шлейф и се замени със специален шлейф с китайски чип-измамник.
Оригиналният чип “MamaBear” при това може да остане вътре и безсилно да крещи, че прожекторът в никакъв случай не трябва да работи. Но той вече няма MOSFET, за да изключи принудително прожектора, а iPhone от своя страна вижда само китайския чип — който отдава залятото от програматора копие на оригиналните данни и рапортува, че прожекторът е точно-точно изправен.

А може да се извади чипът “MamaBear” изцяло и да се постави на неговото щатно място китайски заместител „две в едно“ — той и контактите на MOSFET-а затваря и копие на данните OTP в телефона отдава.

Има и вариант с минимум запояване. „Преходник“ с чип-измамник, който се поставя между оригиналния шлейф и дънната платка на iPhone.
Проблемът с MOSFET-а той не решава, но и за него китайците са намерили оригинален подход, като са направили „високоволтови“ програматори.
Знаете ли как всякакви ATtiny могат да се „откирпичат“ и презапишат с помощта на специален високоволтов програматор? Тук ситуацията е съвсем друга. Китайският високоволтов програматор брутално и необратимо „програмира“ MOSFET-а вътре в прожектора в късо съединение между стока и източника.
На последния етап от ремонта ние свързваме прожектора към програматора още веднъж и заливаме в него запазения на първия етап дъмп. И прожекторът е готов да работи, представяйки се за оригинален и немодифициран.
Всички тези различни приспособления се правят и се предлагат от различни продавачи на ремонтно оборудване. Всички възможни чипове-измамници работят само с „родни“ програматори, а в програматорите често стоят DRM-фичъри като обвързване с акаунт и ограничено количество „ремонти“, за попълване на които трябва да се плаща.
Знаят ли майсторите, че със своя ремонт те напълно унищожават системата, измислена от Apple за защита на очите на потребителя? Всъщност не. Те не са реверсъри — те са шамани. Нямат разбиране за принципите на работа. Имат ритуали и имат резултати и това им е достатъчно. А ушните реверсъри от Китай неохотно споделят своите тайни с публиката. Това, което описах в тази статия, е известно в пълен обем само на инженерите на Apple и на десетина китайци „в час“. И на мен. И на теб, вече.
Защо Apple са уроди
Знаете ли, не мога твърде много да виня инженерите на Apple за това, че техният „killswitch“ е твърде активен и чупи прожектори, които напълно биха могли да поработят още. Лазерите — тема опасна и идеята да се защити потребителят от „най-лошите сценарии“ е абсолютно здрава. Макар че реализацията на тази защита изисква доработки.
Но политиката на Apple за борба с неофициалните ремонти — това е най-лошото от всички злини. Ако блоковете TrueDepth можеше спокойно да се сменят от устройство на устройство, без да се гледат серийни номера, то в ужасните извратени ритуали за ремонт практически не би имало смисъл. Защо да се извращаваш с микрохирургическо запояване и да танцуваш с програматори, ако може да се свали от поредния „донор“ със счупен екран абсолютно работещ блок TrueDepth, да се постави в телефона на клиента, да се възстанови напълно функционалността и да се живее спокойно? На ремонтниците това би било по-лесно, а на собствениците на устройства — по-безопасно.
Но историята на уродливото антиремонтно поведение на Apple ясно показва, че това няма да се случи. Е, освен ако в САЩ или в ЕС всякакви движения “Right to Repair” не направят обвързването на резервни части по серийни номера незаконно. А това сега е възможно. В шегата за това, че Евросъюзът добавя в новите модели iPhone повече полезни фичъри отколкото Apple, има много голям дял истина. Така че ще следим законодателните инициативи.
Статията е преведена от руски език. Автор на статията: acc0unt. Ние се постарахме да запазим оригиналния стил и формулировки на автора, доколкото това е възможно при превод.