बूटलोडर को लॉक और अनलॉक करना

ज़्यादातर 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 में, kernel कमांड लाइन के बजाय bootconfig में सेट करना होगा.

dm-verity की सुविधा वाले डिवाइसों के लिए, ro.boot.flash.locked की वैल्यू को 0 पर सेट करने के लिए ro.boot.verifiedbootstate का इस्तेमाल करें. इससे, वेरिफ़ाइड बूट की स्थिति के ऑरेंज होने पर, बूटलोडर अनलॉक हो जाता है.

अहम सेक्शन को सुरक्षित करना

डिवाइसों में, अहम सेक्शन को लॉक और अनलॉक करने की सुविधा होनी चाहिए. अहम सेक्शन को डिवाइस को बूटलोडर में बूट करने के लिए ज़रूरी चीज़ों के तौर पर परिभाषित किया गया है. ऐसे सेक्शन में फ़्यूज़, सेंसर हब के लिए वर्चुअल पार्टीशन, पहले चरण का बूटलोडर वगैरह शामिल हो सकते हैं. अहम सेक्शन को लॉक करने के लिए, आपको किसी ऐसे तरीके का इस्तेमाल करना होगा जिससे डिवाइस पर चल रहे कोड (कर्नल, रिकवरी इमेज, ओटीए कोड वगैरह) को किसी अहम सेक्शन में जान-बूझकर बदलाव करने से रोका जा सके. अगर डिवाइस लॉक की गंभीर स्थिति में है, तो ओटीए से ज़रूरी सेक्शन अपडेट नहीं होने चाहिए.

डिवाइस को लॉक से अनलॉक करने के लिए, डिवाइस को मैन्युअल तरीके से इस्तेमाल करना ज़रूरी है. यह इंटरैक्शन, fastboot flashing unlock कमांड को चलाने के असर जैसा ही है. हालांकि, इसके लिए उपयोगकर्ता को डिवाइस पर मौजूद किसी बटन को दबाना होगा. डिवाइसों को प्रोग्राम के ज़रिए, lock critical से unlock critical पर जाने की अनुमति नहीं मिलनी चाहिए. ऐसा करने के लिए, डिवाइस को मैन्युअल तरीके से इस्तेमाल करना ज़रूरी है. साथ ही, डिवाइसों को unlock critical स्टेटस में शिप नहीं किया जाना चाहिए.