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

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

คุณควรรีเซ็ต 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

หากอุปกรณ์รองรับการปลดล็อกด้วยแฟลช ตัว Bootloader ควรระบุสถานะการล็อกโดยตั้งค่าตัวแปรบรรทัดคำสั่งของเคอร์เนล androidboot.flash.locked เป็น 1 หากล็อกไว้หรือ 0 หากปลดล็อกอยู่ คุณต้องตั้งค่าตัวแปรนี้ใน Bootconfig แทนในบรรทัดคำสั่ง Kernel ใน 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