J'ai lu le code source de Honey

TThe PrimeTime
Computing/SoftwareAdvertising/MarketingInternet Technology

Transcript

00:00:00(clavier qui clique) Je voulais donc jeter un œil à cet énorme scandale Honey qui fait rage.
00:00:12Si vous n'êtes pas familier avec Honey,
00:00:14Honey est l'une de ces extensions Chrome de coupons,
00:00:16ce qui signifie que tout son code est accessible pour que je puisse l'examiner.
00:00:19Je peux donc examiner les accusations formulées dans ces vidéos YouTube et vérifier concrètement si c'est réellement le cas.
00:00:26Mais surtout,
00:00:27avec les extensions,
00:00:28je peux analyser l'évolution dans le temps et voir si ces mauvaises décisions ont été prises et si des ingénieurs logiciels ont apporté des modifications non seulement pour continuer,
00:00:38mais aussi pour rendre ces comportements douteux encore plus performants et robustes.
00:00:44Oui, c'est exactement ce qu'ils ont fait.
00:00:45Et je vais vous montrer comment c'est arrivé.
00:00:47Mais je sais qu'il y en a beaucoup parmi vous qui n'ont probablement aucune idée de ce qui se passe.
00:00:50Vous ne connaissez même pas vraiment Honey.
00:00:52Et donc vous n'avez jamais vraiment suivi l'affaire.
00:00:55Cela concerne en fait une opération très spécifique de Honey que je veux détailler.
00:00:59Nous allons donc regarder un extrait de trois minutes de cette dernière vidéo révélant Honey.
00:01:05Ensuite,
00:01:05je vais parler de mon analyse du code minifié et de ce que j'ai découvert exactement ainsi que de l'intention derrière,
00:01:11ce qui est assez surprenant.
00:01:12S'il y a bien une chose que les gens détestent plus que la tromperie,
00:01:15c'est le vol.
00:01:15Dans ma première vidéo,
00:01:16je vous ai montré comment Honey volait de l'argent aux influenceurs.
00:01:19Mais ce que je ne vous ai pas dit,
00:01:21c'est que ce comportement est dans la plupart des cas strictement interdit.
00:01:25Voyez-vous,
00:01:25les entreprises qui dirigent ce secteur,
00:01:27les réseaux d'affiliation,
00:01:28savent parfaitement que les extensions de coupons comme Honey ont une forte probabilité de détourner les commissions des influenceurs,
00:01:34blogueurs et autres affiliés axés sur le contenu.
00:01:37Plus important encore,
00:01:38ils comprennent également que ce n'est pas juste,
00:01:41surtout sous la politique du dernier clic gagnant,
00:01:44qui est restée une norme de l'industrie.
00:01:46Pour éviter ce type de vol de commission,
00:01:48la plupart des grands réseaux d'affiliation appliquent ce qu'on appelle une politique de retrait.
00:01:53Laissez-moi vous montrer à quoi cela ressemble sur Honey.
00:01:55Visitons d'abord newegg.com sans lien d'affiliation.
00:01:58Et comme vous pouvez le voir,
00:02:00Honey apparaît immédiatement en proposant du cashback.
00:02:02Mais si nous recommençons,
00:02:03cette fois en utilisant mon lien d'affiliation pour Newegg,
00:02:06vous remarquerez que Honey n'apparaît pas du tout.
00:02:08Et si nous cliquons sur l'icône Honey,
00:02:10vous pouvez constater que Honey est maintenant désactivé.
00:02:12Voilà donc comment Honey est censé se comporter quand un utilisateur a déjà cliqué sur le lien d'affiliation de quelqu'un d'autre.
00:02:17Où se situe alors la fraude présumée, demandez-vous ?
00:02:20Eh bien,
00:02:20il s'avère que Honey a toujours eu un système de retrait intégré dans son application,
00:02:25mais ils ont choisi de manière sélective quand et à qui appliquer les règles.
00:02:28Testons à nouveau mon lien d'affiliation pour Newegg.
00:02:31Sauf que cette fois,
00:02:32j'ai deux navigateurs Chrome entièrement séparés ouverts en même temps,
00:02:36et chacun est connecté à un compte Honey différent.
00:02:38Le compte Honey de gauche a zéro point de cashback,
00:02:41tandis que le compte Honey de droite a accumulé des points de cashback.
00:02:45Maintenant,
00:02:45que se passe-t-il lorsque j'ouvre le lien d'affiliation Newegg sur les deux navigateurs ?
00:02:49Le compte Honey de gauche se retire comme la première fois.
00:02:52Mais regardez ça,
00:02:53le compte de droite,
00:02:54qui a des points de cashback,
00:02:56ne s'est pas retiré.
00:02:58Alors pourquoi donc ?
00:02:59C'est donc ce que je voulais tester.
00:03:01Je voulais analyser ça parce que c'est du code.
00:03:03Je peux comprendre le code.
00:03:05Je peux examiner le JSON qui est téléchargé et je peux le comprendre.
00:03:09En plus de ça,
00:03:09la puissance de l'IA va me permettre de parcourir du code minifié à des vitesses que je n'aurais jamais connues tout au long de mon univers de programmation.
00:03:18Nous avons donc d'abord récupéré plusieurs versions de Honey.
00:03:22Celles que j'ai examinées commencent environ en février 2019,
00:03:26jusqu'à aujourd'hui,
00:03:281901.
00:03:29Avec ça,
00:03:29ce que je voulais faire,
00:03:30c'était me demander,
00:03:31d'abord,
00:03:32est-ce que ce truc de points utilisateur qui décide quand afficher ou non le menu de retrait,
00:03:37est-ce qu'il existe ?
00:03:38Oui, il existe bel et bien.
00:03:40Mais la vraie question était : est-ce qu'il avait changé ?
00:03:43Parce que j'ai travaillé dans une grande entreprise,
00:03:45j'ai travaillé dans une grande boîte,
00:03:46d'accord,
00:03:46vous avez travaillé dans une grande boîte,
00:03:48j'en suis sûr,
00:03:48ou certains d'entre vous l'ont fait,
00:03:49et vous savez que parfois le code reste juste là.
00:03:50Vous savez,
00:03:51c'est genre oups,
00:03:52c'est encore là,
00:03:53personne n'y a touché depuis cinq ans,
00:03:55c'est comme ça.
00:03:55Et c'est en quelque sorte ce que je cherchais,
00:03:57c'est-à-dire,
00:03:58est-ce que le code est resté en place ?
00:04:00Ou est-ce qu'il y a eu des changements significatifs ?
00:04:03Pas des petites corrections de bugs.
00:04:05Bon,
00:04:05pour éviter d'être poursuivi pour droits d'auteur,
00:04:08parce qu'apparemment les avocats de PayPal vont envoyer un DMCA à quiconque montre le code.
00:04:13Ça veut dire que je dois faire cette étrange chorégraphie au tableau noir pour vous montrer ce qui se passait.
00:04:18Donc à partir de la version 11,
00:04:20rappelez-vous,
00:04:21qui date d'environ 2019,
00:04:22cette version avait bien la logique de désactivation.
00:04:25Elle avait même des éléments appelés logiques de désactivation SSD.
00:04:29Elle correspondait au fichier JSON qui arrive avec plein de données.
00:04:32Voici ma désactivation d'un utilisateur qui n'est même pas connecté,
00:04:36les trucs les plus basiques.
00:04:38Ici, vous pouvez voir que UP signifie points utilisateur.
00:04:41ADB, c'est genre bloqueur de pub dernière utilisation.
00:04:45Il y a aussi « le compte est-il connecté ».
00:04:47Et il y a d'autres champs qui apparaissent de temps en temps.
00:04:50Donc ce qui est intéressant,
00:04:51c'est qu'en 2019 dans la version 11,
00:04:53les choses ressemblaient souvent à ça.
00:04:55Il y a genre une énorme instruction switch qui finissait par avoir ces cas où c'est juste,
00:05:00ok,
00:05:00hé,
00:05:01est-ce qu'on teste un email ?
00:05:02Et oui, il y avait littéralement une chaîne de caractères.
00:05:04Est-ce que cet email contient « test » ?
00:05:06Alors toujours désactiver, ce qui au passage, c'est louche.
00:05:10Ça évite que ces comptes de test de liens arrivent et soient comme « partage de lien test » pour voir si ça marche vraiment.
00:05:16Parce que soyons honnêtes,
00:05:17qui ici n'a pas eu un compte testeur qui ne contient pas le mot test ?
00:05:20Moi certainement.
00:05:22Mais néanmoins, ceci était une vérification explicite.
00:05:24Si vous avez le mot test n'importe où dans votre email,
00:05:28ça vous désactive.
00:05:29Mais en plus de ça,
00:05:30je veux dire,
00:05:30on en a déjà parlé,
00:05:31mais en plus les trucs qui étaient vraiment déroutants c'est qu'il passait par une série de vérifications et disait genre,
00:05:37hé,
00:05:37est-ce que le fournisseur actuellement actif est égal à LS,
00:05:40qui est link share ?
00:05:41Si c'est le cas,
00:05:42je veux que tu appliques exactement ces règles.
00:05:44Et puis plus tard,
00:05:45il avait cette vérification où il passait en revue toutes les règles qu'il avait trouvées,
00:05:49et ensuite il allait une par une dans une petite boucle for en parcourant chacune de ces règles et en vérifiant,
00:05:53est-ce que l'une d'elles échoue ?
00:05:55Si l'une d'elles échouait, ça désactivait.
00:05:57Donc c'était un processus assez codé en dur,
00:06:00comme vous pouvez le voir,
00:06:01parce qu'il y avait genre une ligne littérale disant,
00:06:04si link share,
00:06:05fais cette action.
00:06:06Si on est dans cet autre fournisseur, fais autre chose.
00:06:08Bon,
00:06:09j'ai bien sûr travaillé sur plein de projets où ce genre de truc arrive.
00:06:12C'est totalement normal.
00:06:14On commence en se disant,
00:06:15ok,
00:06:15hé,
00:06:16on aura peut-être un ou deux fournisseurs et c'est tout.
00:06:18Donc je vais juste mettre quelques cas particuliers codés en dur ici et on s'assurera que les choses soient prises en charge d'une certaine façon.
00:06:24On désactive pendant une certaine durée,
00:06:26qui au passage,
00:06:26n'était pas très longue.
00:06:27Vous devriez regarder la vidéo de MegaLeg pour découvrir à quel point les règles étaient vraiment atroces.
00:06:34Mais encore une fois,
00:06:35mon objectif c'est de me dire,
00:06:35ok,
00:06:36est-ce qu'ils ont fait des changements au code,
00:06:37est-ce que c'étaient des corrections de bugs ?
00:06:39Qu'est-ce qui s'est passé ?
00:06:40Eh bien,
00:06:40c'est là que les choses deviennent un peu déroutantes parce qu'entre les versions 11 et 14,
00:06:46qui je crois vont jusqu'en 2022,
00:06:48oui,
00:06:482022,
00:06:49les choses sont restées à peu près constantes.
00:06:52Rien n'a vraiment changé,
00:06:53quelques petites modifications,
00:06:54rien de vraiment significatif.
00:06:56Mais à partir d'environ,
00:06:57je crois,
00:06:58la version 16,
00:06:59donc en 2024,
00:06:59il y a eu une refonte robuste faite de sorte qu'ils puissent piloter beaucoup de ces décisions depuis un endpoint dans Honey.
00:07:07Maintenant cet endpoint envoie un objet qui ressemble à ça,
00:07:11qui a cette valeur de base,
00:07:13puis il a ces valeurs,
00:07:14puis il a ces valeurs sous X.
00:07:16Donc ça veut dire que la version précédente utilisait tout un tas d'instructions if pour déterminer le type de comportements qu'elle voulait avoir.
00:07:23Ensuite,
00:07:24il effectuait une évaluation de règle pour vérifier si cette règle était effectivement validée.
00:07:28Obtenait-on réellement un vrai ou un faux ?
00:07:30Mais dans la version 16,
00:07:31ils ont décidé d'adopter une approche beaucoup plus rigoureuse en matière d'ingénierie logicielle.
00:07:36On sait tous ce qu'on fait quand on a une série d'instructions conditionnelles qui encapsulent des données et effectuent des mutations basiques sur un objet,
00:07:44non ?
00:07:45Eh bien, on voudrait piloter ça via une configuration.
00:07:48On voudrait piloter ça via quelque chose d'un peu plus dynamique pour faciliter les choses.
00:07:52Et c'est exactement ce qu'ils ont fait.
00:07:53Donc si on revient ici et qu'on regarde les données qui me parviennent en tant qu'utilisateur Honey non connecté,
00:07:58vous verrez ici que j'ai une classe de base.
00:08:00Cette classe de base devient l'objet de référence pour déterminer le comportement de Honey.
00:08:05Actuellement,
00:08:06pour cette classe de base d'utilisateur non connecté,
00:08:09j'ai besoin de 65 000 points utilisateur pour que Honey ne se désactive pas.
00:08:13Si j'ai moins de 65 000 points,
00:08:14et rappelez-vous que je ne suis pas connecté donc j'ai zéro point,
00:08:17il dira désolé,
00:08:18je me désactive.
00:08:18J'évite ça.
00:08:20Maintenant,
00:08:20quand il obtient cette base,
00:08:22ce qu'il fait ensuite c'est vérifier comment on est arrivé là.
00:08:25D'où sommes-nous arrivés ?
00:08:27Pourquoi sommes-nous arrivés là ?
00:08:28Et il fait la vérification suivante : est-ce que ça provient d'un de ces réseaux d'affiliation ?
00:08:32Et ensuite il commence à encapsuler les choses.
00:08:33Donc,
00:08:33d'accord,
00:08:34si je viens d'un site de partage de liens,
00:08:36maintenant mes points requis ne seront plus que de 5 001.
00:08:40Il modifiera cet objet de base.
00:08:41C'est en fait une ingénierie meilleure et plus sophistiquée.
00:08:44Ce n'est plus une série d'instructions conditionnelles codées en dur.
00:08:48Au lieu de ça,
00:08:48il fait un vrai traitement du type : prends la base.
00:08:51Ensuite je veux dire, as-tu mon fournisseur ?
00:08:55Si tu as mon fournisseur,
00:08:57je veux déployer les valeurs de mon fournisseur ou juste un objet vide.
00:09:01Et ensuite ils ont fait quelque chose d'encore plus audacieux,
00:09:04à savoir tous ces éléments ici sous X.
00:09:07Ce sont toutes des valeurs spécifiques à chaque boutique.
00:09:09Ensuite il vérifiait,
00:09:11hé,
00:09:11quelle que soit la boutique dans laquelle je me trouve,
00:09:14je veux aussi appliquer ces valeurs-là.
00:09:17Et ensuite il exécutait la logique de règle de base,
00:09:20montrant qu'il n'est plus en mode maintenance.
00:09:23Il montre que ce n'est plus ce truc bricolé codé en dur qui existe depuis une décennie.
00:09:29Au lieu de ça, ils sont passés de ça.
00:09:31Et en 2024, ils se sont dit, vous savez quoi ?
00:09:33On doit être plus robustes et on doit pouvoir prendre davantage de décisions concernant plus de boutiques et plus de fournisseurs d'une manière plus facile à maintenir.
00:09:43C'était de l'ingénierie logicielle les gens,
00:09:45et ils l'ont fait.
00:09:46Donc quand je regarde ça,
00:09:47ce que je vois c'est qu'au fil du temps,
00:09:49ils ont apporté des modifications pour améliorer leur système,
00:09:52ce qui signifie qu'il y a une intention derrière.
00:09:54Ils veulent maintenir ce que fait le système,
00:09:57que ce soit frauduleux ou non.
00:09:59Je ne peux pas affirmer ça,
00:10:00c'est à quelqu'un d'autre d'en décider,
00:10:02mais je peux au moins dire que leurs décisions ont visé à le rendre plus robuste et meilleur.
00:10:07Et vu que la perception générale de ce système est qu'il est plutôt louche,
00:10:12ils ont rendu leur système plutôt louche bien,
00:10:15bien meilleur.
00:10:16Mais ce n'est pas tout ce que j'ai trouvé.
00:10:17J'ai trouvé autre chose qui a vraiment piqué ma curiosité.
00:10:19Je n'arrêtais pas de voir le mot VIM qui revenait sans cesse.
00:10:23Là je me dis,
00:10:23VIM,
00:10:24qu'est-ce que l'éditeur de texte vient faire là ?
00:10:26Quand j'ai interrogé Claude à ce sujet,
00:10:29il m'a dit,
00:10:29hé,
00:10:30tu parles du gestionnaire d'instances VIM qui se trouve dans Honey ?
00:10:34Et je me suis dit, gestionnaire d'instances VIM.
00:10:35OK, ça ne peut pas être ça.
00:10:37Ce n'est pas ça.
00:10:38Et puis en commençant à creuser,
00:10:40ce que j'ai fini par voir c'est qu'il y a tout un moteur JavaScript dans JavaScript qui tourne à l'intérieur du plugin Honey.
00:10:49Bon,
00:10:50c'est vraiment la chose la plus étrange que j'aie jamais vue.
00:10:54J'ai essayé de me renseigner là-dessus.
00:10:56Je ne suis pas un expert du développement de plugins pour Chrome.
00:10:59Donc je n'avais aucune idée de pourquoi on voudrait exécuter du JavaScript dans du JavaScript.
00:11:05Mais ce que fait Honey,
00:11:07c'est qu'il a en fait Acorn,
00:11:09qui est un analyseur JavaScript produisant un AST à partir de JavaScript valide.
00:11:14Et il prend ça,
00:11:15évalue le JavaScript,
00:11:17puis l'injecte dans ce moteur VIM.
00:11:19Il y a plusieurs références dans le code qui font référence à cet autre objet appelé cart ops retrieval JS et product ops retrieval JS,
00:11:28qui parfois n'est pas nul,
00:11:29contient en fait du code.
00:11:31Et il fait également référence à ce code JS,
00:11:34qui n'est pas non plus nul parfois,
00:11:36comme ici,
00:11:36c'est du vrai JavaScript.
00:11:38Mais pour autant que je puisse en juger,
00:11:39il n'exécute pas vraiment ce code.
00:11:41J'ai essayé de définir quelques points d'arrêt.
00:11:42Je n'ai jamais réussi à créer un déclencheur,
00:11:45mais quoi qu'il en soit,
00:11:46ça existe.
00:11:47Ils ont mis en place l'appareil pour pouvoir exécuter du code distant sur votre machine en fonction de ce que Honey renvoie d'une manière très,
00:11:56très obscurcie.
00:11:57Ce JavaScript dans JavaScript,
00:11:59ils ont un analyseur JavaScript.
00:12:00Ils ont une machine virtuelle JavaScript.
00:12:03C'est du vrai JavaScript dans le JavaScript.
00:12:06Mais ils ont aussi cette section où il y a juste toutes ces fonctions sous forme de chaînes.
00:12:11Et il y a un tas de JavaScript intégré qui est simplement rempli de façons dont ils parcourent les pages et ce genre de choses.
00:12:18Mais ceux-là sont livrés avec le produit.
00:12:22Donc techniquement,
00:12:23ils ne vont pas à l'encontre des anciennes conditions d'utilisation de Google.
00:12:26Parce que si vous regardez les exigences supplémentaires pour le manifest V3 pour ceux qui font ça,
00:12:30c'est que vous ne devriez pas être autorisé à utiliser JavaScript eval.
00:12:33D'accord, donc on ne va pas faire ça.
00:12:34On ne va pas utiliser eval.
00:12:35Ce qu'on va faire,
00:12:36c'est coder en dur certaines opérations que nous ne voulons pas que les autres plugins sachent que nous faisons.
00:12:40Et ensuite,
00:12:41nous allons intégrer un moteur JavaScript entier pour les exécuter afin d'obscurcir davantage ce que nous faisons.
00:12:47Ce qui est drôle,
00:12:48c'est que ce V3 ici,
00:12:49on dirait qu'il a été conçu spécifiquement pour Honey parce qu'il dit : construire un interpréteur pour exécuter des commandes complexes récupérées depuis une source distante,
00:12:56même si ces commandes sont récupérées en tant que données.
00:12:59Donc ils contournent ça.
00:13:00Ce ne sont pas des choses distantes.
00:13:01Ce sont des chaînes qui sont en fait disponibles dans l'extension Honey.
00:13:05Mais bon sang, c'est de l'obscurcissement.
00:13:07C'est un truc bizarre.
00:13:09Personnellement,
00:13:10je ne comprends pas une seule raison pour laquelle ça se passe réellement.
00:13:14Comme je l'ai dit,
00:13:14apparemment c'est dû aux interactions avec d'autres extensions,
00:13:17d'autres extensions étant des bloqueurs de publicités.
00:13:19Apparemment,
00:13:19les bloqueurs de publicités pourraient bloquer l'extension Honey si elle exécute directement certaines fonctions,
00:13:24mais d'une manière ou d'une autre,
00:13:26grâce à cet interpréteur bizarre,
00:13:28elle peut effectivement exécuter des trucs qui évitent d'être détectés.
00:13:31Je ne sais pas, mais ça me semble être un vrai bordel.
00:13:34Et j'ai trouvé ça très,
00:13:34très intéressant parce que je n'ai jamais fait de rétro-ingénierie.
00:13:37Je n'ai jamais vraiment regardé le code source de quelqu'un d'autre,
00:13:40surtout du code source minifié.
00:13:41Je voulais juste vous montrer ça.
00:13:42C'est peut-être l'ingénierie la plus inhabituelle que j'aie jamais vue de ma vie.
00:13:46J'ai fait partie de bases de code qui ont plus de 10 000 lignes de machines à états bizarres et avec lesquelles il est impossible de travailler,
00:13:54difficiles à comprendre,
00:13:55mais celle-ci remporte la palme.
00:13:57Ça doit être la machine la plus complexe et la plus bizarre,
00:14:00du niveau de Rube Goldberg,
00:14:02que j'aie jamais vue.
00:14:03Mais en plus,
00:14:04les règles dynamiques pour faire le truc de stand down,
00:14:07elles sont robustes.
00:14:08Quel que soit l'objectif,
00:14:10qu'il soit frauduleux ou non,
00:14:12il a été conçu pour être dynamique et contrôlé via JSON par magasin,
00:14:17par fournisseur et par utilisateur.
00:14:19Mais bref, je veux faire un gros shout out à Magalega.
00:14:21C'était vraiment génial.
00:14:22J'ai pu discuter avec lui.
00:14:23Il m'a un peu aidé à examiner certaines choses.
00:14:25Donc gros shout out à lui.
00:14:26Vous devriez absolument regarder la vidéo.
00:14:27Elle est dans la description.
00:14:28Elle est super bien faite.
00:14:29Il y en a plusieurs et je vous recommande de toutes les regarder.
00:14:32Elles sont vraiment, vraiment bien.
00:14:33Aussi, vous aimez ce truc que j'ai fait ?
00:14:35Vous aimez ce format ?
00:14:36Je ne sais pas.
00:14:37C'est un peu nouveau.
00:14:38C'est juste moi qui passe du temps en stream,
00:14:40qui m'amuse et qui vous fait un compte-rendu ensuite.
00:14:42Si vous étiez sur le stream, vous auriez vu ça en direct.
00:14:44Ça aurait pu être beaucoup plus amusant pour vous.
00:14:45Le nom c'est : je ne suis pas un ingénieur en rétro-ingénierie,
00:14:48mais c'était super amusant.
00:14:50Je comprends pourquoi les gens font ça.
00:14:51À bientôt.
00:14:52Hé, c'est du HTTP ça ?
00:14:55Dégage-moi ça d'ici.
00:14:56C'est pas comme ça qu'on commande du café.
00:14:57On commande le café par SSH, terminal.shop.
00:15:00Ouais, tu veux une vraie expérience ?
00:15:02Tu veux du vrai café ?
00:15:03Tu veux un abonnement génial pour ne plus jamais avoir à y penser ?
00:15:06Oh,
00:15:07tu veux des mélanges exclusifs avec du café exclusif et du contenu exclusif ?
00:15:12Alors va voir CRON.
00:15:13Tu sais pas ce qu'est le SSH ?
00:15:14Eh bien, peut-être que le café n'est pas pour toi.
00:15:18♪ Café Terminal en main ♪ ♪ Vis le rêve ♪

