قرأت الكود المصدري لـ Honey

TThe PrimeTime
Computing/SoftwareAdvertising/MarketingInternet Technology

Transcript

00:00:00(نقر على لوحة المفاتيح) أردت أن ألقي نظرة على فضيحة Honey الكبيرة هذه التي تحدث.
00:00:12إذا لم تكن على دراية بـ Honey، فإن Honey هي واحدة من إضافات Chrome لكوبونات الخصم، مما يعني أن جميع أكوادها متاحة لي للاطلاع عليها.
00:00:19وبالتالي يمكنني إلقاء نظرة على الأمور التي يتم اتهامهم بها في مقاطع الفيديو هذه على YouTube ويمكنني بالفعل التحقق، هل هذا يحدث فعلاً؟
00:00:26لكن الأهم من ذلك عندما يتعلق الأمر بالإضافات، يمكنني فعلياً النظر عبر الزمن ورؤية، هل كانت هذه القرارات السيئة تُتخذ وهل قام مهندسو البرمجيات بإجراء تعديلات ليس فقط للمواصلة، بل لجعل هذه السلوكيات السيئة أفضل وأكثر متانة؟
00:00:44نعم، لقد فعلوا ذلك بالفعل.
00:00:45وسأريكم كيف حدث ذلك.
00:00:47لكنني أعلم أن هناك الكثير منكم ربما ليس لديهم أدنى فكرة عما يجري.
00:00:50أنتم لستم على دراية حقيقية بـ Honey.
00:00:52وبالتالي لم تتمكنوا من متابعة الأمر حقاً.
00:00:55هذا يتعلق في الواقع بعملية محددة جداً في Honey أريد أن أتطرق إليها.
00:00:59لذا سنشاهد فعلياً مقتطفاً مدته ثلاث دقائق من فيديو كشف Honey الأخير هذا.
00:01:05ثم سأتحدث عن الاطلاع على الكود المصغّر وبالضبط ما اكتشفته والنية من وراءه، وهو أمر مفاجئ بعض الشيء.
00:01:12الآن، إذا كان هناك شيء يكرهه الناس أكثر من الخداع، فهو السرقة.
00:01:15وفي الفيديو الأول الخاص بي، أريتكم كيف كانت Honey تسرق الأموال من المؤثرين.
00:01:19لكن ما لم أخبركم به هو أن هذا السلوك في معظم الحالات غير مسموح به تماماً.
00:01:25كما ترون، الشركات التي تدير هذه الصناعة، شبكات التسويق بالعمولة، تعلم جيداً أن إضافات الكوبونات مثل Honey لديها احتمالية عالية لسرقة العمولات من المؤثرين والمدونين والمسوقين الآخرين الذين يعتمدون على المحتوى.
00:01:37والأهم من ذلك، أنهم يدركون أيضاً أن هذا غير عادل، خاصة في ظل سياسة النقرة الأخيرة تفوز، التي ظلت معياراً في الصناعة.
00:01:46لذا لمنع هذا النوع من سرقة العمولات، تفرض معظم شبكات التسويق بالعمولة الرئيسية ما يُعرف بسياسة التنحي.
00:01:53دعوني أريكم كيف يبدو ذلك في Honey.
00:01:55لنزر موقع newegg.com أولاً بدون رابط تسويق بالعمولة.
00:01:58وكما ترون، تظهر Honey فوراً لتعرض استرداد نقدي.
00:02:02لكن إذا فعلنا هذا مرة أخرى، هذه المرة باستخدام رابط التسويق بالعمولة الخاص بي لـ Newegg، ستلاحظون أن Honey لا تظهر على الإطلاق.
00:02:08وإذا نقرنا على أيقونة Honey، يمكنكم أن تروا أن Honey الآن معطّلة.
00:02:12إذاً هذا هو كيف يُفترض أن تتصرف Honey عندما يكون المستخدم قد نقر بالفعل على رابط تسويق بالعمولة لشخص آخر.
00:02:17فأين إذن الاحتيال المزعوم، تسألون؟
00:02:20حسناً، كما اتضح، كان لدى Honey دائماً نظام تنحي مدمج في تطبيقهم، لكنهم كانوا يختارون بشكل انتقائي متى وعلى من يطبقون القواعد.
00:02:28لنختبر رابط التسويق بالعمولة الخاص بي لـ Newegg مرة أخرى.
00:02:31ولكن هذه المرة لدي متصفحا Chrome منفصلان تماماً مفتوحان في نفس الوقت، وكل واحد منهما مسجّل الدخول إلى حساب Honey مختلف.
00:02:38حساب Honey على اليسار لديه صفر نقاط استرداد نقدي، بينما حساب Honey على اليمين لديه نقاط استرداد نقدي متراكمة.
00:02:45الآن، ما الذي يحدث عندما أفتح رابط التسويق بالعمولة لـ Newegg على المتصفحين؟
00:02:49حساب Honey على اليسار يتنحى كما فعل في المرة الأولى.
00:02:52لكن انظروا إلى هذا، الحساب على اليمين، الذي لديه نقاط استرداد نقدي، لم يتنحَ.
00:02:58فلماذا يحدث ذلك؟
00:02:59إذاً هذا هو الأمر الذي أردت اختباره.
00:03:01أردت الخوض في هذا لأن هذا كود برمجي.
00:03:03أستطيع فهم الكود.
00:03:05يمكنني النظر إلى JSON الذي يتم تنزيله ويمكنني فهمه.
00:03:09ليس ذلك فحسب، بل إن قوة الذكاء الاصطناعي ستسمح لي بالبحث في الكود المصغّر بسرعات لم أكن أعرفها طوال مسيرتي البرمجية بأكملها.
00:03:18لذا ما فعلناه هو أننا حصلنا أولاً على مجموعة من إصدارات Honey.
00:03:22الإصدارات التي اطلعت عليها نوعاً ما كانت تبدأ من حوالي فبراير 2019، وصولاً إلى يومنا هذا، 1901.
00:03:29وبهذا، ما أردت فعله هو، حسناً، أولاً، هل هذه النقاط التي يمتلكها المستخدم تقرر نوعاً ما متى وعندما لا يتم إظهار قائمة التنحي، هل هي موجودة؟
00:03:38نعم، إنها موجودة تماماً.
00:03:40لكن السؤال الحقيقي كان، هل تغيرت؟
00:03:43لأنني عملت في شركة كبيرة، لقد عملت في شركة كبيرة، أليس كذلك؟ أنت عملت في شركة كبيرة، أنا متأكد من ذلك، أو بعضكم فعل ذلك، وتعلمون أن الكود أحياناً يبقى موجوداً فقط.
00:03:50تعلمون، الأمر مثل أخطاء سخيفة، إنه لا يزال موجوداً هناك، لم يغيره أحد منذ خمس سنوات، هذا هو الحال فقط.
00:03:55وهذا نوعاً ما ما كنت أبحث عنه، وهو هل بقي الكود موجوداً؟
00:04:00أم أنه كانت هناك تغييرات كبيرة؟
00:04:03وليس مثل إصلاحات الأخطاء الصغيرة.
00:04:05حسناً، لتجنب انتهاك حقوق النشر، لأن محامي PayPal على ما يبدو سيستخدمون حقوق النشر، سيضربونهم بقانون DMCA، أي شخص يعرض الكود فعلياً.
00:04:13وهذا يعني أنه يتعين علي القيام بهذه الرقصة الغريبة على السبورة القديمة لأريكم ما كان يحدث.
00:04:18لذا بدءاً من الإصدار 11، تذكروا، الذي كان حوالي عام 2019، هذا الإصدار كان يحتوي على منطق التوقف.
00:04:25كان يحتوي حتى على أشياء تسمى منطق توقف SSD.
00:04:29كان يطابق ملف JSON الذي ينزل مع مجموعة من البيانات.
00:04:32هنا عملية التوقف الخاصة بي لمستخدم غير مسجل دخوله على الإطلاق، الأشياء الأساسية للغاية.
00:04:38هنا، يمكنك أن ترى UP تعني نقاط المستخدم.
00:04:41ADB تعني مثل آخر مرة استخدم فيها مانع الإعلانات.
00:04:45هناك أيضاً هل الحساب مسجل دخوله.
00:04:47وهناك بعض الحقول الأخرى التي يبدو أنها تظهر بين الحين والآخر.
00:04:50لذا ما هو مثير للاهتمام هو أنه في عام 2019 تحت الإصدار 11، كانت الأمور غالباً تبدو هكذا.
00:04:55هناك مثل عبارة switch عملاقة انتهى بها الأمر بوجود هذه الحالات حيث تقول فقط، حسناً، مرحباً، هل نختبر وجود بريد إلكتروني؟
00:05:02ونعم، كان يحتوي حرفياً على نص.
00:05:04هل يحتوي هذا البريد الإلكتروني على كلمة test؟
00:05:06إذن توقف دائماً، وهذا بالمناسبة، مريب.
00:05:10إنه يتجنب دخول حسابات اختبار الروابط هذه ليكون لديها مثل اختبار مشاركة الرابط لترى هل هذا يعمل فعلاً؟
00:05:16لأنه لنواجه الأمر، من منكم لم يكن لديه حساب اختبار لا يحتوي على كلمة test؟
00:05:20لدي واحد بالتأكيد.
00:05:22ولكن مع ذلك، هذا هنا كان فحصاً صريحاً.
00:05:24إذا كان لديك كلمة test في بريدك الإلكتروني في أي مكان، فسيتم تعطيلك.
00:05:29ولكن أكثر من ذلك، أعني، تم الحديث عن هذا بالفعل، ولكن أكثر من ذلك الأشياء التي كانت محيرة حقاً هو أنه يمر عبر سلسلة من الفحوصات ويقول، مرحباً، هل المزود النشط حالياً يساوي LS، وهو link share؟
00:05:41إذا كان كذلك، أريدك أن تطبق هذه القواعد بالضبط.
00:05:44وبعد ذلك، كان لديه هذا الفحص حيث يمر عبر جميع القواعد التي اكتشفها، ثم يمر واحدة تلو الأخرى في حلقة for صغيرة تمر عبر كل واحدة من هذه القواعد وتتحقق، هل أي منها يفشل؟
00:05:55إذا فشل أي منها، فسيتوقف.
00:05:57لذا كانت هذه عملية مكتوبة بشكل ثابت إلى حد ما، كما ترون، لأنه كان هناك سطر حرفي يقول مثل، إذا كان link share، افعل هذا الإجراء.
00:06:06إذا كنا في هذا المزود الآخر، افعل شيئاً آخر.
00:06:08الآن بالطبع كنت في العديد والعديد من المشاريع حيث يحدث هذا النوع من الأشياء.
00:06:12هذا طبيعي تماماً.
00:06:14تبدأ حيث تقول، حسناً، مرحباً، قد يكون لدينا مزود أو مزودين وهذا كل شيء.
00:06:18لذا سأضع فقط بضع حالات حافة مكتوبة بشكل ثابت هنا وسنتأكد فقط من معالجة الأمور بطريقة معينة.
00:06:24نتوقف لبعض الوقت، وهذا بالمناسبة، لم يكن جزءاً طويلاً جداً.
00:06:27يجب أن تشاهد فيديو MegaLag لتكتشف بالضبط كم كانت القواعد سيئة فعلاً.
00:06:34ولكن مرة أخرى، هدفي هو القول، حسناً، هل أجروا تغييرات على الكود حيث كانت عبارة عن إصلاحات أخطاء؟
00:06:39ماذا حدث؟
00:06:40حسناً، هذا هو المكان الذي تصبح فيه الأمور محيرة قليلاً لأنه بين الإصدارات 11 حتى 14، والتي أعتقد أنها حتى عام 2022، نعم، 2022، بقيت الأمور ثابتة إلى حد كبير.
00:06:52لم يتغير شيء حقاً، القليل من التعديلات، لا شيء يذكر حقاً.
00:06:56ولكن بدءاً من حوالي، أعتقد في الإصدار 16، أي في عام 2024، كانت هناك إعادة هيكلة قوية تم إجراؤها بحيث يمكنهم دفع الكثير من هذه القرارات من نقطة نهاية في Honey.
00:07:07الآن ترسل نقطة النهاية هذه كائناً يبدو هكذا، يحتوي على هذه القيمة الأساسية، ثم لديه هذه القيم، ثم لديه هذه القيم تحت X.
00:07:16لذا هذا يعني أن الإصدار السابق، استخدم مجموعة من عبارات if لتحديد نوع السلوكيات التي أراد القيام بها.
00:07:23ثم يقوم بتقييم القاعدة ليرى، هل نجحت هذه القاعدة فعلاً؟
00:07:28هل حصلنا فعلاً على قيمة صحيحة أم خاطئة؟
00:07:30لكن في الإصدار 16، قرروا أن يكونوا أكثر جدية فيما يتعلق بهندسة البرمجيات.
00:07:36الآن، كلنا نعرف ماذا تفعل عندما يكون لديك مجموعة من جمل if التي تقوم بهذا النوع من تغليف البيانات ونوع من التعديل الأساسي على الكائن؟
00:07:45حسناً، ستريد تشغيله من خلال نوع من الإعدادات.
00:07:48ستريد تشغيله من خلال شيء أكثر ديناميكية لجعله أسهل قليلاً.
00:07:52وهذا بالضبط ما فعلوه.
00:07:53لذا إذا عدنا إلى هنا ونظرنا إلى البيانات القادمة مني، أنا مستخدم Honey غير مسجل الدخول، سترى هنا أن لدي فئة أساسية.
00:08:00ستصبح هذه الفئة الأساسية الكائن الأساسي لكيفية اتخاذ Honey للقرارات.
00:08:05الآن بالنسبة لهذه الفئة الأساسية لمستخدم غير مسجل الدخول، أحتاج إلى 65,
00:08:10000 نقطة مستخدم حتى لا يتراجع Honey.
00:08:13إذا كان لدي أقل من 65,
00:08:14000 نقطة، تذكر أنني غير مسجل الدخول لذا لدي صفر نقطة، سيقول: آسف، سأتراجع.
00:08:18أنا أتجنب هذا.
00:08:20الآن، عندما يحصل على تلك القاعدة، ما يفعله بعد ذلك هو أنه يتحقق كيف وصلنا إلى هنا؟
00:08:25من أين وصلنا إلى هنا؟
00:08:27لماذا وصلنا إلى هنا؟
00:08:28ويقوم بالفحص التالي، هل كان هذا من إحدى شبكات التسويق بالعمولة هذه؟
00:08:32ثم يبدأ في تغليف الأشياء.
00:08:33إذاً، حسناً، إذا جئت من مكان link share، سيجعل النقاط المطلوبة الآن 5,
00:08:39001 فقط.
00:08:40سيعدل هذا الكائن الأساسي.
00:08:41إنه يقوم فعلاً بالهندسة الأفضل والأكثر تطوراً.
00:08:44لم يعد سلسلة من جمل if المشفرة بشكل ثابت بعد الآن.
00:08:48بدلاً من ذلك، إنه يقوم بالفعل، مهلا، خذ dot base.
00:08:51ثم أريد أن أقول، هل لديك مزودي؟
00:08:55إذا كان لديك مزودي، أريد نشر قيم مزودي أو مجرد كائن فارغ.
00:09:01ثم فعل شيئاً أكثر جنوناً، وهو كل هذه الأشياء هنا تحت X.
00:09:07هذه كلها قيم خاصة بالمتجر.
00:09:09ثم يتحقق، مهلا، أي متجر أنا فيه حالياً، أريد أيضاً وضع تلك القيم أيضاً.
00:09:17ثم ينتقل ويقوم بمنطق القاعدة الأساسي، موضحاً أنه لم يعد تحت نوع من وضع الصيانة.
00:09:23إنه يوضح أنه لم يعد نوعاً من هذا الشيء المخترق المشفر بشكل ثابت الذي كان موجوداً منذ عقد تقريباً.
00:09:29بدلاً من ذلك، انتقلوا من ذلك.
00:09:31وفي عام 2024، قالوا، تعرف ماذا؟
00:09:33نحن بحاجة إلى أن نكون أكثر قوة ونحتاج إلى أن نكون قادرين على اتخاذ المزيد من القرارات حول المزيد من المتاجر والمزيد من المزودين بطريقة أسهل للصيانة.
00:09:43هذا كان من صنع مهندسي البرمجيات وقد فعلوها.
00:09:46لذا عندما أنظر إلى هذا، ما أراه هو أنه مع مرور الوقت، أجروا تغييرات لجعل نظامهم أفضل، مما يعني أن هناك نية وراء ذلك.
00:09:54يريدون الحفاظ على ما يفعله النظام، سواء كان احتيالياً أم لا.
00:09:59لا أستطيع أن أقول إن هذا لشخص آخر أن يقرر، لكن يمكنني على الأقل أن أقول إن قراراتهم كانت لجعله أكثر قوة وأفضل.
00:10:07وبالنظر إلى حقيقة أن التصور العام لهذا النظام على أنه مشبوه جداً، فقد جعلوا نظامهم المشبوه أفضل بكثير، بكثير.
00:10:16لكن هذا ليس كل ما وجدت.
00:10:17وجدت شيئاً آخر أثار اهتمامي نوعاً ما.
00:10:19استمررت في رؤية كلمة VIM التي استمرت في الظهور.
00:10:23الآن أنا مثل، VIM، ماذا يفعل محرر النصوص؟
00:10:26عندما سألت Claude Cote عن ذلك، قال في الواقع، مهلا، أنت تتحدث عن مدير مثيلات VIM الذي تم العثور عليه داخل Honey؟
00:10:34وكنت مثل، مدير مثيلات VIM.
00:10:35حسناً، لا يمكن أن يكون هذا.
00:10:37هذا ليس هو.
00:10:38ثم عندما بدأت في النظر إلى هذا، ما انتهيت برؤيته هو أن هناك محرك JavaScript كامل في JavaScript يعمل داخل إضافة Honey.
00:10:49الآن، هذا هو الشيء الأغرب على الإطلاق الذي رأيته في حياتي.
00:10:54حاولت القيام ببعض القراءة عنه.
00:10:56أنا لست مطور إضافات خبير عندما يتعلق الأمر بـ Chrome.
00:10:59لذلك لم يكن لدي أي فكرة عن سبب تشغيل أي شخص لـ JavaScript في JavaScript على الإطلاق.
00:11:05لكن ما يفعله Honey هو أنه يحتوي فعلياً على Acorn، وهو محلل JavaScript وينتج AST من JavaScript صالح.
00:11:14ويأخذ هذا، ويقيّم JavaScript، ثم يغذيه في محرك VIM هذا.
00:11:19الآن هناك عدة إشارات داخل الكود تشير فعلياً إلى هذا الكائن الآخر المسمى cart ops retrieval JS وproduct ops retrieval JS، والذي أحياناً لا يكون فارغاً، بل يحتوي فعلياً على كود.
00:11:31ويشير أيضاً إلى كود JS هذا، والذي أحياناً لا يكون فارغاً أيضاً، مثل هنا تماماً، إنه كود جافا سكريبت حقيقي فعلياً.
00:11:38لكن بقدر ما استطعت أن أرى، فإنه في الواقع لا ينفذ أياً من هذا الكود.
00:11:41حاولت وضع بعض نقاط التوقف.
00:11:42لم أصل أبداً إلى نقطة إنشاء مُشغّل، لكن مع ذلك، هذا موجود فعلاً.
00:11:47لديهم الجهاز معد لتتمكن من تنفيذ كود عن بُعد على جهازك بناءً على ما يعيده Honey بطريقة غامضة جداً جداً.
00:11:57هذه جافا سكريبت داخل جافا سكريبت، لديهم محلل جافا سكريبت.
00:12:00لديهم آلة افتراضية لجافا سكريبت.
00:12:03إنها جافا سكريبت حقيقية داخل الجافا سكريبت.
00:12:06لكن لديهم أيضاً هذا القسم الواحد الذي يحتوي فقط على كل هذه الدوال المحولة إلى نصوص.
00:12:11وهناك مجموعة من جافا سكريبت المضمنة التي مليئة بالطرق التي يبحثون بها في الصفحات وأشياء من هذا القبيل.
00:12:18لكن تلك تأتي مع المنتج.
00:12:22لذا فهي من الناحية الفنية لا تخالف شروط خدمة جوجل القديمة.
00:12:26لأنك إذا نظرت إلى المتطلبات الإضافية لـ manifest V3 لأي شخص يقوم بهذا، فإنه لا يُفترض أن يُسمح لك باستخدام JavaScript eval.
00:12:33حسناً، لن نفعل ذلك.
00:12:34لن نستخدم eval.
00:12:35ما سنفعله هو أننا سنكتب بشكل ثابت بعض العمليات التي لا نريد للإضافات الأخرى أن تعرف أننا نقوم بها.
00:12:40ثم سندمج محرك جافا سكريبت كامل لتشغيلها لزيادة إخفاء ما نقوم به.
00:12:47وهو أمر مضحك لأن هذا V3 هنا، يبدو أنه صُمم خصيصاً لـ Honey لأنه يقول بناء مفسر لتشغيل أوامر معقدة يتم جلبها من مصدر بعيد، حتى لو تم جلب تلك الأوامر كبيانات.
00:12:59لذا فهم يتحايلون على ذلك.
00:13:00هذه ليست أشياء بعيدة.
00:13:01هذه نصوص متاحة فعلياً داخل إضافة Honey.
00:13:05لكن يا رجل، هذا بعض الإخفاء.
00:13:07هذه أشياء غريبة.
00:13:09لا أستطيع شخصياً أن أفهم سبباً واحداً لحدوث هذا فعلياً.
00:13:14كما قلت، يبدو أنه بسبب التفاعلات مع الإضافات الأخرى، والإضافات الأخرى هي مانعات الإعلانات.
00:13:19يبدو أن مانعات الإعلانات قد تحجب إضافة Honey إذا شغّلت دوال معينة مباشرة، لكن بطريقة ما من خلال هذا المفسر الغريب، تستطيع فعلياً تشغيل أشياء تتجنب أن يتم اكتشافها.
00:13:31لا أعرف، لكن يبدو لي كأنه مهرجان فوضوي.
00:13:34ووجدت هذا مثيراً للاهتمام جداً جداً لأنني لم أقم أبداً بأي نوع من الهندسة العكسية.
00:13:37لم أنظر أبداً في كود مصدري لشخص آخر، خاصة كود مصغّر.
00:13:41أردت فقط أن أريكم هذا.
00:13:42هذه ربما تكون أغرب هندسة رأيتها في حياتي.
00:13:46كنت جزءاً من قواعد أكواد تحتوي على أكثر من 10 آلاف سطر من آلات الحالة الغريبة ومن المستحيل العمل معها، وصعبة الفهم، لكن هذا يجب أن يأخذ الكعكة.
00:13:57يجب أن يكون هذا هو الاختراع الأكثر تعقيداً والأغرب، على مستوى روب غولدبرغ الذي رأيته على الإطلاق.
00:14:03لكن علاوة على ذلك، القواعد الديناميكية للقيام بأشياء التوقف، إنها قوية.
00:14:08مهما كان الغرض، سواء كان احتيالياً أم لا، فقد صُمم ليكون ديناميكياً وللتحكم به عبر JSON على أساس كل متجر، وكل مزود، وكل مستخدم.
00:14:19لكن على أي حال، أريد أن أوجه تحية خاصة لـ Magalega.
00:14:21كان رائعاً حقاً.
00:14:22تمكنت من الدردشة معه.
00:14:23ساعدني قليلاً نوعاً ما في النظر إلى بعض الأشياء.
00:14:25لذا تحية كبيرة له.
00:14:26يجب عليك بالتأكيد أن تشاهد الفيديو.
00:14:27إنه في الوصف.
00:14:28إنه مُنجز بشكل رائع.
00:14:29هناك العديد منها وأوصي بأن تشاهدها جميعاً.
00:14:32إنها جيدة جداً جداً.
00:14:33أيضاً، هل تحب هذا الشيء الذي فعلته؟
00:14:35هل تحب هذا الشكل؟
00:14:36لا أعرف.
00:14:37هذا جديد نوعاً ما.
00:14:38هذا فقط أنا أقضي بعض الوقت في البث، أستمتع ثم أعود إليكم بالتقرير.
00:14:42لو كنتم في البث، لكنتم رأيتم هذا يحدث مباشرة.
00:14:44كان من الممكن أن يكون أكثر متعة بالنسبة لكم.
00:14:45الاسم هو أنا لست مهندس عكسي، لكن هذا كان ممتعاً جداً.
00:14:50أستطيع أن أرى لماذا يفعل الناس ذلك.
00:14:51جيل.
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:12إذن تفقد CRON.
00:15:13لا تعرف ما هو SSH؟
00:15:14حسناً، ربما القهوة ليست لك.
00:15:18♪ قهوة الطرفية في يدي ♪ ♪ أعيش في الحلم ♪

