נתחיל מההתחלה: איך מערכת Face ID נראית, ואיך היא עובדת:


מבחינת חומרה, המערכת הזו מורכבת מזוג מצלמות – IR ו-RGB, ושני סוגים של פולטי IR – תאורה רגילה ומקרן נקודות ייעודי.
נוריד את ה"עור" מאייפון X, נסיר את כל המיותר, ונראה את בלוק המצלמות הקדמיות בצורה גולמית. תאורת ה-IR קיימת בנפרד, אבל כל שאר הרכיבים נמצאים לנו בידיים – הם מחוזקים באופן מאובטח במסגרת המתכת הזו.
כאן אנחנו רואים מצלמת IR ומקרן נקודות IR. על זוג האינפרה-אדום הזה נשענת עבודת מערכות TrueDepth ו-FaceID. והגיבור הראשי של הסיפור של היום – הוא דווקא מקרן הנקודות.
עיקרון עבודה קצר של FaceID

מקרן הנקודות IR עושה בדיוק את מה שהשם שלו אומר – יורק, בפקודה, לעולם הסובב עשרות אלפי נקודות אינפרה-אדום. ומצלמת ה-IR, ש נותנת את הפקודה הזו, מצלמת מיד את הנקודות האלה.
תוך ידיעה של המאפיינים האופטיים של המקרן, המצלמה והמרחק ביניהם, ISP במעבד האייפון יכול להעריך כמה רחוק כל נקודה נמצאת. את המתמטיקה של התהליך אני עצמי לא מבין עד הסוף, ולעשות לו רוורס יהיה קשה – אבל צילום סדרת תמונות עם דפוסי נקודות שונים מאפשר לנחש די במדויק את המיקום של כל נקודה בודדת, ולעשות בצורה כזו מפת עומק שלמה. בלי LIDAR ובלי ToF.
דווקא מפת העומק מאפשרת ל-FaceID לא להיות מרומה על ידי תמונות מודפסות במדפסת. תמונה היא שטוחה – ולפנים יש תבליט, ול-FaceID המפה הטופוגרפית של הפרצוף חשובה יותר מהצבע שלו.

עם זאת, המערכת מסתכלת גם על צבע הפנים. מצלמת ה-IR מסונכרנת חומרתית עם מצלמת ה-RGB, ושתי המצלמות מצלמות את הפנים בו זמנית. ועוד, אייפון יכול להבהב לא רק עם מקרן ה-IR, אלא גם עם תאורת ה-IR – ולצלם את כל הפנים בספקטרום ה-IR.
מפת העומק עצמה גסה למדי, וניתוח מרקם הפנים בתמונות IR ו-RGB על ידי רשת עצבית מאפשר הן לדייק את העומק, והן להבין טוב יותר בפרטים כמו הבעות פנים – גם באור יום וגם בחושך.
אם המערכת הזו נראית לכם מוכרת, אז זה כנראה בגלל שהיא נשלפה ישירות מ-Kinect של Xbox 360. רק ה-Kinect הזה היה חתיכת בונבוניירה ענקית, וכאן צמצמו אותו לגודל של חריץ במסך הסמארטפון.
עשתה את זה חברת PrimeSense, שפיתחה את הטכנולוגיות בבסיס Kinect 1 – ואז נקנתה על ידי אפל ב-350 מיליון דולר. בשלמותה – עם כל הפטנטים, הידע, העובדים ושאר הקרביים.
מפרקים את הקרביים של המקרן

נכנסים עמוק יותר לרוורס: מוציאים את מקרן הנקודות מבלוק המצלמות של אייפון X ומפרקים אותו לחלקים מרכיבים. הוא מורכב משרוול FPC, מכלול פולט ומכלול אופטי.
השרוול פסיבי לחלוטין, ולכן פחות מעניין. הוא מולחם למכלול הפולט, ומוציא אותות למחבר FPC, שמתחבר ללוח האם של אייפון X. מחבר עם צעד מגעים של 0.35 מ"מ, מותאם אישית (אפל חארות), ונראה שנעשה על ידי חברת JAE.
נסתכל על הרכיבים העיקריים של האופטיקה:

ונראה מה נמצא בתוך הפולט:

ואז התפקיד של MOSFET והשבב המסתורי עניין אותי. למה? כי לא ברור מה הם בכלל עושים שם.
האפשרות הראשונה והברורה – השבב המסתורי הוא זיכרון למספר סידורי ונתוני כיול. לשבב יש ממשק I2C אופייני לזיכרון, ובפנים בטח יש זיכרון. למקרנים יש מספרים סידוריים, שבאמצעותם אפשר בין היתר לקבוע את תאריך הייצור – ואם מחליפים מקרן בשלמותו, אז אייפון יראה אי התאמה של המספר הסידורי ויסרב לעבוד עם ההחלפה. אבל EEPROM I2C רגיל ביותר מגיע במארז WLCSP-4 זעיר – ואפשר אפילו לחסום אותו מפני כתיבה חוזרת, אם ממש רוצים. לכן, שבב לא יכול להיות רק זיכרון. הוא בטח עושה עוד משהו.

האפשרות השנייה והברורה – השבב המסתורי הוא דרייבר לייזרים, ו-MOSFET – המפסק שלו. וכן, MOSFET אכן נשלט על ידי השבב. רק שמשהו קריטי כמו דרייבר לייזר, השבב גם לא יכול להיות.
קודם כל, MOSFET מותקן בניתוק הקתודה הכללית של מכלול הלייזרים – ו-4 אנודות נפרדות יוצאות ישירות לשרוול ומשם הלאה לתוך מעמקי הלוח השכבתי של האייפון. ושנית, תוך כדי איסוף נתונים לרוורס נתקלתי בהוראות שונות מאומני תיקונים סיניים.

הם לא הבהירו ישירות את מהות העניין, אבל ברבות מההוראות האלה נאמר: כדי לתקן מקרן "שבור" צריך לפרק אותו, להסיר MOSFET, ולהחליף במגשר בין הניקוז למקור. המקרן בסופו של דבר יעבוד עם מגשר בפנים, ופונקציונליות FaceID תשוקם. ואם מקרן עם מגשר במקום MOSFET עובד כרגיל, אז מה MOSFET הזה עשה שם?
ואז הבנתי: בזה בדיוק הייתה מהות התיקון. MOSFET נשלט על ידי השבב – לכן, לפי רצון השבב הוא יכול לנתק את מעגל ההזנה של הלייזר, ולשבור בכך את המקרן. והתיקון הזה מבטל את הניתוק הזה.
מה בשם שלך
ברגע שהתברר שהשבב המסתורי בזוג עם MOSFET מפריע לעבודה תקינה של המקרן, עולה השאלה – למה הוא עושה את זה? למה שמים במקרן שבב שהורג את המקרן?
לתשובות פניתי לקושחה של בלוק ISP במעבד האייפון – הוא זה שמדבר ב-I2C עם חיישני המצלמות ועם המקרן.
בהתחלה הורדתי תמונת קושחה iOS 15 לאייפון X, טרייה. תמונות קושחה לאייפון – הן בעצם קבצי zip. בפנים מצאתי את קושחת ה-ISP המבוקשת – בצורת קובץ Firmwareisp_bniadc-nike-d22.im4p
. מקובץ im4p מכווץ חולץ בינארי, בפורמט Mach-O עם AArch64 קוד בפנים. Mach-O, בניגוד ל"תמונת קושחה אופיינית למיקרו-בקר לא ידוע" – זה פורמט קובץ הרצה מתועד, דומה ל-PE או ELF. אין שום ניחושים לגבי מבנה הקובץ, ארכיטקטורת המעבד או הכתובת שאליה צריך לטעון את הקוד. פשוט זורקים את הקובץ ל-Ghidra והכל מסתדר לבד על המדפים. נחמד.

