मैंने Honey का सोर्स कोड पढ़ा

TThe PrimeTime
Computing/SoftwareAdvertising/MarketingInternet Technology

Transcript

00:00:00(कीबोर्ड की आवाज़) तो मैं इस बड़े Honey घोटाले पर एक नज़र डालना चाहता था जो चल रहा है।
00:00:12अगर आप Honey से परिचित नहीं हैं,
00:00:14तो Honey उन कूपन Chrome एक्सटेंशन में से एक है,
00:00:16जिसका मतलब है कि इसका सारा कोड मेरे देखने के लिए उपलब्ध है।
00:00:19और इसलिए मैं उन बातों पर नज़र डाल सकता हूँ जिनका इन YouTube वीडियो में आरोप लगाया जा रहा है और मैं वास्तव में देख सकता हूँ,
00:00:25क्या यह हो रहा है?
00:00:26लेकिन इससे भी ज़्यादा जब एक्सटेंशन की बात आती है,
00:00:29तो मैं वास्तव में समय के साथ देख सकता हूँ और जान सकता हूँ,
00:00:33क्या ये ग़लत निर्णय लिए जा रहे थे और क्या सॉफ़्टवेयर इंजीनियरों ने न केवल जारी रखने के लिए,
00:00:39बल्कि इन ग़लत व्यवहारों को और भी बेहतर और मजबूत बनाने के लिए बदलाव किए हैं?
00:00:44हाँ, हाँ उन्होंने किया है।
00:00:45और मैं आपको दिखाने वाला हूँ कि यह कैसे हुआ है।
00:00:47लेकिन मुझे पता है कि आप में से बहुत से लोग शायद नहीं जानते कि क्या हो रहा है।
00:00:50आप वास्तव में Honey से परिचित भी नहीं हैं।
00:00:52और इसलिए आप जानते नहीं,
00:00:53आप वास्तव में कभी भी पूरी तरह से अपडेट नहीं रहे हैं।
00:00:55यह वास्तव में Honey के एक बहुत ही विशिष्ट संचालन से जुड़ा है जिस पर मैं चर्चा करना चाहता हूँ।
00:00:59तो हम वास्तव में इस नवीनतम Honey खुलासा वीडियो से तीन मिनट का एक अंश देखने वाले हैं।
00:01:05और फिर मैं minified कोड के माध्यम से जाने और मुझे जो कुछ मिला और उसके पीछे के इरादे के बारे में बात करने वाला हूँ,
00:01:11जो थोड़ा आश्चर्यजनक है।
00:01:12अब,
00:01:12अगर एक चीज़ है जिससे लोग धोखे से भी ज़्यादा नफ़रत करते हैं,
00:01:15तो वह है चोरी।
00:01:15और अपने पहले वीडियो में,
00:01:16मैंने आपको दिखाया कि कैसे Honey इन्फ़्लुएंसर्स से पैसे चुरा रहा था।
00:01:19लेकिन मैंने आपको यह नहीं बताया कि यह व्यवहार ज़्यादातर मामलों में सख़्ती से अनुमति नहीं है।
00:01:25देखिए,
00:01:25जो कंपनियाँ इस उद्योग को चलाती हैं,
00:01:27affiliate नेटवर्क,
00:01:28अच्छी तरह जानते हैं कि Honey जैसे कूपन एक्सटेंशन में इन्फ़्लुएंसर्स,
00:01:32ब्लॉगर्स और अन्य कंटेंट संचालित affiliates से कमीशन हड़पने की उच्च संभावना होती है।
00:01:37और भी महत्वपूर्ण बात यह है कि वे यह भी समझते हैं कि यह उचित नहीं है,
00:01:41खासकर last click wins नीति के तहत,
00:01:44जो एक उद्योग मानक बनी हुई है।
00:01:46तो इस प्रकार की कमीशन चोरी को रोकने के लिए,
00:01:48अधिकांश प्रमुख affiliate नेटवर्क stand down नीति नामक व्यवस्था लागू करते हैं।
00:01:53मैं आपको दिखाता हूँ कि Honey पर यह कैसा दिखता है।
00:01:55पहले बिना किसी affiliate लिंक के newegg.com पर जाएँ।
00:01:58और जैसा कि आप देख सकते हैं,
00:02:00Honey तुरंत cashback की पेशकश करते हुए सामने आता है।
00:02:02लेकिन अगर हम इसे फिर से करें,
00:02:03इस बार Newegg के लिए मेरे affiliate लिंक का उपयोग करते हुए,
00:02:06तो आप देखेंगे कि Honey बिल्कुल भी सामने नहीं आता है।
00:02:08और अगर हम Honey आइकन पर क्लिक करते हैं,
00:02:10तो आप देख सकते हैं कि Honey अब निष्क्रिय हो गया है।
00:02:12तो इस तरह Honey को व्यवहार करना चाहिए जब कोई उपयोगकर्ता पहले से ही किसी और के affiliate लिंक पर क्लिक कर चुका हो।
00:02:17तो फिर कथित धोखाधड़ी कहाँ है, आप पूछेंगे?
00:02:20खैर,
00:02:20जैसा कि पता चलता है,
00:02:21Honey के पास हमेशा से उनके ऐप में एक stand down सिस्टम बना हुआ था,
00:02:25लेकिन वे चयनात्मक रूप से चुन रहे हैं कि कब और किस पर नियम लागू करना है।
00:02:28चलिए Newegg के लिए मेरे affiliate लिंक का फिर से परीक्षण करते हैं।
00:02:31केवल इस बार मेरे पास दो पूरी तरह से अलग Chrome ब्राउज़र एक साथ खुले हैं,
00:02:36और प्रत्येक एक अलग Honey अकाउंट में लॉग इन है।
00:02:38बाईं ओर वाले Honey अकाउंट में शून्य cashback पॉइंट हैं,
00:02:41जबकि दाईं ओर वाले Honey अकाउंट में cashback पॉइंट जमा हैं।
00:02:45अब,
00:02:45क्या होता है जब मैं दोनों ब्राउज़रों पर Newegg affiliate लिंक खोलता हूँ?
00:02:49बाईं ओर का Honey अकाउंट पहली बार की तरह stand down हो जाता है।
00:02:52लेकिन इसे देखिए,
00:02:53दाईं ओर वाला अकाउंट,
00:02:54जिसमें cashback पॉइंट हैं,
00:02:56stand down नहीं हुआ।
00:02:58तो ऐसा क्यों है?
00:02:59तो यह वह चीज़ है जिसका मैं परीक्षण करना चाहता था।
00:03:01मैं इसके माध्यम से जाना चाहता था क्योंकि यह कोड है।
00:03:03मैं कोड समझ सकता हूँ।
00:03:05मैं JSON को देख सकता हूँ जो आ रहा है और मैं इसे समझ सकता हूँ।
00:03:09न केवल यह,
00:03:09बल्कि AI की शक्ति मुझे minified कोड के माध्यम से ऐसी गति से खोज करने की अनुमति देगी जो मेरे पूरे प्रोग्रामिंग ब्रह्मांड में मुझे अज्ञात थी।
00:03:18तो हमने जो किया वह यह है कि हमने पहले Honey के कई संस्करण प्राप्त किए।
00:03:22तो जिन संस्करणों से मैं गुज़रा वे लगभग फरवरी 2019 से शुरू होकर वर्तमान दिन,
00:03:281901 तक थे।
00:03:29और उसके साथ,
00:03:29मैं जो करना चाहता था वह यह था,
00:03:31ठीक है,
00:03:31सबसे पहले,
00:03:32क्या यह user point जैसी चीज़ है जो यह तय कर रही है कि stand down मेनू कब दिखाना है और कब नहीं,
00:03:37क्या यह मौजूद है?
00:03:38हाँ, यह काफ़ी हद तक मौजूद है।
00:03:40लेकिन असली सवाल यह था कि क्या इसमें बदलाव हुआ था?
00:03:43क्योंकि मैंने एक बड़ी कंपनी में काम किया है,
00:03:45है ना,
00:03:45आपने भी एक बड़ी कंपनी में काम किया होगा,
00:03:47मुझे यकीन है,
00:03:47या आप में से कुछ ने तो किया ही होगा,
00:03:49और आप जानते हैं कि कभी-कभी कोड वैसे ही पड़ा रहता है।
00:03:50आप जानते हैं,
00:03:51यह ऐसा है कि उफ्फ,
00:03:52वो वहीं पड़ा है,
00:03:53पांच साल से किसी ने इसे बदला नहीं है,
00:03:54बस यही हाल है।
00:03:55और मैं कुछ ऐसा ही ढूंढ रहा था,
00:03:57यानी कि क्या कोड वैसे ही पड़ा रहा?
00:04:00या फिर कोई महत्वपूर्ण बदलाव हुए हैं?
00:04:03छोटे-मोटे बग फिक्सेज की बात नहीं कर रहा।
00:04:05ठीक है,
00:04:05तो कॉपीराइट का शिकार होने से बचने के लिए,
00:04:07क्योंकि जाहिर तौर पर PayPal के वकील किसी को भी जो असल कोड दिखाता है उसे कॉपीराइट मारेंगे,
00:04:12DMCA से मार देंगे।
00:04:13इसका मतलब है कि मुझे पुराने ब्लैकबोर्ड पर यह अजीब नाटक करना होगा आपको दिखाने के लिए कि क्या हो रहा था।
00:04:18तो वर्जन 11 से शुरू करते हुए,
00:04:20याद रखें,
00:04:21जो लगभग 2019 का है,
00:04:22इस वर्जन में स्टैंड डाउन लॉजिक था।
00:04:25इसमें ऐसी चीजें भी थीं जिन्हें SSD स्टैंड डाउन लॉजिक्स कहा जाता था।
00:04:29यह JSON फाइल से मैच करता था जो ढेर सारे डेटा के साथ आती थी।
00:04:32यहां मेरा एक यूजर का स्टैंड डाउन है जो बिल्कुल लॉग इन नहीं है,
00:04:36सबसे बुनियादी चीज।
00:04:38इसमें आप देख सकते हैं UP का मतलब यूजर पॉइंट्स है।
00:04:41ADB यानी ऐड ब्लॉक लास्ट टाइम यूज्ड जैसा कुछ है।
00:04:45इसके अलावा is account logged in भी है।
00:04:47और कुछ अन्य फील्ड्स हैं जो बीच-बीच में सामने आती हैं।
00:04:50तो दिलचस्प बात यह है कि 2019 में वर्जन 11 के तहत,
00:04:53चीजें अक्सर इस तरह दिखती थीं।
00:04:55एक विशाल स्विच स्टेटमेंट था जिसमें ये केसेज थे जहां बस ऐसा था,
00:04:59ठीक है,
00:05:00अरे,
00:05:00क्या हम ईमेल की जांच करें?
00:05:02और हां, इसमें सचमुच एक स्ट्रिंग थी।
00:05:04क्या इस ईमेल में test शब्द है?
00:05:06तो हमेशा स्टैंड डाउन कर दो, जो वैसे, संदिग्ध है।
00:05:10यह इन लिंक टेस्टिंग अकाउंट्स को आने और लिंक शेयर टेस्ट जैसा व्यवहार करने से बचा रहा था ताकि देख सकें कि क्या यह वाकई काम करता है?
00:05:16क्योंकि सच कहें तो,
00:05:17यहां कौन है जिसके पास टेस्टर अकाउंट नहीं है जिसमें test शब्द न हो?
00:05:20मेरे पास तो निश्चित रूप से है।
00:05:22लेकिन फिर भी, यह यहीं एक स्पष्ट जांच थी।
00:05:24अगर आपके ईमेल में कहीं भी test शब्द है,
00:05:27तो यह आपको डिसेबल कर देगा।
00:05:29लेकिन उससे भी ज्यादा,
00:05:30मेरा मतलब है,
00:05:30इसके बारे में पहले ही बात हो चुकी है,
00:05:32लेकिन उससे भी ज्यादा जो चीजें वाकई भ्रमित करने वाली थीं वो यह थी कि यह कई तरह की जांच से गुजरती थी और ऐसा होता था,
00:05:37अरे,
00:05:38क्या वर्तमान में सक्रिय प्रोवाइडर LS के बराबर है,
00:05:40यानी लिंक शेयर?
00:05:41अगर ऐसा है,
00:05:41तो मैं चाहता हूं कि आप इन सटीक नियमों को लागू करें।
00:05:44और फिर बाद में,
00:05:45इसमें यह जांच होती थी जहां यह उन सभी नियमों से गुजरती थी जो पता लगाए गए हैं,
00:05:49और फिर यह एक छोटे से फॉर लूप में एक-एक करके इनमें से हर नियम की जांच करती थी,
00:05:53क्या इनमें से कोई फेल होता है?
00:05:55अगर उनमें से कोई भी फेल होता है,
00:05:56तो यह स्टैंड डाउन कर देता था।
00:05:57तो यह काफी हार्ड कोडेड प्रक्रिया थी,
00:05:59जैसा कि आप देख सकते हैं,
00:06:01क्योंकि यहां सचमुच लाइन थी जो कह रही थी,
00:06:03अगर लिंक शेयर है,
00:06:04तो यह कार्रवाई करो।
00:06:06अगर हम इस दूसरे प्रोवाइडर में हैं, तो कुछ और करो।
00:06:08अब मैं बेशक ऐसी कई परियोजनाओं में रह चुका हूं जहां इस तरह की चीजें होती हैं।
00:06:12यह बिल्कुल सामान्य है।
00:06:14आप शुरू करते हैं जहां आप सोचते हैं,
00:06:15ठीक है,
00:06:16हमारे पास शायद एक या दो प्रोवाइडर हो सकते हैं और बस इतना ही।
00:06:18तो मैं बस थोड़े से हार्ड कोड एज केसेज यहां डाल दूंगा और हम बस यह सुनिश्चित करेंगे कि चीजों का एक निश्चित तरीके से ख्याल रखा जाए।
00:06:24हम कुछ समय के लिए स्टैंड डाउन करते हैं,
00:06:26जो वैसे,
00:06:26बहुत लंबा हिस्सा नहीं था।
00:06:27आपको MegaLeg का वीडियो देखना चाहिए यह पता लगाने के लिए कि नियम वास्तव में कितने भयानक थे।
00:06:34लेकिन फिर से,
00:06:34मेरा लक्ष्य यह है कि देखूं,
00:06:36ठीक है,
00:06:36क्या उन्होंने कोड में बदलाव किए जहां वे बग फिक्सेज थे?
00:06:39क्या हुआ?
00:06:40खैर,
00:06:40यहीं पर चीजें थोड़ी भ्रमित करने वाली हो जाती हैं क्योंकि वर्जन 11 से 14 के बीच,
00:06:46जो मेरा मानना है कि 2022 तक का है,
00:06:49हां,
00:06:492022,
00:06:50चीजें काफी हद तक स्थिर रहीं।
00:06:52वास्तव में कुछ खास नहीं बदला,
00:06:53थोड़े से संपादन हुए,
00:06:54दिखाने के लिए बहुत कुछ नहीं।
00:06:56लेकिन लगभग,
00:06:57मेरा मानना है कि वर्जन 16 में,
00:06:59यानी 2024 में,
00:07:00एक मजबूत रीफैक्टर किया गया ताकि वे इन निर्णयों में से कई को Honey के एक एंडपॉइंट से चला सकें।
00:07:07अब यह एंडपॉइंट एक ऑब्जेक्ट भेजता है जो इस तरह दिखता है,
00:07:11जिसमें यह बेस वैल्यू है,
00:07:13फिर इसमें ये वैल्यूज हैं,
00:07:14फिर X के तहत ये वैल्यूज हैं।
00:07:16तो इसका मतलब है कि पिछले वर्जन में,
00:07:18यह उस तरह के व्यवहार को निर्धारित करने के लिए if स्टेटमेंट्स की एक श्रृंखला का उपयोग करता था जो यह करना चाहता था।
00:07:23और फिर यह नियम मूल्यांकन करता था कि देखें,
00:07:26क्या यह नियम वास्तव में पास हुआ?
00:07:28क्या हमें वास्तव में true या false मिला?
00:07:30लेकिन संस्करण 16 में,
00:07:31उन्होंने सॉफ्टवेयर इंजीनियरिंग के मामले में थोड़ा और गंभीर होने का फैसला किया।
00:07:36अब हम सब जानते हैं कि जब आपके पास बहुत सारे if स्टेटमेंट होते हैं जो डेटा को wrap कर रहे हों और किसी ऑब्जेक्ट में बुनियादी परिवर्तन कर रहे हों,
00:07:44तो आप क्या करते हैं?
00:07:45तो आप इसे किसी तरह के config के माध्यम से चलाना चाहेंगे।
00:07:48आप इसे किसी ऐसी चीज़ के माध्यम से चलाना चाहेंगे जो थोड़ी अधिक dynamic हो ताकि इसे थोड़ा आसान बनाया जा सके।
00:07:52और उन्होंने बिल्कुल यही किया।
00:07:53तो अगर हम यहाँ वापस जाएं और उस डेटा को देखें जो मुझसे आ रहा है,
00:07:56एक गैर-लॉग इन Honey यूज़र से,
00:07:58तो आप यहाँ देखेंगे कि मेरे पास एक बेस क्लास है।
00:08:00यह बेस क्लास उस बेस ऑब्जेक्ट के रूप में काम करेगी जिससे Honey निर्धारित करता है।
00:08:05अभी इस गैर-लॉग इन यूज़र बेस क्लास के लिए,
00:08:08Honey को पीछे न हटने के लिए मुझे 65,
00:08:11000 यूज़र पॉइंट्स की आवश्यकता है।
00:08:13अगर मेरे पास 65,
00:08:14000 पॉइंट्स से कम हैं,
00:08:14याद रखें कि मैं लॉग इन नहीं हूँ इसलिए मेरे पास शून्य पॉइंट्स हैं,
00:08:17तो यह कहेगा,
00:08:17माफ़ करें,
00:08:18मैं पीछे हट रहा हूँ।
00:08:18मैं इससे बच रहा हूँ।
00:08:20अब,
00:08:20जब इसे वह बेस मिल जाता है,
00:08:22तो यह जाँच करता है कि यह यहाँ कैसे पहुँचा?
00:08:25हम यहाँ कहाँ से आए?
00:08:27हम यहाँ क्यों आए?
00:08:28और यह अगली जाँच करता है,
00:08:29क्या यह इन affiliate नेटवर्क में से किसी एक से आया था?
00:08:32और फिर यह चीज़ों को wrap करना शुरू कर देता है।
00:08:33तो,
00:08:33ठीक है,
00:08:34अगर मैं किसी link share जगह से आता हूँ,
00:08:36तो यह अब मेरे आवश्यक पॉइंट्स को केवल 5,
00:08:39001 कर देगा।
00:08:40यह इस बेस ऑब्जेक्ट को संपादित करेगा।
00:08:41यह वास्तव में बेहतर, अधिक परिष्कृत इंजीनियरिंग कर रहा है।
00:08:44यह अब hard-coded if स्टेटमेंट्स की एक श्रृंखला नहीं है।
00:08:48इसके बजाय, यह वास्तविक रूप से कह रहा है, अरे, dot base लो।
00:08:51फिर मैं कहना चाहता हूँ, क्या तुम्हारे पास मेरा provider है?
00:08:55अगर तुम्हारे पास मेरा provider है,
00:08:57तो मैं अपने provider की values को spread करना चाहता हूँ या फिर सिर्फ एक खाली ऑब्जेक्ट।
00:09:01और फिर इसने कुछ और भी अजीब किया,
00:09:04जो कि ये सभी यहाँ X के अंतर्गत हैं।
00:09:07ये सभी स्टोर-विशिष्ट values हैं।
00:09:09फिर यह जाँच करता है,
00:09:11अरे,
00:09:11मैं वर्तमान में जिस भी स्टोर में हूँ,
00:09:14मैं उन values को भी लगाना चाहता हूँ।
00:09:17और फिर यह जाकर बुनियादी नियम तर्क को करता है,
00:09:19यह दिखाते हुए कि यह अब किसी तरह के maintenance mode के अंतर्गत नहीं है।
00:09:23यह दिखा रहा है कि यह अब एक दशक से मौजूद इस hard-coded hacky चीज़ जैसा नहीं रह गया है।
00:09:29इसके बजाय, वे उससे आगे बढ़ गए।
00:09:31और 2024 में, उन्होंने कहा, तुम जानते हो क्या?
00:09:33हमें अधिक मजबूत होने की जरूरत है और हमें अधिक stores और providers के बारे में अधिक निर्णय लेने में सक्षम होना चाहिए,
00:09:40वह भी एक अधिक आसानी से maintain किए जाने वाले तरीके से।
00:09:43यह सॉफ्टवेयर इंजीनियरिंग थी लोगों और उन्होंने इसे कर दिखाया।
00:09:46तो जब मैं इसे देखता हूँ,
00:09:47तो मुझे दिखता है कि समय के साथ,
00:09:49उन्होंने अपने सिस्टम को बेहतर बनाने के लिए बदलाव किए हैं,
00:09:52जिसका मतलब है कि इसके पीछे एक इरादा है।
00:09:54वे जो भी सिस्टम कर रहा है उसे बनाए रखना चाहते हैं,
00:09:57चाहे वह धोखाधड़ी है या नहीं।
00:09:59मैं यह नहीं कह सकता,
00:10:00यह किसी और के तय करने के लिए है,
00:10:02लेकिन मैं कम से कम इतना कह सकता हूँ कि उनके निर्णय इसे अधिक मजबूत और बेहतर बनाने के लिए रहे हैं।
00:10:07और इस तथ्य को देखते हुए कि इस सिस्टम की सामान्य धारणा काफी संदिग्ध होने की है,
00:10:12उन्होंने अपने काफी संदिग्ध सिस्टम को बहुत,
00:10:14बहुत बेहतर बनाया है।
00:10:16लेकिन मुझे बस इतना ही नहीं मिला।
00:10:17मुझे कुछ और मिला जिसने मेरी दिलचस्पी बढ़ाई।
00:10:19मुझे VIM शब्द बार-बार दिखाई देता रहा।
00:10:23अब मैं सोच रहा हूँ, VIM, टेक्स्ट एडिटर यहाँ क्या कर रहा है?
00:10:26जब मैंने Claude Cote से इसके बारे में पूछा,
00:10:28तो वास्तव में उसने कहा,
00:10:29अरे,
00:10:30तुम VIM इंस्टेंस मैनेजर के बारे में बात कर रहे हो जो Honey के अंदर पाया गया है?
00:10:34और मैंने कहा, VIM इंस्टेंस मैनेजर।
00:10:35ठीक है, यह वह नहीं हो सकता।
00:10:37यह वह नहीं है।
00:10:38और फिर जैसे ही मैंने इसे देखना शुरू किया,
00:10:42मुझे यह दिखाई दिया कि Honey प्लगइन के अंदर एक पूरा JavaScript in JavaScript इंजन चलता है।
00:10:49अब, यह बिल्कुल सबसे अजीब चीज़ है जो मैंने कभी देखी है।
00:10:54मैंने इसके बारे में कुछ पढ़ने की कोशिश की।
00:10:56मैं Chrome के मामले में प्लगइन डेवलपर विशेषज्ञ नहीं हूँ।
00:10:59तो मुझे कोई अंदाज़ा नहीं था कि कोई भी JavaScript में JavaScript क्यों चलाएगा।
00:11:05लेकिन Honey क्या करता है कि वास्तव में इसके पास Acorn है,
00:11:09जो एक JavaScript पार्सर है और मान्य JavaScript से एक AST बनाता है।
00:11:14और यह इसे लेता है,
00:11:15JavaScript को evaluate करता है,
00:11:17और फिर इसे इस VIM इंजन में feed करता है।
00:11:19अब कोड के भीतर कई संदर्भ हैं जो वास्तव में इस अन्य ऑब्जेक्ट को संदर्भित करते हैं जिसे cart ops retrieval JS और product ops retrieval JS कहा जाता है,
00:11:28जो कभी-कभी null नहीं होता,
00:11:30वास्तव में कोड होता है।
00:11:31और यह इस JS कोड को भी संदर्भित करता है,
00:11:34जो कभी-कभी null नहीं होता,
00:11:35जैसे यहाँ,
00:11:36यह वास्तविक असली JavaScript है।
00:11:38लेकिन जहाँ तक मैं बता सका,
00:11:39यह वास्तव में इस कोड को execute नहीं कर रहा है।
00:11:41मैंने कुछ breakpoints सेट करने की कोशिश की।
00:11:42मैं कभी भी trigger बनाने की स्थिति तक नहीं पहुँचा,
00:11:45लेकिन फिर भी,
00:11:46यह मौजूद है।
00:11:47उनके पास आपकी मशीन पर remote code execute करने की व्यवस्था तैयार है,
00:11:51जो Honey से return होने वाले किसी भी चीज़ के आधार पर बेहद obfuscated तरीके से काम करती है।
00:11:57यह JavaScript में JavaScript है,
00:11:59उनके पास एक JavaScript parser है।
00:12:00उनके पास एक JavaScript virtual machine है।
00:12:03यह JavaScript के भीतर वास्तविक JavaScript है।
00:12:06लेकिन उनके पास यह एक section भी है जहाँ सिर्फ इन सभी stringified functions हैं।
00:12:11और बहुत सारे inlined JavaScript हैं जो उन तरीकों से भरे हुए हैं जिनसे वे pages को search करते हैं और इस तरह की चीज़ें।
00:12:18लेकिन वे product के साथ आते हैं।
00:12:22तो वे technically पुरानी Google सेवा की शर्तों के खिलाफ नहीं हैं।
00:12:26क्योंकि अगर आप manifest V3 की अतिरिक्त आवश्यकताओं को देखें किसी के लिए भी जो यह कर रहा है,
00:12:30तो आपको JavaScript eval का उपयोग करने की अनुमति नहीं होनी चाहिए।
00:12:33ठीक है, तो हम ऐसा नहीं करने वाले हैं।
00:12:34हम eval नहीं करने वाले हैं।
00:12:35हम जो करने वाले हैं वह यह है कि हम कुछ operations को hard code करेंगे जो हम नहीं चाहते कि अन्य plugins को पता चले कि हम क्या कर रहे हैं।
00:12:40और फिर हम उन्हें चलाने के लिए एक पूरा JavaScript engine शामिल करने जा रहे हैं ताकि हम जो कर रहे हैं उसे और अधिक obfuscate किया जा सके।
00:12:47जो मज़ेदार है क्योंकि यह V3 यहाँ,
00:12:49ऐसा लगता है कि यह विशेष रूप से Honey के लिए डिज़ाइन किया गया था क्योंकि यह कहता है कि किसी remote source से fetch किए गए complex commands चलाने के लिए एक interpreter बनाना,
00:12:56भले ही वे commands data के रूप में fetch किए गए हों।
00:12:59तो वे इसके आसपास निकल जाते हैं।
00:13:00ये remote चीज़ें नहीं हैं।
00:13:01ये strings हैं जो वास्तव में Honey extension के भीतर उपलब्ध हैं।
00:13:05लेकिन यार, यह कुछ obfuscation है।
00:13:07यह कुछ अजीब चीज़ है।
00:13:09मैं व्यक्तिगत रूप से एक भी कारण नहीं समझ सकता कि यह वास्तव में क्यों हो रहा है।
00:13:14जैसा कि मैंने कहा,
00:13:15जाहिर तौर पर यह अन्य extensions के साथ interactions के कारण है,
00:13:17अन्य extensions ad blockers हैं।
00:13:19जाहिर तौर पर ad blockers Honey extension को ad block कर सकते हैं अगर यह सीधे कुछ functions चलाता है,
00:13:24लेकिन किसी तरह इस अजीब interpreter के माध्यम से,
00:13:27यह वास्तव में ऐसी चीज़ें चलाने में सक्षम है जो पकड़े जाने से बच रही हैं।
00:13:31मुझे नहीं पता, लेकिन यह मुझे एक cluster festival लगता है।
00:13:34और मुझे यह बहुत,
00:13:34बहुत दिलचस्प लगा क्योंकि मैंने कभी भी किसी तरह की reverse engineering नहीं की है।
00:13:37मैंने वास्तव में कभी किसी और के source code को नहीं देखा,
00:13:40खासकर minified source code।
00:13:41मैं बस आपको यह दिखाना चाहता था।
00:13:42यह शायद सबसे असामान्य engineering है जो मैंने अपने जीवनकाल में देखी है।
00:13:46मैं उन code bases का हिस्सा रहा हूँ जिनमें 10 हज़ार से अधिक lines की अजीब state machines हैं और जिनके साथ काम करना असंभव है,
00:13:54जिनके बारे में सोचना मुश्किल है,
00:13:55लेकिन यह सबसे ऊपर है।
00:13:57यह सबसे जटिल,
00:13:58सबसे अजीब contraption,
00:13:59Rube Goldberg level होना चाहिए जो मैंने कभी देखा है।
00:14:03लेकिन इसके अलावा,
00:14:04stand down stuff के लिए dynamic rules,
00:14:07वे मजबूत हैं।
00:14:08उद्देश्य चाहे जो भी हो,
00:14:09चाहे वह fraudulent हो या न हो,
00:14:11इसे dynamic होने के लिए डिज़ाइन किया गया है और प्रति store,
00:14:14प्रति provider और प्रति user के आधार पर JSON के माध्यम से नियंत्रित किया जा सकता है।
00:14:19लेकिन वैसे भी,
00:14:20मैं Magalega को एक विशेष shout out देना चाहता हूँ।
00:14:21यह वास्तव में शानदार था।
00:14:22मुझे उनके साथ चैट करने का मौका मिला।
00:14:23उन्होंने कुछ चीज़ों को देखने में मेरी थोड़ी मदद की।
00:14:25तो उन्हें बड़ा shout out।
00:14:26आपको निश्चित रूप से video देखना चाहिए।
00:14:27यह description में है।
00:14:28यह बेहद अच्छी तरह से बना है।
00:14:29इनमें से कई हैं और मैं सुझाव देता हूँ कि आप उन सभी को देखें।
00:14:32वे बहुत, बहुत अच्छे हैं।
00:14:33साथ ही, क्या आपको यह चीज़ पसंद आई जो मैंने की?
00:14:35क्या आपको यह format पसंद है?
00:14:36मुझे नहीं पता।
00:14:37यह कुछ नया है।
00:14:38यह बस मैं stream पर कुछ समय बिता रहा हूँ,
00:14:40मज़े कर रहा हूँ और फिर आपको रिपोर्ट कर रहा हूँ।
00:14:42अगर आप stream पर होते, तो आपने यह live होते देखा होता।
00:14:44आपके लिए बहुत अधिक मज़ेदार हो सकता था।
00:14:45नाम है मैं reverse engineer नहीं हूँ,
00:14:48लेकिन यह बहुत मज़ेदार था।
00:14:50मैं देख सकता हूँ कि लोग ऐसा क्यों करते हैं।
00:14:51एक gen।
00:14:52अरे, ये HTTP है क्या?
00:14:55इसे यहाँ से हटाओ।
00:14:56हम ऐसे कॉफी ऑर्डर नहीं करते।
00:14:57हम SSH के ज़रिए कॉफी ऑर्डर करते हैं, terminal.shop।
00:15:00हाँ, असली अनुभव चाहिए?
00:15:02असली कॉफी चाहिए?
00:15:03शानदार सब्सक्रिप्शन चाहिए ताकि दोबारा याद रखने की ज़रूरत न पड़े?
00:15:06ओह,
00:15:07एक्सक्लूसिव ब्लेंड्स,
00:15:09एक्सक्लूसिव कॉफी और एक्सक्लूसिव कंटेंट चाहिए?
00:15:12तो CRON देखो।
00:15:13SSH क्या है, नहीं पता?
00:15:14शायद ये कॉफी तुम्हारे लिए नहीं है।
00:15:18♪ हाथ में टर्मिनल कॉफी ♪ ♪ सपने में जीओ ♪