Key Takeaway

تحليل الكود المصدري لإضافة Honey يكشف عن تطور متعمد ومخطط له لنظام سرقة العمولات، حيث انتقل من كود بسيط مشفر بشكل ثابت إلى نظام معقد وديناميكي يتضمن حتى محرك JavaScript مخفي لتجنب الاكتشاف.

Highlights

تم اكتشاف أن Honey تستخدم نظام توقف انتقائي يعتمد على نقاط المستخدم، حيث يتراجع للمستخدمين بدون نقاط لكن يستمر في سرقة العمولات من المستخدمين الذين لديهم نقاط متراكمة

في عام 2024، قام مهندسو Honey بإعادة هيكلة كاملة للنظام لجعله أكثر قوة وديناميكية، مما يدل على وجود نية واضحة وراء السلوك الاحتيالي المزعوم

تم العثور على محرك JavaScript كامل (VIM) يعمل داخل إضافة Honey، وهو نظام معقد لإخفاء العمليات وتجنب اكتشافها من قبل مانعات الإعلانات

الإصدارات القديمة من Honey (2019-2022) كانت تحتوي على كود مشفر بشكل ثابت للتوقف الانتقائي، لكن التطويرات اللاحقة حولته إلى نظام ديناميكي يتحكم فيه من الخادم

