Khoá và mở khoá trình tải khởi động

Theo mặc định, hầu hết các thiết bị Android đều có trình tải khởi động bị khoá, tức là người dùng không thể chạy trình tải 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 Tuỳ chọn cho nhà phát triển) có thể mở khoá trình tải khởi động để cài đặt ROM bằng hình ảnh mới.

Chuyển sang trình tải khởi động

Để phát lệnh fastboot, bạn phải ở chế độ trình tải khởi động. 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 trình tải khởi động bằng cách nhấn một tổ hợp phím (thường là nút giảm âm lượng) trong khi khởi động thiết bị.

Mở khoá trình tải khởi động

Sau khi chuyển sang chế độ trình tải khởi động, để mở khoá trình tải khởi động và cho phép phân vùng được flash lại, hãy chạy lệnh fastboot flashing unlock trên thiết bị. Sau khi bạn thiết lập, chế độ mở khoá sẽ vẫn được giữ nguyên khi bạn khởi động lại.

Các thiết bị phải từ chối lệnh fastboot flashing unlock, trừ phi 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ở trình đơn Cài đặt > Hệ thống > Tuỳ chọn cho nhà phát triển và bật lựa chọn Mở khoá OEM (lựa chọn này sẽ đặt get_unlock_ability thành 1). Sau khi thiết lập, chế độ này sẽ duy trì trong các lần khởi động lại và đặt lại dữ liệu về trạng thái 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 họ rằng họ có thể gặp phải vấn đề 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ẽ đặt lại dữ liệu về trạng thái ban đầu để ngăn chặn hành vi truy cập dữ liệu trái phép. Trình tải khởi động sẽ đặt lại thiết bị ngay cả khi không thể định dạng lại thiết bị đúng cách. Chỉ sau khi đặt lại, cờ liên tục mới có thể được đặt để thiết bị có thể được nạp lại.

Tất cả RAM chưa bị ghi đè sẽ đượ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 còn sót lại trong RAM từ lần khởi động trước. Tương tự, các thiết bị đã mở khoá phải xoá RAM ở mỗi lần khởi động (trừ phi việc này gây ra độ trễ không chấp nhận được), nhưng phải giữ nguyên vùng được dùng cho ramoops của nhân.

Khoá trình tải khởi động

Để khoá trình tải khởi động và đặt lại 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 khoá (với get_unlock_ability trả về 0) để đảm bảo rằng kẻ tấn công không thể xâm nhập thiết bị bằng cách cài đặt một hệ thống hoặc hình ảnh khởi động mới.

Đặt các thuộc tính khoá và mở khoá

Bạn nên đặt thuộc tính ro.oem_unlock_supported tại thời điểm tạo bản dựng dựa trên việc thiết bị có hỗ trợ tính năng mở khoá khi cài đặt ROM hay không.

  • Nếu thiết bị hỗ trợ tính năng mở khoá bằng cách nhấp nháy, hãy đặt ro.oem_unlock_supported thành 1.
  • Nếu thiết bị không hỗ trợ tính năng mở khoá bằng cách nhấp nháy, hãy đặt ro.oem_unlock_supported thành 0.

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

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

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

Thiết bị phải hỗ trợ việc khoá và mở khoá các phần quan trọng, được xác định là mọi thứ cần thiết để khởi động thiết bị vào trình tải khởi động. Các phân vùng như vậy có thể bao gồm cầu chì, phân vùng ảo cho một trung tâm cảm biến, trình tải khởi động giai đoạn đầu và nhiều phân vùng khác. Để khoá các phần quan trọng, bạn phải sử dụng một cơ chế ngăn mã (nhân hệ điều hành, hình ảnh khôi phục, mã OTA, v.v.) đang chạy trên thiết bị sửa đổi cố ý 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ị đang ở trạng thái khoá quan trọng.

Để chuyển từ trạng thái khoá sang trạng thái mở khoá, bạn phải tương tác thực tế với thiết bị. Tương tác này tương tự như hiệu ứng khi chạy lệnh fastboot flashing unlock nhưng yêu cầu người dùng nhấn một nút vật lý trên thiết bị. Các thiết bị không được phép chuyển đổi theo chương trình từ lock critical sang unlock critical mà không có tương tác thực tế và các thiết bị không được vận chuyển ở trạng thái unlock critical.