Key Takeaway

Honey Chrome extension ने 2019 से 2024 तक अपनी stand down प्रणाली को जानबूझकर hard-coded logic से sophisticated JSON-based dynamic system में विकसित किया है, साथ ही एक JavaScript virtual machine का उपयोग करके अपने operations को obfuscate किया है, जो दर्शाता है कि यह व्यवहार accidental नहीं बल्कि intentional engineering का परिणाम है।

Highlights

Honey Chrome एक्सटेंशन का सोर्स कोड सार्वजनिक रूप से उपलब्ध है क्योंकि यह एक browser extension है

2019 से 2024 तक Honey के कोड में महत्वपूर्ण बदलाव हुए हैं - विशेष रूप से stand down लॉजिक को अधिक मजबूत बनाने के लिए

Honey विभिन्न users के लिए अलग-अलग stand down नियम लागू करता है - जिन users के पास अधिक cashback points हैं उन्हें affiliate links के बावजूद cashback दिखाया जाता है

2024 के version 16 में Honey ने hard-coded if statements से dynamic JSON-based configuration system में shift किया

Honey extension के अंदर एक पूर्ण JavaScript virtual machine (VIM) चल रहा है जो JavaScript को JavaScript के भीतर execute करता है

यह JavaScript interpreter संभवतः ad blockers और अन्य extensions से detection से बचने के लिए code को obfuscate करने के लिए उपयोग किया जाता है

