डिफ़ॉल्ट रूप से, ज़्यादातर Android डिवाइसों में लॉक किया गया बूटलोडर होता है. इसका मतलब है कि उपयोगकर्ता, बूटलोडर या डिवाइस के पार्टिशन को फ़्लैश नहीं कर सकते. ज़रूरत पड़ने पर, बूटलोडर को अनलॉक किया जा सकता है. ऐसा करने से, नई इमेज फ़्लैश की जा सकती हैं. आपके पास और उन डिवाइस उपयोगकर्ताओं के पास बूटलोडर को अनलॉक करने का विकल्प होता है जिन्होंने डेवलपर के लिए सेटिंग और टूल चालू किए हैं.
बूटलोडर में जाना
fastboot
कमांड देने के लिए, आपको बूटलोडर मोड में होना चाहिए. ऐसा करने का एक तरीका, adb कमांड adb reboot bootloader
भेजना है. कुछ फ़ोन में, डिवाइस को बूट करते समय बटन के कॉम्बिनेशन (आम तौर पर, आवाज़ कम करने वाला बटन) को दबाकर, बूटलोडर में रीबूट करने की सुविधा भी होती है.
बूटलोडर को अनलॉक करना
बूटलोडर मोड में आने के बाद, बूटलोडर को अनलॉक करने और रीफ़्लैश किए जाने वाले पार्टीशन को चालू करने के लिए, डिवाइस पर fastboot flashing unlock
कमांड चलाएं. इसे सेट करने के बाद, डिवाइस को रीबूट करने पर भी अनलॉक मोड बना रहता है.
डिवाइसों को fastboot flashing unlock
कमांड को अस्वीकार करना चाहिए, जब तक कि get_unlock_ability
को 1
पर सेट न किया गया हो. अगर इसे 0
पर सेट किया जाता है, तो उपयोगकर्ता को होम स्क्रीन पर बूट करना होगा. इसके बाद, सेटिंग > सिस्टम > डेवलपर के लिए सेटिंग और टूल मेन्यू खोलना होगा. इसके बाद, OEM अनलॉक करें विकल्प को चालू करना होगा. इससे 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
मोड में शिप नहीं किया जाना चाहिए.