โดยค่าเริ่มต้น อุปกรณ์ Android ส่วนใหญ่จะมาพร้อมกับ Bootloader ที่ล็อกอยู่ ซึ่งหมายความว่าผู้ใช้จะแฟลช Bootloader หรือพาร์ติชันของอุปกรณ์ไม่ได้ หากจำเป็น คุณ (และผู้ใช้อุปกรณ์ที่เปิดใช้ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์) สามารถปลดล็อกโปรแกรมโหลดบูตเพื่อแฟลชภาพใหม่ได้
เข้าสู่ Bootloader
หากต้องการออกคำสั่ง fastboot
คุณต้องอยู่ในโหมด Bootloader วิธีหนึ่งในการทำเช่นนี้คือการส่งคําสั่ง adb adb reboot bootloader
โทรศัพท์บางรุ่นยังให้คุณรีบูตเข้าสู่ Bootloader ได้โดยกดแป้นผสม (มักเป็นแป้นลดระดับเสียง) ขณะบูตอุปกรณ์
ปลดล็อก Bootloader
เมื่ออยู่ในโหมด Bootloader ให้ปลดล็อก Bootloader และเปิดใช้การแฟลชพาร์ติชันอีกครั้งโดยเรียกใช้คำสั่ง fastboot flashing unlock
ในอุปกรณ์ หลังจากตั้งค่าแล้ว โหมดปลดล็อกจะยังคงอยู่หลังจากรีบูต
อุปกรณ์ควรปฏิเสธคําสั่ง fastboot flashing unlock
เว้นแต่จะมีการตั้งค่า get_unlock_ability
เป็น 1
หากตั้งค่าเป็น 0
ผู้ใช้จะต้องบูตไปที่หน้าจอหลัก เปิดเมนูการตั้งค่า > ระบบ > ตัวเลือกสำหรับนักพัฒนาแอป และเปิดใช้ตัวเลือกการปลดล็อก OEM (ซึ่งจะตั้งค่า get_unlock_ability
เป็น 1
) หลังจากตั้งค่าแล้ว โหมดนี้จะยังคงอยู่ตลอดการรีบูตและการรีเซ็ตข้อมูลเป็นค่าเริ่มต้น
เมื่อส่งคำสั่ง fastboot flashing unlock
อุปกรณ์ควรแจ้งเตือนผู้ใช้ว่าอาจพบปัญหาเกี่ยวกับรูปภาพที่ไม่ทางการ
หลังจากผู้ใช้ยอมรับคำเตือนแล้ว อุปกรณ์ควรรีเซ็ตข้อมูลเป็นค่าเริ่มต้นเพื่อป้องกันการเข้าถึงข้อมูลโดยไม่ได้รับอนุญาต บูตโหลดเดอร์ควรรีเซ็ตอุปกรณ์แม้ว่าจะฟอร์แมตอย่างถูกต้องไม่ได้ก็ตาม คุณจะตั้งค่า 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 ส่วนดังกล่าวอาจรวมถึงฟิวส์ พาร์ติชันเสมือนสำหรับฮับเซ็นเซอร์ บูตโหลดเดอร์ระยะแรก และอื่นๆ หากต้องการล็อกส่วนที่เป็นข้อสําคัญ คุณต้องใช้กลไกที่ป้องกันไม่ให้โค้ด (เคอร์เนล อิมเมจการกู้คืน โค้ด OTA ฯลฯ) ที่ทํางานในอุปกรณ์แก้ไขส่วนที่เป็นข้อสําคัญโดยเจตนา OTA ไม่ควรอัปเดตส่วนสําคัญหากอุปกรณ์อยู่ในสถานะล็อกสําคัญ
การเปลี่ยนจากสถานะล็อกเป็นปลดล็อกควรต้องมีการโต้ตอบกับอุปกรณ์ การโต้ตอบนี้คล้ายกับผลของการใช้คำสั่ง fastboot flashing unlock
แต่กำหนดให้ผู้ใช้ต้องกดปุ่มบนอุปกรณ์ อุปกรณ์ไม่ควรอนุญาตให้เปลี่ยนจากสถานะ lock critical
เป็น unlock critical
แบบเป็นโปรแกรมโดยไม่มีการโต้ตอบกับอุปกรณ์ และไม่ควรจัดส่งอุปกรณ์ในสถานะ unlock critical