אחר כך האינסטינקט השתלט, והחלטתי לפשוט על קושחות ישנות יותר. ובתוך תמונת קושחה iOS 13 מצאתי קובץ adc-nike-d22. אפילו הגודל היה כמעט זהה. רק שבקושחה החדשה היה יותר קוד – ובישנה היה פחות קוד, אבל היו סימנים. כל שמות הפונקציות במקום. תמיד תבדוק גרסאות ישנות!
בקושחת ISP יש הרבה מידע, כולל איך אייפון מתקשר ב-I2C עם שבבים שונים – עם חיישני מצלמות, עם PMU מצלמות, עם שבבי ניהול הבזקים ומיקוד אוטומטי. משם, תודה לסימנים, הצלחתי לחלץ "שמות" של חלקים מרכיבים שונים של המערכת – וחלק מהם תואמים לחומרים מחלקים אחרים של הקושחה, וגם מרברסרים וטכנאי תיקונים אחרים. לדוגמה, חיישן מצלמת IR – זה STMicroelectronics VD56G0 “Savage”. כל מערכת TrueDepth בקוד נקראת “Pearl”, ולמודולים העיקריים שלה ניתנו שמות של דמויות מ"רומיאו ויוליה". מקרן IR נקרא “Romeo”, מצלמת IR – “Juliet”, ותאורת IR נקראת “Rosaline”. דרייבר לייזרים, שחי על לוח האם של האייפון ומזין הן את הלייזרים בתוך “Romeo”, והן את הלייזר בתוך התאורה “Rosaline”, נקרא “Rigel“.
השבב המסתורי שמעניין אותנו? גם לו יש שם. בקוד קוראים לו “MamaBear”, בקיצור “MB”, ונראה שהפונקציונליות שלו פשוטה למדי. הוא חי על אפיק I2C. הוא שומר בתוכו נתוני OTP, כולל מספר סידורי וכיולים שונים. הוא מדליק ומכבה בפקודה MOSFET. ועוד הוא מודד… קיבול? לא טמפרטורה, הוא בכלל לא מחובר לתרמיסטור NTC, אלא דווקא קיבול. רק קיבול של מה?
מותו הטרגי של רומיאו

התשובה לשאלה הזו שוב עוזרות לנו לקבל סכמות סיניות. בסכמה מ-JCID נראה שבמודול “Romeo” יש שלושה מגעים לחיבור מכלול הפולט למכלול האופטי. אחד – אדמה, ועוד שניים הולכים ישירות לשבב “MamaBear”. המגעים האלה עוברים דרך מתאם מיוחד בצד של המכלול האופטי, ומגיעים לחלקו העליון ביותר – לרכיב אופטי דיפרקטיבי.
מפצל קרן דיפרקטיבי לא נשלט, ולא מגיב לזרם. אבל יש לו קיבול. ובאמצעות שלושת הקווים האלה אפשר למדוד את הקיבול הזה. אבל למה?
העניין הוא, כמה תפקיד חשוב ממלא מפצל דיפרקטיבי זה. דפוס הנקודות, שמשמש את המקרן, נקבע על ידי מיקום לייזרים-"גומות" זעירים על גבי גביש VСSEL. ואז הדפוס הזה משוכפל על ידי רכיב דיפרקטיבי, שהופך מקרן אור אחת למאות קרני אור.

