ברוב מכשירי Android, תוכנת האתחול נעולה כברירת מחדל, כלומר המשתמשים לא יכולים לצרוב ROM של תוכנת האתחול או של מחיצות המכשיר. במקרה הצורך, אתם (ומשתמשי המכשיר שהפעילו את האפשרויות למפתחים) יכולים לבטל את הנעילה של תוכנת האתחול כדי לצרוב ROM (flash) תמונות חדשות.
כניסה לתוכנת האתחול
כדי להשתמש בפקודות 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, בהתאם לשאלה אם המכשיר תומך בביטול נעילה לצורך צריבת ROM (flash).
- אם המכשיר תומך בביטול נעילה בהבהוב, מגדירים את
ro.oem_unlock_supportedל-1. - אם המכשיר לא תומך בביטול נעילה באמצעות עדכון קושחה, מגדירים את
ro.oem_unlock_supportedלערך0.
אם המכשיר תומך בשחרור נעילה באמצעות הבזקה, טוען האתחול צריך לציין את סטטוס הנעילה על ידי הגדרת משתנה שורת הפקודה של ליבת המערכת androidboot.flash.locked לערך 1 אם המכשיר נעול או לערך 0 אם הוא לא נעול. צריך להגדיר את המשתנה הזה ב-bootconfig ולא בשורת הפקודה של הליבה ב-Android 12.
במכשירים שתומכים ב-dm-verity, צריך להשתמש ב-ro.boot.verifiedbootstate כדי להגדיר את הערך של ro.boot.flash.locked ל-0. כך מבטלים את הנעילה של תוכנת האתחול אם מצב ההפעלה המאומתת הוא כתום.
הגנה על קטעים קריטיים
המכשירים צריכים לתמוך בנעילה ובביטול נעילה של חלקים קריטיים, שמוגדרים ככל מה שנדרש כדי לאתחל את המכשיר לתוך תוכנת האתחול. הקטעים האלה יכולים לכלול נתיכים, מחיצות וירטואליות עבור רכזת חיישנים, טוען אתחול בשלב הראשון ועוד. כדי לנעול קטעים קריטיים, צריך להשתמש במנגנון שמונע מקוד (ליבה (kernel), קובץ אימג' לשחזור מערכת ההפעלה, קוד OTA וכו') שפועל במכשיר לשנות בכוונה קטע קריטי כלשהו. עדכוני OTA צריכים להיכשל בעדכון של חלקים קריטיים אם המכשיר נמצא במצב קריטי נעול.
כדי לעבור ממצב נעול למצב לא נעול, צריך לבצע אינטראקציה פיזית עם המכשיר. האינטראקציה הזו דומה למה שקורה כשמריצים את הפקודה fastboot flashing unlock, אבל היא מחייבת את המשתמש ללחוץ על כפתור פיזי במכשיר. אסור שהמכשירים יאפשרו מעבר מlock_critical לunlock_critical באופן אוטומטי ללא אינטראקציה פיזית, ואסור שהמכשירים יישלחו במצב unlock_critical.