डिफ़ॉल्ट रूप से, ज़्यादातर Android डिवाइसों में लॉक किया गया बूटलोडर होता है. इसका मतलब है कि उपयोगकर्ता, बूटलोडर या डिवाइस के पार्टीशन को फ़्लैश नहीं कर सकते. अगर ज़रूरत हो, तो आपके पास बूटलोडर को अनलॉक करने का विकल्प होता है. ऐसा तब किया जा सकता है, जब डिवाइस पर डेवलपर के लिए सेटिंग और टूल चालू हों. इससे नई इमेज फ़्लैश की जा सकती हैं.
बूटलोडर में जाना
fastboot कमांड देने के लिए, आपको बूटलोडर मोड में होना चाहिए. ऐसा करने का एक तरीका, adb कमांड adb reboot bootloader भेजना है. कुछ फ़ोन में, डिवाइस को बूट करते समय बटन के कॉम्बिनेशन (आम तौर पर, आवाज़ कम करने वाला बटन) को दबाकर, बूटलोडर में रीबूट करने की सुविधा भी होती है.
बूटलोडर को अनलॉक करना
बूटलोडर मोड में आने के बाद, बूटलोडर को अनलॉक करने और रीफ़्लैश किए जाने वाले पार्टीशन को चालू करने के लिए, डिवाइस पर fastboot flashing unlock कमांड चलाएं. इसे सेट करने के बाद, डिवाइस को रीबूट करने पर भी अनलॉक मोड बना रहता है.
डिवाइसों को fastboot flashing unlock निर्देश को तब तक अस्वीकार करना चाहिए, जब तक कि get_unlock_ability को 1 पर सेट न किया जाए. अगर इसे 0 पर सेट किया जाता है, तो उपयोगकर्ता को होम स्क्रीन पर बूट करना होगा. इसके बाद, सेटिंग > सिस्टम > डेवलपर के लिए सेटिंग और टूल मेन्यू खोलना होगा. इसके बाद, ओईएम से अनलॉक करने की सेटिंग को चालू करना होगा. इससे get_unlock_ability को 1 पर सेट किया जाता है. यह मोड, रीबूट करने और फ़ैक्ट्री डेटा रीसेट करने के बाद भी चालू रहता है.
fastboot flashing unlock कमांड भेजे जाने पर, डिवाइस को उपयोगकर्ताओं को यह सूचना देनी चाहिए कि उन्हें गैर-आधिकारिक इमेज से जुड़ी समस्याएं आ सकती हैं.
उपयोगकर्ता के चेतावनी स्वीकार करने के बाद, डिवाइस को फ़ैक्ट्री डेटा रीसेट करना चाहिए, ताकि डेटा को बिना अनुमति के ऐक्सेस न किया जा सके. बूटलोडर को डिवाइस रीसेट करना चाहिए, भले ही वह उसे ठीक से रीफ़ॉर्मैट न कर पाए. रीसेट करने के बाद ही, परसिस्टेंट फ़्लैग सेट किया जा सकता है, ताकि डिवाइस को फिर से फ़्लैश किया जा सके.
fastboot flashing unlock प्रोसेस के दौरान, ऐसी सभी रैम को रीसेट किया जाना चाहिए जिन्हें पहले से ओवरराइट नहीं किया गया है. इस तरीके से, ऐसे हमलों को रोका जा सकता है जो पिछले बूट से बचे हुए रैम कॉन्टेंट को पढ़ते हैं. इसी तरह, अनलॉक किए गए डिवाइसों को हर बूट पर रैम को खाली करना चाहिए. हालांकि, ऐसा तब तक करना चाहिए, जब तक इससे डिवाइस के चालू होने में ज़्यादा समय न लगे. साथ ही, उन्हें कर्नल के ramoops के लिए इस्तेमाल किए गए क्षेत्र को छोड़ देना चाहिए.
बूटलोडर को लॉक करना
बूटलोडर को लॉक करने और डिवाइस को रीसेट करने के लिए, डिवाइस पर fastboot flashing lock
कमांड चलाएं. खुदरा स्टोर में बेचे जाने वाले डिवाइसों को लॉक की गई स्थिति में शिप किया जाना चाहिए. साथ ही, get_unlock_ability वापस आने 0 की सुविधा चालू होनी चाहिए. इससे यह पक्का किया जा सकेगा कि हमलावर, नया सिस्टम या बूट इमेज इंस्टॉल करके डिवाइस को नुकसान न पहुंचा सकें.
लॉक और अनलॉक करने की प्रॉपर्टी सेट करना
ro.oem_unlock_supported प्रॉपर्टी को बिल्ड टाइम पर सेट किया जाना चाहिए. यह इस बात पर निर्भर करता है कि डिवाइस पर फ़्लैशिंग अनलॉक की सुविधा काम करती है या नहीं.
- अगर डिवाइस पर फ़्लैश करके अनलॉक करने की सुविधा काम करती है, तो
ro.oem_unlock_supportedको1पर सेट करें. - अगर डिवाइस पर फ़्लैशिंग अनलॉक करने की सुविधा काम नहीं करती है, तो
ro.oem_unlock_supportedको0पर सेट करें.
अगर डिवाइस पर फ़्लैश करके अनलॉक करने की सुविधा काम करती है, तो बूटलोडर को लॉक होने की स्थिति के बारे में बताना चाहिए. इसके लिए, कर्नल कमांड लाइन वैरिएबल androidboot.flash.locked को 1 पर सेट करें. अगर डिवाइस अनलॉक है, तो इसे 0 पर सेट करें. Android 12 में, इस वैरिएबल को कर्नेल कमांड लाइन में सेट करने के बजाय, बूटकॉन्फ़िग में सेट किया जाना चाहिए.
dm-verity की सुविधा वाले डिवाइसों के लिए, ro.boot.flash.locked की वैल्यू को 0 पर सेट करने के लिए ro.boot.verifiedbootstate का इस्तेमाल करें. इससे, अगर पुष्टि किए गए बूट की स्थिति नारंगी है, तो बूटलोडर अनलॉक हो जाता है.
अहम सेक्शन को सुरक्षित रखना
डिवाइसों में, ज़रूरी सेक्शन को लॉक और अनलॉक करने की सुविधा होनी चाहिए. ज़रूरी सेक्शन का मतलब है कि डिवाइस को बूटलोडर में बूट करने के लिए जो भी ज़रूरी हो. ऐसे सेक्शन में फ़्यूज़, सेंसर हब के लिए वर्चुअल पार्टीशन, पहले चरण का बूटलोडर वगैरह शामिल हो सकते हैं. ज़रूरी सेक्शन को लॉक करने के लिए, आपको ऐसे तरीके का इस्तेमाल करना होगा जो डिवाइस पर चल रहे कोड (कर्नेल, रिकवरी इमेज, ओटीए कोड वगैरह) को किसी भी ज़रूरी सेक्शन में जान-बूझकर बदलाव करने से रोकता हो. अगर डिवाइस की स्थिति गंभीर है, तो ओटीए को अहम सेक्शन अपडेट नहीं करने चाहिए.
डिवाइस को लॉक से अनलॉक करने के लिए, डिवाइस के साथ फ़िज़िकल इंटरैक्शन करना ज़रूरी है. यह इंटरैक्शन, fastboot flashing unlock कमांड चलाने के असर जैसा ही होता है. हालांकि, इसके लिए उपयोगकर्ता को डिवाइस पर मौजूद किसी बटन को दबाना पड़ता है. डिवाइसों में, प्रोग्राम के हिसाब से lock_critical से unlock_critical में ट्रांज़िशन करने की सुविधा नहीं होनी चाहिए. इसके लिए, डिवाइसों के साथ फ़िज़िकल इंटरैक्शन ज़रूरी है. साथ ही, डिवाइसों को unlock_critical मोड में शिप नहीं किया जाना चाहिए.