تحتوي Honey على فحوصات خاصة لتجنب حسابات الاختبار، حيث تتوقف دائماً إذا احتوى البريد الإلكتروني على كلمة 'test'، مما يصعب اكتشاف السلوك الاحتيالي أثناء الاختبار

النظام الجديد يسمح بقرارات مخصصة لكل متجر، ومزود، ومستخدم بناءً على بيانات JSON يتم تنزيلها من خوادم Honey

Timeline

مقدمة ونظرة عامة على فضيحة Honey

يبدأ المتحدث بشرح نيته لفحص الكود المصدري لإضافة Honey بعد ظهور فضائح حولها على YouTube. يوضح أن Honey هي إضافة Chrome لكوبونات الخصم، مما يعني أن كل أكوادها متاحة للفحص العام. الميزة الأساسية للتحليل هي القدرة على النظر عبر الزمن ومتابعة التغييرات التي أجراها مهندسو البرمجيات على الكود. يتم عرض مقطع من فيديو MegaLag الذي يكشف كيف تسرق Honey عمولات المؤثرين والمسوقين بالعمولة. الفيديو يوضح أن شبكات التسويق بالعمولة لديها سياسات 'التنحي' لمنع هذا النوع من السرقة، حيث يُفترض أن تتوقف الإضافة عن العمل عندما يستخدم المستخدم رابط تسويق بالعمولة لشخص آخر.