Key Takeaway

L'analyse du code source de Honey révèle qu'entre 2019 et 2024, l'entreprise a délibérément transformé son système de désactivation sélective d'un code simple en une architecture sophistiquée pilotée par JSON, démontrant une intention claire de maintenir et perfectionner ce comportement controversé.

Highlights

Honey a progressivement amélioré son système de désactivation sélective entre 2019 et 2024, passant d'un code codé en dur à une configuration JSON dynamique

Le système vérifie les points utilisateur pour décider de se désactiver : utilisateurs non connectés nécessitent 65 000 points, mais seulement 5 001 points pour certains réseaux d'affiliation

Honey contient un moteur JavaScript complet (VIM) avec analyseur Acorn pour exécuter du code obscurci et contourner la détection

Les modifications du code démontrent une intention délibérée d'améliorer et maintenir ce comportement controversé plutôt qu'un simple bug oublié

Le code inclut des vérifications explicites pour bloquer les comptes de test contenant le mot 'test' dans leur email

La refonte de 2024 permet de piloter les règles de désactivation par magasin, par fournisseur et par utilisateur de manière dynamique

L'obscurcissement via JavaScript-dans-JavaScript semble conçu pour éviter la détection par les bloqueurs de publicités

Timeline

Introduction et contexte du scandale Honey

