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

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

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

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

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

במצב bootloader, כדי לבטל את הנעילה של 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.

אם המכשיר תומך בביטול נעילה באמצעות פלאש, מנהל האתחול אמור לציין את סטטוס הנעילה על ידי הגדרת המשתנה 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.