Honey की stand down policy user points, provider type, और specific store के आधार पर dynamically बदलती है

Timeline

परिचय और Honey घोटाले का अवलोकन

वीडियो निर्माता Honey coupon Chrome extension के चल रहे घोटाले की जांच करने का इरादा व्यक्त करते हैं। चूंकि Honey एक Chrome extension है, इसका पूरा source code publicly accessible है जिससे YouTube videos में लगाए गए आरोपों को verify किया जा सकता है। विशेष रूप से, वे यह देखना चाहते हैं कि क्या Honey के software engineers ने समय के साथ इन गलत व्यवहारों को न केवल जारी रखा बल्कि उन्हें और बेहतर और मजबूत बनाया है। वे पुष्टि करते हैं कि हाँ, ऐसा हुआ है और वे दर्शकों को यह दिखाने वाले हैं कि यह कैसे हुआ। वीडियो का focus Honey के एक बहुत विशिष्ट operation पर है जिसे वे detail में discuss करेंगे।

MegaLeg के वीडियो से Stand Down Policy का परिचय

यह section MegaLeg के Honey exposure video से तीन मिनट का अंश प्रस्तुत करता है जो stand down policy को समझाता है। Video में बताया गया है कि affiliate networks जानते हैं कि coupon extensions influencers और content creators से commission चुरा सकते हैं, इसलिए वे stand down policy लागू करते हैं। जब user किसी affiliate link पर क्लिक करता है, तो Honey को stand down करना चाहिए और cashback offer नहीं दिखाना चाहिए। MegaLeg का demonstration दिखाता है कि Honey दो अलग accounts पर अलग व्यवहार करता है - जिस account में zero cashback points हैं वह stand down हो जाता है, लेकिन जिस account में पहले से cashback points हैं वह stand down नहीं होता। यह selective enforcement दिखाता है कि Honey अपने rules को चुनिंदा तरीके से लागू कर रहा है।