Le vidéaste présente son intention d'analyser le code source de l'extension Chrome Honey pour vérifier les accusations de vol de commissions d'affiliation. Il explique qu'en tant qu'extension Chrome, tout le code est accessible et qu'il peut examiner l'évolution historique pour déterminer si les comportements problématiques ont été intentionnellement améliorés. Avant de plonger dans l'analyse technique, il montre un extrait de trois minutes d'une vidéo de MegaLag révélant comment Honey se comporte différemment selon que l'utilisateur a ou non accumulé des points de cashback. Cette introduction établit le contexte du scandale : Honey vole des commissions aux influenceurs en contournant sélectivement les politiques de retrait des réseaux d'affiliation, et le code va révéler si c'était intentionnel ou accidentel.

Démonstration du comportement sélectif de Honey

L'extrait vidéo de MegaLag démontre concrètement le comportement frauduleux de Honey avec Newegg. Lorsqu'un utilisateur visite Newegg sans lien d'affiliation, Honey apparaît immédiatement avec une offre de cashback. Cependant, lorsqu'on utilise un lien d'affiliation, Honey se désactive correctement selon la politique de retrait. L'expérience cruciale utilise deux navigateurs Chrome avec des comptes Honey différents : un compte sans points de cashback se retire correctement, mais un compte avec des points accumulés refuse de se retirer malgré le lien d'affiliation actif. Cette démonstration prouve que Honey applique sélectivement les règles de retrait en fonction du statut de l'utilisateur, permettant de voler les commissions des affiliés tout en évitant de perdre les utilisateurs qui ont déjà investi dans leur système de points.

