- दो cybersecurity छात्रों ने मज़े और तकनीकी चुनौती के लिए वॉशिंग मशीन हैक करने की कोशिश की
- वॉशिंग मशीन के मोबाइल ऐप का reverse engineering करके API और encryption method का अध्ययन किया
- XOR encryption key खोजकर वॉशिंग मशीन के status data को real time में पढ़ने और decrypt करने का तरीका बनाया
- Discord webhook का इस्तेमाल करके वॉशिंग मशीन की running status और completion alerts को automate करने वाला notification bot बनाया
- आगे चलकर ऐसे ही दूसरे "बेवकूफ़" घरेलू उपकरणों पर भी इसी तरह की smart home automation लागू करने की योजना है
परिचय
- लेखक ने नए घर में शिफ्ट होने के बाद अपने दोस्त के साथ वॉशिंग मशीन हैक प्रोजेक्ट किया
- इसका उद्देश्य सिर्फ उपयोगिता नहीं, बल्कि मज़ा और तकनीकी चुनौती भी था
- वॉशिंग मशीन और दूसरे उपकरणों को smart home system से जोड़ने की जिज्ञासा से इसकी शुरुआत हुई
- खुद हैक करके मिला अनुभव व्यावहारिक reverse engineering अभ्यास में भी मददगार रहा
पृष्ठभूमि
- घर में पहले से Wi-Fi सपोर्ट वाली smart वॉशिंग मशीन लगी हुई थी
- इस वॉशिंग मशीन में मोबाइल ऐप के जरिए progress notifications मिल सकते थे
- एक समय में सिर्फ एक व्यक्ति ही ऐप से कनेक्ट हो सकता था, इसलिए साझा इस्तेमाल असुविधाजनक था
- इस समस्या को अवसर मानते हुए, ऐप की सीमाओं के बिना कई लोगों तक status notifications पहुँचाने का फैसला किया गया
डोरबेल का उदाहरण
- घर की डोरबेल 433MHz wireless signal से अलर्ट भेजने वाला सिस्टम थी
- लेखक के दोस्त ने डोरबेल सिग्नल detect करके Discord server पर notification भेजने वाला सिस्टम बनाया
- यह असली डोरबेल की आवाज़ के साथ-साथ backup notification के रूप में भी काम आता था
- इसी सफलता को देखकर वॉशिंग मशीन में भी वही तरीका अपनाकर automated notifications जोड़ने की कोशिश की गई
योजना और तैयारी
- लेखक ने मोबाइल ऐप का reverse engineering करके API के व्यवहार को समझने का निर्णय लिया
- smart वॉशिंग मशीन से सीधे network traffic capture करने के लिए OpenWRT router का उपयोग किया गया
- वॉशिंग मशीन को एक अस्थायी Wi-Fi से जोड़कर packet capture के जरिए communication patterns समझने की कोशिश की गई
वॉशिंग मशीन ट्रैफ़िक विश्लेषण
- वॉशिंग मशीन अपने IP, 255.255.255.255 (broadcast), external servers (HTTP API, encrypted traffic), और ऐप के साथ direct HTTP communication (port 80) सहित कई रास्तों से traffic भेजती और प्राप्त करती थी
- खास तौर पर मोबाइल ऐप के साथ direct communication वाले हिस्से पर ध्यान दिया गया और उसी का गहराई से विश्लेषण किया गया
वॉशिंग मशीन API reverse engineering
- ऐप बार-बार /http-read.json?encrypted=1 (status read) और /http-write.json?encrypted=1 (command send) इन दो endpoints का उपयोग करती थी
- मुख्य रुचि read endpoint में थी, लेकिन response data encrypted (HEX, HTML type) था
- query parameter
encrypted=0 देने पर भी decryption विफल हो जाती थी या सिर्फ 400 error मिलता था
encryption विश्लेषण और key प्राप्त करना
- यह मानकर कि encryption शायद साधारण XOR-आधारित है, CyberChef जैसे online tools से brute-force कोशिश की गई
- reference project (CandySimplyFi-tool) में key extraction पहले से सफल करने वाला code मिला, जिसका उपयोग करके कुछ ही सेकंड में key restore और data decrypt कर लिया गया
- data schema को और समझने के लिए ofalvai/home-assistant-candy open source code का भी संदर्भ लिया गया
वॉशिंग मशीन status values पर प्रयोग
- वॉशिंग मशीन के विभिन्न physical controls (program change, temperature और speed adjustment, run/stop/end) के दौरान data में होने वाले बदलावों को देखा गया
- status values के मुख्य fields:
- Pr: program selection knob की स्थिति
- PrPh: चल रहा wash cycle
- Temp: set temperature
- SpinSp: set spin speed
- RemTime: बचा हुआ समय (मिनटों में, कभी-कभी 10 मिनट पर स्थिर रहने की स्थिति भी)
- कमी यह रही कि कुछ values (जैसे SpinSp) वास्तविक value से अलग हो सकती हैं
notification automation script का विकास
- वॉशिंग मशीन API schema, encryption key, data read और decrypt करना, तथा status detect करना—इन सबका implementation पूरा किया गया
- Discord webhook आधारित notification bot script बनाई गई
- मुख्य workflow:
- वॉशिंग मशीन को poll करना
- अगर status change न हो तो sleep के बाद दोहराना
- change detect होने पर आखिरी message update करना या नया message भेजना
- दोहराना
समापन और आगे की योजना
- डोरबेल और वॉशिंग मशीन notification automation पहले ही सफलतापूर्वक लागू कर ली गई
- आगे dishwasher, dryer, TV आदि पर भी इसी तरह की automation (smart plug, vibration sensor, IR blaster) लागू करने की योजना है
- webcam का उपयोग करके एक सरल security system पर भी प्रयोग करने का इरादा है
निष्कर्ष
- इस प्रोजेक्ट के अनुभव से व्यावहारिक IoT reverse engineering और बुनियादी smart home hacking की समझ मिली
- यह एक ऐसा उदाहरण था जिसमें उपयोगिता और मज़ा दोनों का अनुभव हुआ
1 टिप्पणियां
Hacker News की राय
पहले ही साफ कर दूँ, यह मूल लेख की आलोचना नहीं है; मुझे सच में लगा कि इसमें डिवाइस के विश्लेषण की प्रक्रिया बहुत शानदार तरीके से दिखाई गई है
अगर डिवाइस Android app से communicate करता है, तो मैं apk-mitm की सिफारिश करूँगा
यह टूल apk से लगभग सभी ज्ञात certificate pinning हटा देता है, और manifest को फिर से लिख देता है ताकि local certificate को rooting के बिना भी इस्तेमाल किया जा सके
अगर आप original app को uninstall करके apk-mitm का बना output sideload करें, तो सामान्य stock device पर mitmproxy इस्तेमाल किया जा सकता है
एक और अहम बात यह है कि अगर app को encrypted data भेजा जाता है और app उसे decrypt करके दिखाता है, तो key या तो app के अंदर कहीं होगी या कहीं से लाई जा रही होगी
अगर jadx से apk का विश्लेषण करें, तो उसे लगभग Java code के रूप में देखा जा सकता है, इसलिए कई बार key भी मिल जाती है
हाँ, कुछ निर्माता encryption processing को native code में ले जाते हैं, ऐसे में फिर Ghidra वगैरह से reverse engineering करनी पड़ती है
यह प्रक्रिया बहुत उबाऊ भी हो सकती है और बहुत मज़ेदार भी
मुझे लगता है कि लेखक ने भले ही दूसरों के पहले के research results पर काम किया हो, लेकिन अगर कोई काम अभी तक किसी ने न किया हो तब भी हार नहीं माननी चाहिए; उसे करने की पूरी कोशिश करनी चाहिए
आख़िर में, अपने ही डिवाइस के behavior को समझते हुए बहुत कुछ सीखने को मिलता है
आख़िरकार एक समय server access block हो गया, और मुझे संयोग से certificate pinning के बारे में पता चला, तो मैंने इस repo को आज़माया; इसने बेहद साफ़-सुथरे तरीके से समस्या हल कर दी
शायद पुराने ad URL की वजह से ads भी दिखने बंद हो गए
developer company वैसे भी app को धीरे-धीरे खराब ही करती जा रही थी, इसलिए कोई अफ़सोस नहीं
मैं एक Bosch washing machine का इस्तेमाल करके (मूल लेख से अलग तरीके से) घर के दूसरे छोर पर रखी मशीन की प्रगति monitor करता हूँ
Bosch API की मदद से पता चल जाता है कि washing cycle खत्म हुआ या नहीं, और दरवाज़ा खुला है या नहीं
अभी मैं default API version इस्तेमाल कर रहा हूँ, लेकिन PoC पूरा हो गया है, इसलिए आगे local hosting option पर जाने की योजना है
अगर Home Assistant बताए कि cycle खत्म हो गई लेकिन दरवाज़ा नहीं खुला, तो उसका मतलब है कि अंदर अभी भी गीले कपड़े पड़े हैं
इसलिए मैंने ऐसा सेटअप बनाया है कि हर 15 मिनट में मेरे फ़ोन पर, और जब मेरी पत्नी घर पर हों तभी उनके फ़ोन पर, laundry notification जाए
बहुत simple है और पूरी तरह काम करता है
मेरी washing machine पुरानी 90s model है, इसलिए वह timer dial के हिसाब से चलती है
उसमें कोई computer या sensor नहीं है, बस पानी भरने वाले चरण का अतिरिक्त पता चल जाता है
मैं हमेशा 40 मिनट का timer सेट करता हूँ और काम हो जाता है, ऊपर से alarm off करने का भी फ़ंक्शन है, इसलिए इससे ज़्यादा simple कुछ नहीं हो सकता
मैं भी कुछ ऐसा ही एक छोटे oven पर लागू करने की योजना बना रहा हूँ
उसमें कोई API या connectivity नहीं है, लेकिन उसे smart plug में लगाकर power usage मापूँगा ताकि idle state / running state monitor करके notification मिल सके
मैं अक्सर सोने से पहले washing machine चलाता हूँ और उसे अगले दिन के लिए छोड़ देता हूँ; मेरी मशीन में “extended tumble” जैसा फीचर है जो कपड़ों को रात भर fresh बनाए रखता है
इसमें थोड़ा ज़्यादा पानी लगता है, लेकिन यह मेरी शाम की routine बचा लेता है, और रात के समय बिजली इस्तेमाल करने में भी मदद करता है
मुझे अपना Electrolux बहुत पसंद है; शायद दूसरी कंपनियों में भी ऐसा फीचर होगा
मैं 15 साल से ज़्यादा समय से G-Shock 5600 घड़ी को washing machine timer notification के लिए इस्तेमाल कर रहा हूँ
जब wash शुरू करता हूँ, तो कुल समय घड़ी के timer में सेट कर देता हूँ, और खत्म होने पर वह beep करके बता देती है
API हो या न हो, brand कोई भी हो, यह काम करता है
यह सच में बहुत elegant solution है
logic simple है, लेकिन real-life improvement पक्का है
मैं fridge hardware hacking कर रहा हूँ
software नहीं, बल्कि एक महँगा campervan fridge है जो gas/12v/220v support करता है
उसके electronic control section में आग लग गई थी, जिससे cables और अंदरूनी हिस्सा खराब हो गया, लेकिन fridge खुद ठीक है
इसलिए चूँकि सारे parts बदलने ही हैं, तो 250 डॉलर देकर नया control board खरीदने के बजाय मैं पुराने gas boiler parts जोड़कर नया system बनाना चाहता हूँ
boiler motherboard में ignition hardware पहले से है, इसलिए अगर logic और safety ठीक से बना लूँ तो शायद इसे gas operating mode में चलाया जा सकता है
इससे नया fridge नहीं खरीदना पड़ेगा, और अपने 9 साल के बेटे को electronics सिखाने के लिए भी यह अच्छा project है
बेशक gas होने की वजह से यह ख़तरनाक हो सकता है, लेकिन आख़िर में यह हमेशा मज़ेदार रहता है, और hacking पूरी हो जाने के बाद आलोचना भी कम हो जाती है
अगर लोगों को प्रगति में दिलचस्पी हो, तो मैं इस पर पूरा post भी लिख सकता हूँ
मैं washing machine/dryer पर Zigbee vibration sensor लगाकर उसे Home Assistant से जोड़कर इस्तेमाल करता हूँ
smart socket के current/voltage monitoring वाले तरीके के बारे में मैंने नहीं सोचा था, लेकिन यह अच्छा idea लगा
simple trigger conditions से wash शुरू/खत्म होने पर dashboard update और email notification तक अपने-आप हो जाता है
app और Bluetooth फीचर भी हैं, लेकिन app मेरे फ़ोन के camera, audio और contacts की access माँगता है, इसलिए मैं उसे इस्तेमाल नहीं करना चाहता
लगता है कि HA integration से जुड़ा काम नीचे दिए गए लिंक में भी चल रहा था
https://github.com/home-assistant-HomeWhiz/home-assistant-HomeWhiz/blob/main/README.md
मुझे लगता है, इस तरह की पोस्ट ही Hacker News का असली सार है
काश ऐसी पोस्ट और बढ़ें जो असली hacking (शौकिया modification) दिखाएँ; आजकल तो बस AI/LLM की बातें ही ज़्यादा दिखाई देती हैं
अगर आपको इस तरह की hardware hacking पसंद है, तो https://hackaday.com/ भी ज़रूर देखिए
unrooted Android पर personal certificate install करना थोड़ा झंझट वाला होता है
उसे सिर्फ system certificate store में ही जोड़ा जा सकता है, और आम तौर पर इसके लिए Magisk module चाहिए होता है
ज़्यादा आसान तरीका यह है कि PC पर पुराना Android emulator चलाकर उसमें certificate डालें और traffic को Burpsuite या mitmproxy की तरफ़ forward कर दें
device बदलने की भी ज़रूरत नहीं
APKLab या Jadx से app code का विश्लेषण करें, तो शायद key derivation algorithm जैसी चीज़ें मिल जाएँ
मुझे यह जानने की उत्सुकता है कि क्या app और washing machine केवल तब ही काम करते हैं जब दोनों एक ही network पर हों; वह हिस्सा मुझे पसंद आया
“3 घंटे वाला” (असल में 4–5 घंटे) wash cycle सुनकर मैं हैरान हुआ
मेरी washing machine में सामान्य eco mode 30 मिनट से भी कम लेता है, और खत्म होने पर बहुत तेज़ आवाज़ में alert देती है
short cycle और alert के इस combination की वजह से किसी अलग जटिल technical solution की ज़रूरत नहीं पड़ती
शायद comment करने वाला अमेरिका में होगा
यूरोप की washing machines कम पानी/बिजली उपयोग की ज़रूरतों की वजह से ज़्यादा समय लेती हैं
उस पोस्ट में दिखा device शायद washer+dryer combo है, इसलिए और समय लगता होगा
हमारे घर में सामान्य mode भी 104 मिनट लेता है, और overload होने पर 3 घंटे तक जा सकता है
लंबे cycle में enzyme detergents और active oxygen bleach components का इस्तेमाल होने पर microbes को हटाना ज़्यादा भरोसेमंद होता है
30 मिनट का course तो बस कपड़ों को “rinse” करने जैसा है
https://pubmed.ncbi.nlm.nih.gov/25207988/
मेरा dryer ductless model है (और यह लगभग एक शिकायत है), इसलिए उसे 3 घंटे लगते हैं
washing से drying तक पूरे 4.5 घंटे लग जाते हैं
यह मेरे इस्तेमाल किए हुए appliances में सबसे निराशाजनक है
कभी-कभी तो यह ठीक से सुखाता भी नहीं
किसी ने कहा कि उन्हें इसमें encryption दिखाई नहीं दे रहा
उन्होंने पहले screenshot (cyberchef.avif) के input window में मौजूद data को साधारण unencrypted hex ASCII बताया
उदाहरण के तौर पर 7D को {, 0D0A को CRLF, 09 को TAB, 22 को " के रूप में समझाया
यानी यह decoded plaintext है, इसलिए XOR encryption जैसी व्याख्या उन्हें सही नहीं लगी
उन्होंने यह भी कहा कि screenshot में दिखी key value byte boundary और alignment से मेल नहीं खाती, और actual input gap से भी match नहीं करती
इसलिए उन्हें शक हुआ कि screenshot कहीं छेड़ा गया है या edit किया गया है
उन्होंने पूछा कि इसकी वजह क्या है, और यहाँ असल में क्या हो रहा है
किसी ने बताया कि “For now, I plugged this key into CyberChef, and was able to decrypt the data.” वाली image link टूटी हुई है
उन्होंने खास HTML element और उससे जुड़ा link भी विस्तार से बताया
“washing machine ने खुद से बहुत ज़्यादा communication किया” वाले हिस्से पर किसी ने कहा कि शायद network stack designer को loopback interface की अवधारणा नहीं पता थी
उन्होंने बताया कि वह अपने ही IP पर बहुत packets भेज रही थी, और 255.255.255.255 पर भी हर सेकंड packets जा रहे थे, हालांकि उन्होंने इसे बहुत गंभीरता से नहीं लिया
मैंने IoT devices में ऐसा व्यवहार अक्सर देखा है, और कभी-कभी इसका इस्तेमाल IP conflict/change का पता लगाने के लिए भी होता है
मेरा भी लगभग यही विचार है