Code Analysis की शुरुआत और Version History

वीडियो निर्माता अब actual code analysis शुरू करते हैं और बताते हैं कि उन्होंने Honey के कई versions को examine किया - February 2019 (version 1901) से लेकर वर्तमान version तक। वे AI की मदद से minified code को unprecedented speed से analyze कर पाए। मुख्य सवाल यह था कि क्या user points जैसी चीज stand down menu को control कर रही है, और क्या इसमें समय के साथ बदलाव हुए। बड़ी कंपनियों में काम करने के अनुभव से वे जानते हैं कि कभी-कभी code वैसे ही पड़ा रहता है बिना किसी बदलाव के। वे यह पता लगाना चाहते थे कि क्या Honey का code भी ऐसे ही stagnant था, या फिर महत्वपूर्ण intentional changes किए गए थे।

Version 11 (2019) का Stand Down Logic

Copyright issues से बचने के लिए (क्योंकि PayPal के lawyers DMCA strikes भेज सकते हैं), वीडियो निर्माता blackboard पर code को recreate करते हैं। Version 11 (2019) में stand down logic मौजूद था जिसमें SSD stand down logics थी जो JSON file से match करती थी। Code में user points (UP), ad block last time used (ADB), और is account logged in जैसे fields थे। सबसे suspicious बात यह थी कि एक giant switch statement था जो check करता था कि email में 'test' शब्द है या नहीं - अगर है तो हमेशा stand down कर दो। यह link testing accounts को proper testing से रोकता था। इसके अलावा, code में hard-coded checks थे जो specific providers जैसे LinkShare के लिए specific rules apply करते थे। यह काफी hard-coded process थी जहाँ explicitly लिखा था 'if LinkShare, do this action'।

