נעילה וביטול נעילה של תוכנת האתחול

כברירת מחדל, רוב מכשירי Android כוללים תוכנת אתחול נעולה, כך שהמשתמשים לא יכולים להבהב את תוכנת האתחול או את מחיצות המכשיר. במקרה הצורך, אתם (ומשתמשים במכשיר שהפעילו את התכונה 'אפשרויות למפתחים') יכולים לבטל את נעילת תוכנת האתחול כדי להבהב תמונות חדשות.

כניסה לתוכנת האתחול

כדי להריץ פקודות fastboot, עליכם להיות במצב תוכנת אתחול. אחת מהדרכים לעשות זאת היא לשלוח את פקודת adb adb reboot bootloader. בטלפונים מסוימים אפשר גם להפעיל מחדש את תוכנת האתחול על ידי לחיצה על שילוב מקשים (בדרך כלל להחלשת עוצמת הקול) בזמן ההפעלה של המכשיר.

ביטול הנעילה של תוכנת האתחול

כשאתם נמצאים במצב תוכנת האתחול, כדי לבטל את הנעילה של תוכנת האתחול ולאפשר למחיצות ליצור רפלאש, מריצים את הפקודה fastboot flashing unlock במכשיר. לאחר ההגדרה, מצב ביטול הנעילה ימשיך בכל הפעלות מחדש.

המכשירים צריכים לדחות את הפקודה fastboot flashing unlock, אלא אם get_unlock_ability מוגדר ל-1. אם המדיניות מוגדרת לערך 0, המשתמש צריך לאתחל במסך הבית, לפתוח את התפריט 'הגדרות' > 'מערכת' > 'אפשרויות למפתחים' ולהפעיל את האפשרות ביטול נעילה של OEM (שמגדירה את get_unlock_ability כ-1). אחרי ההגדרה, המצב הזה ממשיך לפעול גם בהפעלות מחדש ובאיפוס של נתוני היצרן.

כשהפקודה fastboot flashing unlock נשלחת, המכשיר צריך לבקש מהמשתמשים להזהיר אותם שהם עלולים להיתקל בבעיות עם תמונות לא רשמיות. אחרי שהמשתמש יאשר את האזהרה, המכשיר צריך לבצע איפוס לנתוני היצרן כדי למנוע גישה לא מורשית לנתונים. תוכנת האתחול אמורה לאפס את המכשיר גם אם הוא לא מצליח לפרמט אותו מחדש כמו שצריך. רק לאחר האיפוס ניתן להגדיר את הדגל הקבוע כדי שיהיה אפשר לבצע רפליקציה של המכשיר.

יש לאפס את כל נתוני ה-RAM שעדיין לא הוחלפו במהלך התהליך של fastboot flashing unlock. האמצעי הזה מונע מתקפות שקוראים את תוכן ה-RAM שנותר מההפעלה הקודמת. באופן דומה, מכשירים לא נעולים צריכים לנקות את זיכרון ה-RAM בכל הפעלה (אלא אם הדבר גורם לעיכוב לא קביל), אבל צריך להשאיר את האזור שמשמש את ramoops של הליבה.

נעילת תוכנת האתחול

כדי לנעול את תוכנת האתחול ולאפס את המכשיר, מריצים את הפקודה fastboot flashing lock במכשיר. מכשירים שמיועדים לקמעונאים צריכים להישלח במצב נעילה (עם get_unlock_ability מחזירה 0) כדי שתוקפים לא יוכלו לפגוע במכשיר על ידי התקנת מערכת חדשה או קובץ אימג' חדש להפעלה.

הגדרת מאפייני נעילה וביטול נעילה

יש להגדיר את המאפיין ro.oem_unlock_supported בזמן ה-build בהתאם למצב שבו המכשיר תומך בביטול נעילה בהבהוב.

  • אם המכשיר תומך בהבהוב של ביטול נעילה, צריך להגדיר את ro.oem_unlock_supported לערך 1.
  • אם המכשיר לא תומך בהבהוב של ביטול נעילה, הגדירו לפרמטר ro.oem_unlock_supported את הערך 0.

אם המכשיר תומך בביטול נעילה בהבהוב, תוכנת האתחול אמורה לציין את סטטוס הנעילה על ידי הגדרת משתנה שורת הפקודה (kernel) androidboot.flash.locked לערך 1 אם המכשיר נעול, או לערך 0 אם הנעילה לא נעולה. את המשתנה הזה צריך להגדיר ב-bootconfig במקום בשורת הפקודה של הליבה ב-Android 12.

במכשירים שתומכים ב-dm-verity, יש להשתמש ב-ro.boot.verifiedbootstate כדי להגדיר את הערך של ro.boot.flash.locked ל-0. הפעולה הזו תבטל את הנעילה של תוכנת האתחול אם מצב ההפעלה המאומת הוא כתום.

הגנה על קטעים קריטיים

המכשירים צריכים לתמוך בנעילה ובביטול נעילה של קטעים קריטיים, שמוגדרים כפי שנדרש כדי להפעיל את המכשיר בתוכנת האתחול. קטעים כאלה יכולים לכלול נתיכים, מחיצות וירטואליות של מרכז חיישנים, תוכנת אתחול בשלב ראשון ועוד. כדי לנעול קטעים קריטיים, צריך להשתמש במנגנון שמונע מקוד (ליבה, קובץ אימג' לשחזור, קוד OTA וכו') שפועל במכשיר לשנות בכוונה כל קטע קריטי. אם המכשיר במצב קריטי, אפליקציות OTA לא צריכות לעדכן קטעים קריטיים.

מעבר ממצב נעול למצב לא נעול צריך לדרוש אינטראקציה פיזית עם המכשיר. האינטראקציה הזו דומה להשפעות של הרצת הפקודה fastboot flashing unlock, אבל המשתמש צריך ללחוץ על לחצן פיזי במכשיר. אסור שמכשירים יוכלו לעבור באופן פרוגרמטי מ-lock critical ל-unlock critical ללא אינטראקציה פיזית, ואסור שהמכשירים יישלחו במצב unlock critical.