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 xuất xưởng với trình tải khởi động bị khoá, nghĩa là người dùng không thể cài đặt ROM cho 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 cho hình ảnh mới.

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

Để đưa ra các 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 tổ hợp phím (thường là giảm âm lượng) trong khi khởi động thiết bị.

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

Sau khi ở chế độ trình tải khởi động, để mở khoá trình tải khởi động và cho phép cài đặt ROM cho các phân vùng, hãy chạy lệnh fastboot flashing unlock trên thiết bị. Sau khi thiết lập, chế độ mở khoá sẽ duy trì trên các lần khởi động lại.

Thiết bị sẽ 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 rồi bật tuỳ chọn Mở khoá OEM (tuỳ chọn này sẽ đặt get_unlock_ability thành 1). Sau khi thiết lập, chế độ này sẽ duy trì trên 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 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 việc 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 cài đặt ROM.

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 RAM còn sót lại từ lần khởi động trước. Tương tự, các thiết bị đã mở khoá sẽ 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 sẽ để lại vùng được dùng cho ramoops của nhân hệ điều hành.

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ẻ sẽ được vận chuyển ở trạng thái bị khoá (với get_unlock_ability trả về 0) để đảm bảo rằ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 hình ảnh khởi động mới.

Thiết lập các thuộc tính khoá và mở khoá

Thuộc tính ro.oem_unlock_supported sẽ được thiết lập tại thời gian xây dựng dựa trên việc thiết bị có hỗ trợ mở khoá cài đặt ROM hay không.

  • Nếu thiết bị hỗ trợ mở khoá cài đặt ROM, hãy đặt ro.oem_unlock_supported thành 1.
  • Nếu thiết bị không hỗ trợ mở khoá cài đặt ROM, hãy đặt ro.oem_unlock_supported thành 0.

Nếu thiết bị hỗ trợ mở khoá cài đặt ROM, 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 nhân hệ điều hành androidboot.flash.locked thành 1 nếu bị khoá hoặc thành 0 nếu được mở khoá. Biến này phải được thiết lập 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 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 khởi động đã xác minh là màu cam.

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

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

Việc chuyển từ trạng thái bị khoá sang trạng thái được mở khoá sẽ yêu cầu tương tác vật lý với thiết bị. Tương tác này tương tự như tác động của việc 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ị. 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ần tương tác vật lý và thiết bị không được xuất xưởng ở trạng thái unlock_critical.