ล็อกและปลดล็อก Bootloader

โดยค่าเริ่มต้น อุปกรณ์ Android ส่วนใหญ่จะมาพร้อมกับ Bootloader ที่ล็อกอยู่ ซึ่งหมายความว่าผู้ใช้จะแฟลช Bootloader หรือพาร์ติชันของอุปกรณ์ไม่ได้ หากจำเป็น คุณ (และผู้ใช้อุปกรณ์ที่เปิดใช้ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์) สามารถปลดล็อกโปรแกรมโหลดบูตเพื่อแฟลชภาพใหม่ได้

เข้าสู่ Bootloader

หากต้องการออกคำสั่ง fastboot คุณต้องอยู่ในโหมด Bootloader วิธีหนึ่งในการดำเนินการนี้คือการส่งคําสั่ง adb adb reboot bootloader โทรศัพท์บางรุ่นยังให้คุณรีบูตเข้าสู่ Bootloader ได้โดยกดแป้นผสม (มักเป็นแป้นลดระดับเสียง) ขณะบูตอุปกรณ์

ปลดล็อก Bootloader

เมื่ออยู่ในโหมด Bootloader ให้เรียกใช้คำสั่ง fastboot flashing unlock ในอุปกรณ์เพื่อปลดล็อก Bootloader หลังจากตั้งค่าแล้ว โหมดปลดล็อกจะยังคงอยู่หลังจากรีบูต

อุปกรณ์ควรปฏิเสธคำสั่ง fastboot flashing unlock เว้นแต่จะตั้งค่า get_unlock_ability เป็น 1 หากตั้งค่าเป็น 0 ผู้ใช้จะต้องบูตไปที่หน้าจอหลัก เปิดเมนูการตั้งค่า > ระบบ > ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ และเปิดใช้ตัวเลือกการปลดล็อก OEM (ซึ่งจะตั้งค่า get_unlock_ability เป็น 1) หลังจากตั้งค่าแล้ว โหมดนี้จะยังคงอยู่หลังจากการรีบูตและการรีเซ็ตข้อมูลเป็นค่าเริ่มต้น

เมื่อส่งคำสั่ง fastboot flashing unlock แล้ว อุปกรณ์จะแจ้งให้ผู้ใช้เตือนว่าอาจพบปัญหากับรูปภาพที่ไม่เป็นทางการ หลังจากที่ผู้ใช้รับทราบคำเตือนแล้ว อุปกรณ์ควรรีเซ็ตข้อมูลเป็นค่าเริ่มต้นเพื่อป้องกันการเข้าถึงข้อมูลโดยไม่ได้รับอนุญาต Bootloader ควรรีเซ็ตอุปกรณ์แม้ว่าจะฟอร์แมตไม่ถูกต้องก็ตาม คุณจะตั้งค่า Flag แบบถาวรเพื่อให้แฟลชอุปกรณ์อีกครั้งได้หลังจากรีเซ็ตเท่านั้น

ควรรีเซ็ต RAM ทั้งหมดที่ไม่ได้เขียนทับในระหว่างกระบวนการ fastboot flashing unlock ซึ่งมาตรการนี้จะช่วยป้องกันไม่ให้มีการโจมตีที่อ่านเนื้อหาที่เหลืออยู่ใน RAM จากการบูตครั้งก่อนหน้า ในทำนองเดียวกัน อุปกรณ์ที่ปลดล็อกแล้วควรล้าง RAM ทุกครั้งที่บูต (เว้นแต่จะทำให้เกิดความล่าช้าที่ไม่ยอมรับได้) แต่ควรปล่อยพื้นที่ที่ใช้สำหรับramoops ของเคิร์กัล

ล็อก Bootloader

หากต้องการล็อก Bootloader และรีเซ็ตอุปกรณ์ ให้เรียกใช้คำสั่ง fastboot flashing lock ในอุปกรณ์ อุปกรณ์ที่มีไว้สำหรับค้าปลีกควรจัดส่งในสถานะล็อก (โดยที่ get_unlock_ability แสดงกลับเป็น 0) เพื่อให้มั่นใจว่าผู้โจมตีจะไม่สามารถเข้าถึงอุปกรณ์ได้โดยการติดตั้งระบบหรืออิมเมจการบูตใหม่

ตั้งค่าการล็อกและการปลดล็อก

คุณควรตั้งค่าพร็อพเพอร์ตี้ ro.oem_unlock_supported ในเวลาที่สร้างแอป โดยอิงจากว่าอุปกรณ์รองรับการปลดล็อกด้วยการกะพริบหรือไม่

  • หากอุปกรณ์รองรับการปลดล็อกด้วยการกะพริบ ให้ตั้งค่า 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 ซึ่งจะเป็นการปลดล็อก Bootloader หากสถานะการเปิดเครื่องที่ได้รับการยืนยันเป็นสีส้ม

ปกป้องส่วนสําคัญ

อุปกรณ์ควรรองรับการล็อกและการปลดล็อกส่วนสำคัญ ซึ่งหมายถึงสิ่งที่จำเป็นในการเปิดเครื่องอุปกรณ์เข้าสู่ Bootloader ส่วนดังกล่าวอาจรวมถึงฟิวส์ พาร์ติชันเสมือนสำหรับฮับเซ็นเซอร์ Bootloader ขั้นแรก และอื่นๆ หากต้องการล็อกส่วนที่เป็นข้อสําคัญ คุณต้องใช้กลไกที่ป้องกันไม่ให้โค้ด (เคอร์เนล อิมเมจการกู้คืน โค้ด OTA ฯลฯ) ที่ทํางานในอุปกรณ์แก้ไขส่วนที่เป็นข้อสําคัญโดยเจตนา OTA ไม่ควรอัปเดตส่วนสําคัญได้หากอุปกรณ์อยู่ในสถานะล็อกสําคัญ

การเปลี่ยนจากสถานะล็อกเป็นปลดล็อกควรต้องมีการโต้ตอบกับอุปกรณ์ การโต้ตอบนี้คล้ายกับผลของการเรียกใช้คำสั่ง fastboot flashing unlock แต่กำหนดให้ผู้ใช้กดปุ่มบนอุปกรณ์ อุปกรณ์ไม่ควรอนุญาตให้เปลี่ยนจาก lock critical ไปใช้ unlock critical แบบเป็นโปรแกรมโดยไม่มีการโต้ตอบทางกายภาพ และอุปกรณ์ไม่ควรจัดส่งในสถานะ unlock critical