به طور پیشفرض، اکثر دستگاههای اندرویدی با بوتلودر قفلشده عرضه میشوند، به این معنی که کاربران نمیتوانند بوتلودر یا پارتیشنهای دستگاه را فلش کنند. در صورت نیاز، شما (و کاربران دستگاهی که گزینههای توسعهدهندگان را فعال کردهاند) میتوانید بوتلودر را برای فلش کردن فایلهای ایمیج جدید باز کنید.
وارد بوت لودر شوید
برای صدور دستورات fastboot ، باید در حالت بوتلودر باشید. یک راه برای انجام این کار ارسال دستور adb adb reboot bootloader است. برخی از تلفنها همچنین به شما امکان میدهند با فشار دادن یک کلید ترکیبی (معمولاً کاهش صدا) هنگام بوت شدن دستگاه، آن را مجدداً راهاندازی کنید.
بوت لودر را آنلاک کنید
پس از قرار گرفتن در حالت بوت لودر، برای باز کردن قفل بوت لودر و فعال کردن فلش کردن پارتیشنها، دستور fastboot flashing unlock روی دستگاه اجرا کنید. پس از تنظیم، حالت باز کردن قفل در طول راهاندازی مجددها ادامه مییابد.
دستگاهها باید دستور fastboot flashing unlock را رد کنند، مگر اینکه get_unlock_ability روی 1 تنظیم شده باشد. اگر روی 0 تنظیم شده باشد، کاربر باید به صفحه اصلی بوت شود، منوی تنظیمات > سیستم > گزینههای توسعهدهنده را باز کند و گزینه OEM unlocking را فعال کند (که get_unlock_ability را روی 1 تنظیم میکند). پس از تنظیم، این حالت در طول راهاندازی مجدد و بازنشانی به تنظیمات کارخانه ادامه مییابد.
وقتی دستور fastboot flashing unlock ارسال میشود، دستگاه باید به کاربران هشدار دهد که ممکن است با تصاویر غیررسمی با مشکل مواجه شوند. پس از اینکه کاربر هشدار را پذیرفت، دستگاه باید برای جلوگیری از دسترسی غیرمجاز به دادهها، تنظیمات کارخانه را بازنشانی کند. بوت لودر باید دستگاه را حتی اگر نتواند آن را به درستی فرمت کند، بازنشانی کند. تنها پس از بازنشانی میتوان پرچم پایدار را تنظیم کرد تا دستگاه دوباره فلش شود.
تمام رمهایی که قبلاً رونویسی نشدهاند باید در طول فرآیند fastboot flashing unlock ، ریست شوند. این اقدام از حملاتی که محتویات رم باقیمانده از بوت قبلی را میخوانند، جلوگیری میکند. به طور مشابه، دستگاههای باز شده باید رم را در هر بوت پاک کنند (مگر اینکه این کار تأخیر غیرقابل قبولی ایجاد کند)، اما باید ناحیهای را که برای ramoops هسته استفاده میشود، باقی بگذارند.
قفل کردن بوت لودر
برای قفل کردن بوت لودر و تنظیم مجدد دستگاه، دستور fastboot flashing lock روی دستگاه اجرا کنید. دستگاههایی که برای فروش در نظر گرفته شدهاند باید در حالت قفل شده (با مقدار 0 در get_unlock_ability ) ارسال شوند تا اطمینان حاصل شود که مهاجمان نمیتوانند با نصب یک سیستم یا تصویر بوت جدید، دستگاه را به خطر بیندازند.
تنظیم ویژگیهای قفل و باز کردن قفل
ویژگی ro.oem_unlock_supported باید در زمان ساخت و بر اساس اینکه آیا دستگاه از فلش کردن آنلاک پشتیبانی میکند یا خیر، تنظیم شود.
- اگر دستگاه از قفلگشایی فلش پشتیبانی میکند،
ro.oem_unlock_supportedروی1تنظیم کنید. - اگر دستگاه از قفلگشایی فلش پشتیبانی نمیکند،
ro.oem_unlock_supportedرا روی0تنظیم کنید.
اگر دستگاه از باز کردن قفل فلش پشتیبانی میکند، بوت لودر باید وضعیت قفل را با تنظیم متغیر خط فرمان هسته androidboot.flash.locked روی 1 در صورت قفل بودن یا روی 0 در صورت قفل نبودن نشان دهد. این متغیر باید در bootconfig به جای خط فرمان هسته در اندروید ۱۲ تنظیم شود.
برای دستگاههایی که از dm-verity پشتیبانی میکنند، ro.boot.verifiedbootstate برای تنظیم مقدار ro.boot.flash.locked روی 0 استفاده کنید؛ این کار در صورتی که وضعیت بوت تأیید شده نارنجی باشد، بوت لودر را آنلاک میکند.
محافظت از بخشهای بحرانی
دستگاهها باید از قفل کردن و باز کردن قفل بخشهای بحرانی پشتیبانی کنند، که به عنوان هر آنچه برای بوت شدن دستگاه به بوت لودر لازم است تعریف میشوند. چنین بخشهایی ممکن است شامل فیوزها، پارتیشنهای مجازی برای یک هاب حسگر، بوت لودر مرحله اول و موارد دیگر باشد. برای قفل کردن بخشهای بحرانی، باید از مکانیزمی استفاده کنید که از تغییر عمدی هر بخش بحرانی توسط کد (هسته، تصویر بازیابی، کد OTA و غیره) که روی دستگاه اجرا میشود، جلوگیری کند. اگر دستگاه در حالت قفل بحرانی باشد، OTAها نباید بخشهای بحرانی را بهروزرسانی کنند.
انتقال از حالت قفل به حالت قفل نشده باید نیاز به تعامل فیزیکی با دستگاه داشته باشد. این تعامل مشابه اثرات اجرای دستور fastboot flashing unlock است، اما مستلزم آن است که کاربر یک دکمه فیزیکی روی دستگاه فشار دهد. دستگاهها نباید اجازه دهند که بدون تعامل فیزیکی، از طریق برنامهنویسی از lock_critical به unlock_critical منتقل شوند و دستگاهها نباید در حالت unlock_critical عرضه شوند.