
प्रूफ-ऑफ-कॉन्सेप्ट और राइटअप जो दिखाता है कि iOS ऐप की कस्टम base64 एन्कोडिंग को रिवर्स करके D-Link Komfy स्मार्ट स्विच से BLE के माध्यम से Wi-Fi SSID/पासवर्ड कैसे प्राप्त करें।
परिचय
यह लेख D-Link के Komfy Switch with Camera पर मेरी खोज का विवरण देगा, जिसमें ब्लूटूथ 4.0 (BLE) के माध्यम से डिवाइस से जुड़े wifi ssid और पासवर्ड को प्राप्त किया गया। Komfy switch एक होम सुरक्षा और स्वचालन उत्पाद है जो आपके घर के वॉल स्विच की जगह ले सकता है, और वीडियो निगरानी, तापमान, आर्द्रता स्तर, वायु गुणवत्ता की निगरानी, और लाइट स्विच के रिमोट कंट्रोल की सुविधा प्रदान करता है।
ब्लूटूथ BLE प्रोफाइलिंग
आगे जाँच करने का निर्णय लेने से पहले, LightBlue iOS ऐप के साथ BLE डिवाइस की कुछ त्वरित प्रोफाइलिंग की गई। इस समय, Komfy डिवाइस ऑनलाइन था और सामान्य उपयोग मामले की सेटिंग्स के साथ कॉन्फ़िगर किया गया था। LightBlue के साथ Komfy से कनेक्ट करने पर, मैंने एक गैर-मानक GATT सेवा देखी जिसमें आठ कस्टम कैरेक्टरिस्टिक्स (या फ़ंक्शन) प्रकट हो रहे थे। ऐसे कुछ कैरेक्टरिस्टिक्स असामान्य मात्रा में डेटा प्राप्त कर रहे थे, यह देखते हुए कि BLE विनिर्देश के अनुसार 20 बाइट्स अधिकतम है। यदि परिधीय (peripheral) और मास्टर दोनों डिवाइस इसका समर्थन करते हैं, तो एक उच्च MTU पर बातचीत की जा सकती है, जिसे आमतौर पर "लंबा" (long) रीड या राइट कहा जाता है। नीचे दिए गए पहले स्क्रीनशॉट GATT सेवाओं और कैरेक्टरिस्टिक्स (0xB002 से 0xB00A तक) दिखाते हैं। अगले दो स्क्रीनशॉट उन दो कैरेक्टरिस्टिक्स को दिखाते हैं जिन पर यह लेख केंद्रित है (0xB006 और 0xB007)। 0xB006 और 0xB007 कैरेक्टरिस्टिक ने Wifi SSID और एक स्ट्रिंग प्रदर्शित की जो ascii में डिकोड करने पर base64 एन्कोडेड स्ट्रिंग जैसी दिख रही थी। हालाँकि, स्ट्रिंग को base64 डिकोड करने से कोई पठनीय डेटा प्रकट नहीं हुआ, जैसा कि अंतिम स्क्रीनशॉट में दिखाया गया है।
Komfy ऐप: मेथड कॉल्स का ट्रेसिंग
Komfy डिवाइस द्वारा लागू GATT कैरेक्टरिस्टिक्स को बेहतर ढंग से समझने के लिए, मैंने class-dump-z का उपयोग करके Komfy iOS ऐप के मेथड्स को डंप किया और रुचि के मेथड्स के लिए मेथड ट्रेसिंग सेट की। पूरा क्लास डंप यहाँ देखा जा सकता है। मुझे विशेष रूप से BLEDevice क्लास और ब्लूटूथ को संदर्भित करने वाले अन्य मेथड्स में रुचि थी। मेथड ट्रेसिंग को Prateek द्वारा विस्तृत Logify.pl पर्ल स्क्रिप्ट का उपयोग करके सेट किया जा सकता है, जैसा कि यहाँ बताया गया है।
उपरोक्त स्क्रीनशॉट Komfy की नई इंस्टॉल और कॉन्फ़िगरेशन के दौरान मेथड ट्रेस आउटपुट दिखाता है। क्लियरटेक्स्ट में Wifi पासवर्ड "chipotlemakesmehappy" पर ध्यान दें, और फिर वही base64 जैसी दिखने वाली स्ट्रिंग जो LightBlue ऐप ने पहले देखी गई 0xB007 GATT कैरेक्टरिस्टिक से प्राप्त की थी। ट्रेस वास्तव में +[Base64 encode:] मेथड के कॉल को दिखाता है, जिसने शुरू में भ्रम पैदा किया क्योंकि इसे मानक लाइब्रेरी का उपयोग करके base64 डिकोड नहीं किया जा सका। यह लगभग निर्धारित कर लिया गया था कि base64 डिकोड किया गया मान एन्क्रिप्टेड था या आगे एन्कोड किया गया था, जब तक यह समझ में नहीं आया कि +[Base64 encode:] एक निजी रूप से लागू किया गया मेथड था (NSData क्लास से नहीं)। इस अजीब एन्कोडिंग से निपटना आवश्यक था।
Hopper के साथ डिसअसेंबली
अब D-Link द्वारा लागू "base64" एन्कोडिंग योजना के रिवर्स इंजीनियरिंग की ओर (अंतिम परिणाम को देखते हुए "रिवर्स इंजीनियरिंग" इसे वास्तव में जितना कठिन था, उससे कहीं अधिक कठिन लगता है)। Hopper में Komfy ऐप लोड करना और -[BLEDevice getWifiPassword:] तथा +[Base64 decode:] मेथड्स का विश्लेषण करना स्पष्ट शुरुआती बिंदु थे। -[BLEDevice getWifiPassword:] के विश्लेषण ने पुष्टि की कि 0xB007 GATT कैरेक्टरिस्टिक वास्तव में Wifi पासवर्ड प्राप्त कर रही थी।
+[Base64 decode:] की ARM असेंबली से गुजरते हुए यह मानक NSData क्लास इम्प्लीमेंटेशन के काफी समान लग रहा था, इसलिए मैंने +[Base64 encode:] को स्कैन करने के लिए वहाँ से हटकर देखा। Hopper ने तुरंत मुझे उत्तर की ओर संकेत दिया। एक स्ट्रिंग कॉन्स्टेंट एक असेंबली निर्देश के पास मुद्रित था जिसमें मानक base64 वर्णमाला के सभी अक्षर शामिल थे, लेकिन पूरी तरह से गड़बड़ क्रम में। मूल सीज़र साइफर से अधिक कठिन न होने वाले किसी तुच्छ प्रतिस्थापन के बारे में न सोचने पर थोड़ी शर्मिंदगी हुई, फिर भी मैंने base64 वर्णों को सही क्रम में लाने के लिए एक स्क्रिप्ट लिखी और वोइला! स्क्रीन पर "chipotlemakesmehappy" छप गया।
तो अनिवार्य रूप से, स्ट्रिंग को सही क्रम में लाने (unscramble) और base64 डिकोड करने का तरीका यह है:

पूरा autopwn स्क्रिप्ट यहाँ।
और, हाँ, Chipotle वास्तव में मुझे खुश करता है।
Ubertooth BLE कैप्चर को यहाँ डाउनलोड किया जा सकता है।