Version 11 से 14 तक का Period और Limited Changes

Version 11 से 14 के बीच (2019 से 2022 तक) code में बहुत कम बदलाव हुए। चीजें काफी हद तक stable रहीं और कोई major changes नहीं दिखे। थोड़े-बहुत edits हुए लेकिन कुछ खास demonstrate करने लायक नहीं था। यह period relative stagnation का था जहाँ stand down logic में कोई significant evolution नहीं हुआ। यह observation महत्वपूर्ण है क्योंकि यह दिखाता है कि अगले major changes intentional और deliberate थे, न कि gradual evolution का हिस्सा।

Version 16 (2024) - Dynamic Configuration में Major Refactor

Version 16 (2024) में एक major refactor किया गया जिससे decisions को Honey के endpoint से dynamically control किया जा सके। अब endpoint एक object भेजता है जिसमें base value, provider-specific values, और store-specific values (X के अंतर्गत) होते हैं। पहले के hard-coded if statements की जगह अब sophisticated system है जो dot notation का उपयोग करता है - पहले base object लिया जाता है, फिर provider की values को spread किया जाता है, फिर store-specific values apply की जाती हैं। यह proper software engineering है जो configuration-driven approach follow करता है। उदाहरण के लिए, एक non-logged-in user को stand down नहीं होने के लिए 65,000 user points चाहिए, लेकिन अगर वे LinkShare से आए हैं तो यह requirement घटकर सिर्फ 5,001 हो जाती है। यह सब JSON configuration के through dynamically control होता है।