Méthodologie d'analyse et versions examinées

Le vidéaste explique sa méthodologie d'analyse en ayant collecté plusieurs versions de l'extension Honey, de février 2019 (version 11) jusqu'à aujourd'hui (version 1901). Son objectif principal est de déterminer si la logique de vérification des points utilisateur existe réellement dans le code et surtout si elle a évolué au fil du temps. Il souligne l'importance de distinguer entre un code ancien oublié depuis des années (ce qui arrive dans les grandes entreprises) et des modifications intentionnelles démontrant une maintenance active. Cette approche historique permet de prouver l'intention derrière le comportement plutôt que de simplement constater son existence. L'utilisation de l'IA lui permet de parcourir le code minifié beaucoup plus rapidement qu'il ne l'aurait pu auparavant.

Structure du code en 2019 (version 11)

La version 11 de Honey (2019) contenait déjà la logique de désactivation SSD avec plusieurs champs clés : UP (points utilisateur), ADB (bloqueur de pub dernière utilisation), et statut de connexion du compte. Le code utilisait une énorme instruction switch avec des cas codés en dur pour différents scénarios, incluant une vérification explicite et suspecte pour désactiver tout compte email contenant le mot 'test' afin d'empêcher les testeurs de liens d'affiliation de détecter le comportement frauduleux. La logique fonctionnait en vérifiant le fournisseur actif (comme LinkShare 'LS'), appliquant des règles spécifiques à ce fournisseur, puis parcourant ces règles dans une boucle for pour déterminer si la désactivation devait avoir lieu. Cette approche primitive avec des conditions codées en dur comme 'si LinkShare, fais cette action' était typique d'un début de projet anticipant seulement quelques fournisseurs.