اكتشاف نظام التوقف الانتقائي

يتم الكشف عن الاحتيال الرئيسي حيث تختار Honey بشكل انتقائي متى تطبق قواعد التنحي. في اختبار مباشر، عند فتح رابط تسويق بالعمولة لموقع Newegg على متصفحين منفصلين بحسابات مختلفة، يظهر سلوك مختلف تماماً. الحساب الذي لا يحتوي على نقاط استرداد نقدي يتنحى كما هو متوقع، بينما الحساب الذي يحتوي على نقاط متراكمة لا يتنحى ويستمر في سرقة العمولة. هذا الاكتشاف هو جوهر الفضيحة ويشير إلى أن Honey تستهدف المستخدمين النشطين لديها. المتحدث يقرر التحقيق في الكود لفهم ما إذا كان هذا خطأ عرضياً أم سلوكاً متعمداً تم تطويره بمرور الوقت.

تحليل الإصدارات القديمة (2019-2022)

يبدأ المتحدث بفحص إصدارات Honey من فبراير 2019 فصاعداً باستخدام الذكاء الاصطناعي للبحث في الكود المصغر بسرعة. في الإصدار 11 (حوالي 2019)، كان يوجد منطق توقف يعتمد على بيانات JSON تتضمن نقاط المستخدم (UP) وآخر استخدام لمانع الإعلانات (ADB) وحالة تسجيل الدخول. يكشف الكود عن فحص صريح لحسابات الاختبار حيث إذا احتوى البريد الإلكتروني على كلمة 'test'، يتم التوقف دائماً، مما يجعل اكتشاف السلوك الاحتيالي صعباً أثناء الاختبار. كان النظام يحتوي على عبارات switch مشفرة بشكل ثابت لكل مزود (مثل LinkShare)، ويمر عبر مجموعة من القواعد في حلقة for للتحقق من شروط التوقف. من الإصدار 11 حتى 14 (حتى 2022)، بقي الكود ثابتاً نسبياً مع تعديلات طفيفة فقط.