Engineering Evolution का Analysis और Intent का सबूत

Code evolution को देखकर निर्माता conclude करते हैं कि समय के साथ Honey ने अपने system को deliberately बेहतर बनाने के लिए changes किए हैं। 2024 में engineers ने कहा कि हमें अधिक robust होने की जरूरत है और अधिक stores और providers के बारे में अधिक decisions लेने में सक्षम होना चाहिए, वह भी easily maintainable तरीके से। यह genuine software engineering था जो successfully implement किया गया। इन changes के पीछे clear intent दिखता है - वे जो भी system कर रहा है उसे maintain करना चाहते हैं, चाहे वह fraudulent हो या नहीं। यह साबित करता है कि यह behavior accidental या legacy code नहीं है बल्कि active development और improvement का subject रहा है।

VIM JavaScript Interpreter की Discovery

Code analysis के दौरान निर्माता को बार-बार 'VIM' शब्द दिखा। Claude Code से पूछने पर पता चला कि यह VIM Instance Manager है जो Honey के अंदर है। जांच करने पर पता चला कि Honey plugin के अंदर एक पूरा JavaScript-in-JavaScript engine चल रहा है। Honey में Acorn (एक JavaScript parser) है जो valid JavaScript से AST बनाता है, इसे evaluate करता है, और फिर VIM engine में feed करता है। Code में cart_ops_retrieval_js और product_ops_retrieval_js जैसे references हैं जो कभी-कभी null नहीं बल्कि actual executable code होते हैं। हालांकि debugger में breakpoints set करने पर यह code execute होता नहीं दिखा, लेकिन infrastructure तो मौजूद है। यह Honey की तरफ से remote code execution की capability तैयार रखने का indication है।