ואז, מה יקרה אם הרכיב הדיפרקטיבי הזה יתלש?
הקרניים לא יתפצלו. במקום מאות קרני לייזר תהיה קרן אחת – אבל פי מאה יותר חזקה. וזה בכל זאת לייזר. לייזר אינפרה-אדום מסוכן יותר מאדום, כי אדם לא רואה אותו – ולכן לא יסיט אינסטינקטיבית את מבטו גם ממקור אור חזק ומסוכן. ויש סיכוי לא אפסי שדפוס האופייני של נקודות ייצרב במקרה כזה לרשתית המשתמש.
כדי למנוע זאת נחוץ שבב-רוצח. לאחר ההדלקה הוא עוקב כל הזמן אחר הקיבול של הרכיב הדיפרקטיבי – ואם הרכיב מתגלה כתלוש או פגום, אז הקיבול יוצא מגבולות המותר, והשבב מיד מנתק את MOSFET ומנתק את ההזנה של VCSEL. ומכיוון שהרכיב נמצא בחלקו העליון ביותר של המכלול האופטי, אז לפגוע במכה בשאר המכלול, בלי לשבור אותו ובלי להפריע למגע, כמעט בלתי אפשרי.
לאחר ניתוק חירום של הלייזר, השבב שורף לעצמו ב OTP דגל, שמסמן את המקרן כפגום – כלומר, ההזנה המנותקת תישאר מנותקת לנצח. שום פקודות מ-ISP כבר לא יהיו בעלות כוח עליו. MOSFET תמיד יהיה סגור, והמקרן כבר לא יעבוד לעולם.
שבב “MamaBear”, כפי שמרמז השם – זה שבב הגנה. זה “killswitch” לעצירת חירום של הלייזר. הוא הורג את המקרן כדי לא לתת למכשיר לייזר פגום להאיר למשתמש בעיניים. ומודול “Juliet”, שנשאר בלי “Romeo” שצמוד אליו, מאבד את הטעם לחיים – וכל מערכת TrueDepth יוצאת מכלל פעולה.
שגרת יומם של טכנו-כוהנים
אבל לסכמת הגנה הזו יש פגם. העניין הוא שמקרן הנקודות מותקן בקצה העליון של המכשיר, וליד הרמקול. אם נוזל חודר לתוך האייפון, אז אחד המקומות השכיחים ביותר לכך – זה בדיוק שם. וחיישני קיבול רגישים לנוזלים מוליכי זרם. לכן קורה לעתים קרובות ש-FaceID נשבר לאחר נפילת המכשיר למים – גם אם חדירת המים מינימלית, ואין נזקים אחרים. פשוט “Romeo” לא הבין נכון את המצב, וביצע רוסקומנדזור סתם.
מכשירים כאלה מביאים לתיקון. לעתים קרובות לתיקון לא רשמי. ומכיוון שאייפון משווה מספרי סידורי של חלקי חילוף (שלום, אפל), אז פשוט להחליף את כל בלוק המצלמות בבלוק עובד מתורם אי אפשר. הטלפון ידחה את הבלוק החדש, ו-FaceID עדיין לא יעבוד. כלומר, צריך איכשהו לתקן את הישן. אבל איך אפשר "להחיות" מקרן שהוציא את עצמו מכלל פעולה בכוונה?
יצרני כלים לא רשמיים לתיקון המציאו בשביל זה סדרה שלמה של פולחנים שונים. וטכנו-כוהנים-טכנאים ישרים מקיימים אותם באדיקות, ומבצעים מיקרו-כירורגיה במערכת אופטית מורכבת ומכוילת זו. ישרות ידיים נחוצה שלא תיאמן – רכיבים בפנים בגודל של מילימטרים ספורים, והאופטיקה רגישה ביותר. אם הכיול יסטה יותר מדי בגלל התערבויות כירורגיות, אז המערכת לא תעבוד. אין כלים לכיול תוכנתי מחדש (שלום, אפל) – או שתמצא דרך להיכנס לפרמטרים המקוריים, או שתישאר בלי FaceID.

איך זה עובד? ובכן, קודם כל צריך לקרוא נתוני OTP מהשבב המקורי “MamaBear”.
הנתונים ניתנים לקריאה גם אם המקרן מחשיב את עצמו כפגום. לקריאת נתונים הסינים מייצרים "מתכנתים" מיוחדים לתיקון – שמגיעים עם ערכות מחברים-מתאמים, ועובדים עם סדרה שלמה של רכיבים שונים מדגמי אייפון שונים, כולל מקרנים.
ואז צריך לעשות שני דברים – להסתדר עם MOSFET מנתק ההזנה, ולהחליף את שבב ההגנה המקורי. וכאן יש מגוון שיטות שונות.

אפשר, למשל, לזרוק מגשר במקום MOSFET, כמו בתמונה למעלה במאמר, ואת השבב “MamaBear” להחליף, על ידי ניתוק שרוול FPC מקורי והחלפתו בשרוול מיוחד עם שבב-דמה סיני.
השבב המקורי “MamaBear” יכול להישאר בפנים, ולצעוק בחוסר אונים שהמקרן בשום פנים ואופן לא צריך לעבוד. אבל כבר אין לו MOSFET כדי לכבות את המקרן בכוח, ולאייפון מצדו רואה רק שבב סיני – שמוציא עותק של הנתונים המקוריים שהוזרמו על ידי המתכנת, ומדווח שהמקרן בדיוק-בדיוק תקין.