Période de stabilité 2019-2022

Entre les versions 11 et 14 (couvrant la période 2019-2022), le code est resté relativement constant avec seulement quelques petites modifications sans importance majeure. Cette période de trois ans sans changements significatifs aurait pu suggérer que le code était simplement oublié et laissé en maintenance minimale. Cependant, cette stabilité contraste fortement avec ce qui va suivre. Le vidéaste note que les règles de désactivation n'étaient pas très longues temporellement, renvoyant les spectateurs vers la vidéo de MegaLag pour les détails sur les politiques de retrait inadéquates. Cette période de stagnation devient importante rétrospectivement car elle démontre que l'entreprise a ensuite fait le choix délibéré d'investir massivement dans l'amélioration du système plutôt que de simplement le laisser mourir.

Grande refonte de 2024 (version 16)

À partir de la version 16 en 2024, Honey a effectué une refonte architecturale majeure remplaçant les instructions if codées en dur par un système piloté dynamiquement via un endpoint JSON. Le nouveau système utilise une classe de base définissant des comportements par défaut (65 000 points requis pour les utilisateurs non connectés), puis applique des modifications en cascade basées sur le réseau d'affiliation (réduisant à 5 001 points pour LinkShare) et même des règles spécifiques par boutique via la section 'X'. Cette approche d'ingénierie logicielle sophistiquée permet de prendre des décisions dynamiques sans modifier le code, utilisant un pattern de mutation d'objet où la configuration de base est progressivement enrichie selon le contexte (fournisseur, boutique, statut utilisateur). Le vidéaste reconnaît que c'est objectivement une meilleure ingénierie que l'approche précédente, mais souligne que cette sophistication prouve une intention délibérée d'améliorer et maintenir un système considéré comme frauduleux.