JavaScript-in-JavaScript का Purpose और Manifest V3 Workaround

यह पूरा JavaScript-in-JavaScript setup सबसे अजीब चीज है जो निर्माता ने कभी देखी। Chrome plugin development में normally कोई JavaScript में JavaScript नहीं चलाता। यह likely Google के Manifest V3 की requirements को bypass करने के लिए है जो JavaScript eval() का उपयोग prohibit करती है। Honey technically पुरानी Google service terms के खिलाफ नहीं है क्योंकि वे eval() नहीं कर रहे बल्कि operations को hard code कर रहे हैं जिन्हें वे दूसरे plugins से छुपाना चाहते हैं, और फिर उन्हें execute करने के लिए पूरा JavaScript engine include कर रहे हैं। Manifest V3 specifically कहता है कि remote source से fetch किए गए complex commands चलाने के लिए interpreter नहीं बनाना चाहिए। Honey इसे bypass करता है क्योंकि ये strings पहले से extension के भीतर हैं, remote नहीं हैं। यह extreme obfuscation है जिसका कोई legitimate reason समझ नहीं आता।

Conclusion और Final Thoughts

निर्माता conclude करते हैं कि यह सबसे असामान्य engineering है जो उन्होंने जीवनकाल में देखी है - 10,000+ lines की weird state machines से भी ज्यादा complex। Stand down stuff के लिए dynamic rules बेहद robust हैं और JSON के through per-store, per-provider, और per-user basis पर control किए जा सकते हैं। Purpose चाहे fraudulent हो या न हो, system को deliberately dynamic बनाया गया है। वे MegaLeg को special shoutout देते हैं जिन्होंने उनकी मदद की और recommend करते हैं कि सभी को उनके videos देखने चाहिए। अंत में वे viewers से feedback मांगते हैं कि क्या उन्हें यह नया format (stream पर code analysis करना और फिर report करना) पसंद आया। वीडियो Terminal.shop के coffee advertisement के साथ समाप्त होता है जो SSH के through coffee ordering का meme बनाता है।

Community Posts

View all posts