ואפשר לעקור את השבב “MamaBear” בשלמותו, ולשים במקומו הקבוע תחליף סיני שניים-באחד – הוא גם סוגר את מגעי MOSFET, וגם מוציא לטלפון עותק של נתוני OTP.

ויש גם אפשרות עם מינימום הלחמות. "מתאם" עם שבב-דמה, שמוצב בין השרוול המקורי ללוח האם של האייפון.
הוא לא פותר את הבעיה עם MOSFET, אבל גם לזה הסינים מצאו גישה מקורית, כשעשו "מתכנתים מתח גבוה".
אתם יודעים איך אפשר "לשחרר" כל מיני ATtiny ולכתוב עליהם מחדש באמצעות מתכנת מתח גבוה מיוחד? כאן המצב שונה לחלוטין. מתכנת המתח הגבוה הסיני "מתכנת" באכזריות ובלתי הפיכה MOSFET בתוך המקרן לקצר בין הניקוז למקור.
בשלב האחרון של התיקון אנחנו מחברים את המקרן למתכנת שוב, ומזרימים לתוכו את הגיבוי שנשמר בשלב הראשון. והמקרן מוכן לעבוד, כשהוא מציג את עצמו כמקורי ולא משופץ.
כל המתקנים השונים האלה נעשים ומקודמים על ידי מוכרים שונים של ציוד תיקונים. כל מיני שבבי-דמה עובדים רק עם מתכנתים "מקומיים", ובמתכנתים לעתים קרובות מותקנות תכונות DRM כמו קישור לחשבון ומספר מוגבל של "תיקונים", שעבור חידושם צריך לשלם.
האם הטכנאים יודעים שהם בהתקנה שלהם משמידים לחלוטין את המערכת, שאפל המציאה כדי להגן על עיני המשתמש? לא ממש. הם לא רברסרים – הם שאמאנים. אין להם הבנה של עקרונות העבודה. יש להם פולחנים ויש תוצאות, וזה מספיק להם. ורברסרים ערמומיים מסין לא ששים לחלוק את סודותיהם עם הציבור. מה שתיארתי במאמר הזה, ידוע במלואו רק למהנדסי אפל ולתריסר סינים "בעניין". ולי. ולך, עכשיו.
למה אפל חארות
אתם יודעים, אני לא יכול להאשים יותר מדי את מהנדסי אפל על כך ש"killswitch" שלהם פעיל מדי, וששובר מקרנים, שיכלו בהחלט עדיין לעבוד. לייזרים – נושא מסוכן, והרעיון להגן על המשתמש מפני "תרחישים גרועים ביותר" בהחלט בריא. למרות שהמימוש של ההגנה הזו דורש שיפורים.
אבל מדיניות אפל למאבק בתיקונים לא רשמיים – זה הגרוע מכל הרעות. אם היה אפשר להחליף בשקט בלוקי TrueDepth ממכשיר למכשיר, בלי להתחשב במספרים סידוריים, אז בפולחני תיקון מעוותים איומים כמעט לא היה טעם. למה להתעלל עם הלחמה מיקרו-כירורגית ולרקוד עם מתכנתים, אם אפשר להסיר מתורם תורן עם מסך שבור בלוק TrueDepth עובד לחלוטין, להתקין אותו בטלפון של הלקוח, לשקם לחלוטין את הפונקציונליות, ולחיות בשלום? לטכנאים זה היה קל יותר, ולבעלי המכשירים – בטוח יותר.
אבל ההיסטוריה של התנהגות אנטי-תיקון מחרידה של אפל מראה בבירור, שזה לא יקרה. אלא אם כן בארה"ב או באיחוד האירופי כל מיני תנועות “Right to Repair” יהפכו קישור חלקי חילוף לפי מספרים סידוריים ללא חוקי. וזה אפשרי כרגע. בבדיחה על כך שהאיחוד האירופי מוסיף לדגמי אייפון חדשים יותר פיצ'רים מועילים מאשר אפל, יש אחוז גבוה מאוד של אמת. אז נעקוב אחר יוזמות חקיקה.
המאמר תורגם מרוסית. מחבר המאמר: acc0unt. השתדלנו לשמור על הסגנון והניסוחים המקוריים של המחבר, ככל האפשר בתרגום.