إعادة الهيكلة الكبرى في 2024

في الإصدار 16 (عام 2024)، تم إجراء إعادة هيكلة قوية ومتطورة للنظام بأكمله. بدلاً من عبارات if المشفرة بشكل ثابت، أصبح النظام الآن يعتمد على بيانات ديناميكية يتم جلبها من خوادم Honey عبر JSON. يحتوي الكائن الجديد على 'base class' كأساس لاتخاذ القرارات، مع قيم مخصصة لكل مزود ومتجر. النظام الجديد يطلب 65,000 نقطة للمستخدم غير المسجل حتى لا يتوقف Honey، لكنه يعدل هذا الرقم إلى 5,001 فقط عند المرور عبر شبكات معينة مثل LinkShare. التغيير يوضح هندسة برمجية أفضل وأكثر احترافية، حيث يستخدم نشر الكائنات (object spreading) والقيم الخاصة بكل متجر. هذا التطور الواضح يدل على نية متعمدة لجعل النظام أكثر قوة وسهولة في الصيانة، مما يؤكد أن السلوك الاحتيالي ليس خطأ عرضياً بل قرار مدروس.

اكتشاف محرك JavaScript المخفي (VIM)

أثناء التحليل، يكتشف المتحدث شيئاً غريباً: كلمة 'VIM' تظهر بشكل متكرر في الكود، وليس المقصود محرر النصوص بل 'VIM Instance Manager' - محرك JavaScript كامل يعمل داخل JavaScript. يستخدم Honey مكتبة Acorn لتحليل كود JavaScript وإنتاج AST (Abstract Syntax Tree)، ثم يقيّم هذا الكود من خلال محرك VIM. يوجد إشارات إلى كائنات مثل 'cart_ops_retrieval_js' و'product_ops_retrieval_js' التي تحتوي أحياناً على كود JavaScript حقيقي. رغم أن المتحدث لم يجد هذا الكود يُنفذ فعلياً أثناء اختباره، إلا أن البنية التحتية موجودة لتنفيذ كود عن بُعد بطريقة مخفية. هذا النظام يبدو مصمماً للتحايل على قواعد Manifest V3 لإضافات Chrome التي تمنع استخدام 'eval' ولتجنب اكتشاف مانعات الإعلانات للعمليات التي تقوم بها Honey.

الخلاصة والاستنتاجات النهائية

يلخص المتحدث النتائج بأن Honey تمتلك أغرب وأكثر هندسة معقدة رآها في حياته، مشبهاً إياها بآلة روب غولدبرغ المعقدة. القواعد الديناميكية للتوقف مصممة بشكل قوي للتحكم فيها عبر JSON على أساس كل متجر، ومزود، ومستخدم، مما يوضح أن النظام ليس خطأ عرضياً. مع مرور الوقت، أجرى مهندسو Honey تغييرات متعمدة لجعل النظام أفضل وأكثر قوة، مما يشير إلى وجود نية واضحة وراء السلوك المشبوه. المتحدث يشيد بعمل MegaLag في كشف هذه الفضيحة ويوصي بمشاهدة فيديوهاته. في النهاية، يعلن أن هذه كانت تجربته الأولى في الهندسة العكسية وفحص الكود المصغر، ويختم بإعلان عن متجر القهوة الخاص به Terminal.shop بأسلوب فكاهي.

Community Posts

View all posts