Découverte du moteur JavaScript VIM

Le vidéaste découvre avec surprise un composant appelé VIM (Virtual Instance Manager) qui s'avère être un moteur JavaScript complet tournant à l'intérieur de l'extension Honey. Ce système utilise Acorn, un analyseur JavaScript produisant un AST (Abstract Syntax Tree), pour évaluer du JavaScript et l'injecter dans ce moteur virtuel. Le code fait référence à des objets comme 'cart ops retrieval JS' et 'product ops retrieval JS' contenant parfois du code JavaScript réel sous forme de chaînes. Bien que le vidéaste ait tenté de définir des points d'arrêt pour observer l'exécution, il n'a jamais réussi à déclencher ce code, mais l'infrastructure est clairement présente. Cette découverte est particulièrement troublante car elle suggère que Honey a construit la capacité d'exécuter du code distant de manière hautement obscurcie, même si cette capacité n'est pas actuellement utilisée activement.

Analyse de l'obscurcissement et contournement du Manifest V3

Le code de Honey contient de nombreuses fonctions stockées sous forme de chaînes de caractères et livrées directement avec le produit plutôt que récupérées à distance, contournant techniquement les exigences du Manifest V3 de Chrome qui interdisent l'utilisation de JavaScript eval. Les exigences de Chrome stipulent spécifiquement qu'on ne devrait pas construire un interpréteur pour exécuter des commandes complexes récupérées depuis une source distante, mais Honey contourne cela en incluant ces chaînes directement dans l'extension. Le vidéaste qualifie cette approche d'obscurcissement délibéré, suggérant que le moteur JavaScript-dans-JavaScript sert à cacher certaines opérations d'autres extensions. Une théorie mentionnée est que cela permet d'éviter la détection par les bloqueurs de publicités qui pourraient bloquer Honey s'il exécutait directement certaines fonctions, mais l'interpréteur bizarre permet d'exécuter du code sans être détecté.

