Khóa/Mở khóa Bootloader

Theo mặc định, hầu hết các thiết bị Android đều có bộ nạp khởi động bị khóa, nghĩa là người dùng không thể flash bộ nạp khởi động hoặc phân vùng thiết bị. Nếu cần, bạn (và người dùng thiết bị đã bật tùy chọn Nhà phát triển) có thể mở khóa bộ nạp khởi động để flash hình ảnh mới.

Vào bootloader

Để ra lệnh fastboot , bạn phải ở chế độ bootloader. Một cách để thực hiện việc này là gửi lệnh adb adb reboot bootloader . Một số điện thoại cũng cho phép bạn khởi động lại vào bộ nạp khởi động bằng cách nhấn tổ hợp phím (thường là giảm âm lượng) trong khi khởi động thiết bị.

Mở khóa bootloader

Khi ở chế độ bộ nạp khởi động, để mở khóa bộ nạp khởi động và cho phép khởi động lại các phân vùng, hãy chạy lệnh fastboot flashing unlock trên thiết bị. Sau khi cài đặt, chế độ mở khóa vẫn tiếp tục trong các lần khởi động lại.

Các thiết bị nên từ chối lệnh fastboot flashing unlock trừ khi get_unlock_ability được đặt thành 1 . Nếu được đặt thành 0 , người dùng cần khởi động vào màn hình chính, mở menu Cài đặt > Hệ thống > Tùy chọn nhà phát triển và bật tùy chọn mở khóa OEM (đặt get_unlock_ability thành 1 ). Sau khi cài đặt, chế độ này vẫn tồn tại trong suốt quá trình khởi động lại và đặt lại dữ liệu ban đầu.

Khi lệnh fastboot flashing unlock được gửi, thiết bị sẽ nhắc người dùng cảnh báo rằng họ có thể gặp phải sự cố với hình ảnh không chính thức. Sau khi người dùng xác nhận cảnh báo, thiết bị sẽ thực hiện thiết lập lại dữ liệu ban đầu để ngăn chặn việc truy cập dữ liệu trái phép. Bộ nạp khởi động sẽ đặt lại thiết bị ngay cả khi thiết bị không thể định dạng lại đúng cách. Chỉ sau khi thiết lập lại, cờ liên tục mới có thể được đặt để thiết bị có thể được khởi động lại.

Tất cả RAM chưa bị ghi đè phải được đặt lại trong quá trình fastboot flashing unlock . Biện pháp này ngăn chặn các cuộc tấn công đọc nội dung RAM còn sót lại từ lần khởi động trước. Tương tự, các thiết bị đã mở khóa phải xóa RAM mỗi lần khởi động (trừ khi điều này tạo ra độ trễ không thể chấp nhận được), nhưng phải để lại vùng được sử dụng cho ramoops của kernel.

Khóa bootloader

Để khóa bootloader và reset thiết bị, hãy chạy lệnh fastboot flashing lock trên thiết bị. Các thiết bị dành cho bán lẻ phải được vận chuyển ở trạng thái khóa (với get_unlock_ability trả về 0 ) để đảm bảo rằng những kẻ tấn công không thể xâm phạm thiết bị bằng cách cài đặt hệ thống hoặc ảnh khởi động mới.

Đặt thuộc tính khóa/mở khóa

Thuộc tính ro.oem_unlock_supported phải được đặt tại thời điểm xây dựng dựa trên việc thiết bị có hỗ trợ mở khóa nhấp nháy hay không.

  • Nếu thiết bị hỗ trợ mở khóa nhấp nháy, hãy đặt ro.oem_unlock_supported thành 1 .
  • Nếu thiết bị không hỗ trợ mở khóa nhấp nháy, hãy đặt ro.oem_unlock_supported thành 0 .

Nếu thiết bị hỗ trợ mở khóa nhấp nháy thì bộ nạp khởi động sẽ cho biết trạng thái khóa bằng cách đặt biến dòng lệnh kernel androidboot.flash.locked thành 1 nếu bị khóa hoặc thành 0 nếu được mở khóa. Biến này phải được đặt trong bootconfig thay vì trong dòng lệnh kernel trong Android 12.

Đối với các thiết bị hỗ trợ dm-verity , hãy sử dụng ro.boot.verifiedbootstate để đặt giá trị của ro.boot.flash.locked thành 0 ; thao tác này sẽ mở khóa bộ nạp khởi động nếu trạng thái khởi động đã xác minh có màu cam.

Bảo vệ các phần quan trọng

Các thiết bị phải hỗ trợ khóa và mở khóa các phần quan trọng, được xác định là bất cứ điều gì cần thiết để khởi động thiết bị vào bộ nạp khởi động. Những phần như vậy có thể bao gồm cầu chì, phân vùng ảo cho trung tâm cảm biến, bộ tải khởi động giai đoạn đầu, v.v. Để khóa các phần quan trọng, bạn phải sử dụng cơ chế ngăn mã (hạt nhân, hình ảnh khôi phục, mã OTA, v.v.) đang chạy trên thiết bị cố tình sửa đổi bất kỳ phần quan trọng nào. OTA sẽ không cập nhật được các phần quan trọng nếu thiết bị ở trạng thái khóa quan trọng.

Việc chuyển từ trạng thái khóa sang trạng thái mở khóa cần có sự tương tác vật lý với thiết bị. Tương tác này tương tự như tác dụng của việc chạy lệnh mở khóa fastboot flashing unlock nhưng yêu cầu người dùng nhấn nút vật lý trên thiết bị. Thiết bị không được cho phép chuyển đổi theo chương trình từ lock critical sang unlock critical mà không có tương tác vật lý và thiết bị không được gửi ở trạng thái unlock critical .