Conclusions et recommandations

Le vidéaste conclut que les règles dynamiques de désactivation sont extrêmement robustes et conçues pour être contrôlées via JSON par magasin, par fournisseur et par utilisateur, démontrant une intention claire de maintenir ce comportement quel que soit son caractère frauduleux. Il qualifie cette architecture de la machine la plus complexe et bizarre de type Rube Goldberg qu'il ait jamais vue, surpassant même des bases de code de plus de 10 000 lignes de machines à états difficiles avec lesquelles il a travaillé. Les modifications apportées au fil du temps ne sont pas de simples corrections de bugs mais des améliorations architecturales significatives visant à rendre le système plus robuste et meilleur. Il remercie MegaLag pour son aide et encourage les spectateurs à regarder les vidéos originales détaillant le scandale, tout en demandant des retours sur ce nouveau format d'analyse de code en reverse engineering.

Publicité Terminal.shop et conclusion

La vidéo se termine par une publicité humoristique pour Terminal.shop, un service de café commandable via SSH dans le terminal plutôt que par HTTP. Le vidéaste présente de manière exagérée et comique les avantages d'un abonnement café avec des mélanges exclusifs et du contenu exclusif, en plaisantant que si quelqu'un ne connaît pas le SSH, le café n'est peut-être pas pour lui. Cette transition légère contraste avec le contenu technique sérieux précédent, offrant une pause humoristique après l'analyse approfondie du code de Honey. Le segment se termine par une chanson jingle sur le café Terminal, marquant clairement la fin du contenu principal et servant de transition vers la sponsorisation.

Community Posts

View all posts