Leí el Código Fuente de Honey

TThe PrimeTime
Computing/SoftwareAdvertising/MarketingInternet Technology

Transcript

00:00:00(sonido de teclado) Quería echarle un vistazo a este gran escándalo de Honey que está ocurriendo.
00:00:12Si no estás familiarizado con Honey,
00:00:14Honey es una de esas extensiones de Chrome para cupones,
00:00:16lo que significa que todo su código está disponible para que yo lo revise.
00:00:19Así que puedo examinar las cosas que se están alegando en estos videos de YouTube y realmente puedo ver,
00:00:25¿está sucediendo esto?
00:00:26Pero más aún,
00:00:27cuando se trata de extensiones,
00:00:28puedo realmente revisar a lo largo del tiempo y ver,
00:00:32¿se estaban tomando estas malas decisiones y los ingenieros de software han hecho alteraciones no solo para continuar,
00:00:39sino para hacer estos comportamientos malos aún mejores y más robustos?
00:00:44Sí, así es.
00:00:45Y les voy a mostrar cómo ha sucedido eso.
00:00:47Pero sé que hay muchos de ustedes que probablemente no tienen idea de lo que está pasando.
00:00:50Realmente ni siquiera están familiarizados con Honey.
00:00:52Y entonces no, nunca han estado realmente al tanto.
00:00:55Esto en realidad involucra una operación muy específica de Honey que quiero repasar.
00:00:59Así que en realidad vamos a ver un extracto de tres minutos de este último video revelador sobre Honey.
00:01:05Y luego voy a hablar sobre revisar el código minificado y exactamente lo que encontré y la intención detrás de ello,
00:01:10lo cual es un poco sorprendente.
00:01:12Ahora bien,
00:01:12si hay algo que la gente odia más que el engaño,
00:01:15es el robo.
00:01:15Y en mi primer video,
00:01:16les mostré cómo Honey estaba robando dinero a los influencers.
00:01:19Pero lo que no les dije es que este comportamiento,
00:01:22en la mayoría de los casos,
00:01:23estrictamente no está permitido.
00:01:25Verán,
00:01:25las compañías que manejan esta industria,
00:01:27las redes de afiliados,
00:01:28saben muy bien que las extensiones de cupones como Honey tienen una alta probabilidad de robar comisiones de influencers,
00:01:34blogueros y otros afiliados impulsados por contenido.
00:01:37Más importante aún,
00:01:38también entienden que esto no es justo,
00:01:40especialmente bajo la política del último clic gana,
00:01:43que ha permanecido como un estándar de la industria.
00:01:46Así que para prevenir este tipo de robo de comisiones,
00:01:48la mayoría de las principales redes de afiliados aplican lo que se conoce como una política de repliegue.
00:01:53Déjenme mostrarles cómo se ve eso en Honey.
00:01:55Visitemos newegg.com primero sin un enlace de afiliado.
00:01:58Y como pueden ver,
00:01:59Honey aparece inmediatamente ofreciendo reembolso.
00:02:02Pero si hacemos esto de nuevo,
00:02:03esta vez usando mi enlace de afiliado para Newegg,
00:02:06notarán que Honey no aparece en absoluto.
00:02:08Y si hacemos clic en el ícono de Honey,
00:02:10pueden ver que Honey ahora está deshabilitado.
00:02:12Así es como se supone que Honey debe comportarse cuando un usuario ya ha hecho clic en el enlace de afiliado de otra persona.
00:02:17Entonces, ¿dónde está el supuesto fraude, preguntan?
00:02:20Bueno,
00:02:20resulta que Honey siempre ha tenido un sistema de repliegue incorporado en su aplicación,
00:02:25pero han estado eligiendo selectivamente cuándo y a quién aplicar las reglas.
00:02:28Probemos mi enlace de afiliado para Newegg de nuevo.
00:02:31Solo que esta vez tengo dos navegadores Chrome completamente separados abiertos al mismo tiempo,
00:02:36y cada uno está conectado a una cuenta de Honey diferente.
00:02:38La cuenta de Honey de la izquierda tiene cero puntos de reembolso,
00:02:41mientras que la cuenta de Honey de la derecha ha acumulado puntos de reembolso.
00:02:45Ahora,
00:02:45¿qué pasa cuando abro el enlace de afiliado de Newegg en ambos navegadores?
00:02:49La cuenta de Honey de la izquierda se repliega como lo hizo la primera vez.
00:02:52Pero miren esto,
00:02:53la cuenta de la derecha,
00:02:55que tiene puntos de reembolso,
00:02:57no se replegó.
00:02:58Entonces, ¿por qué es eso?
00:02:59Así que esto es lo que quería probar.
00:03:01Quería revisar esto porque esto es código.
00:03:03Puedo entender el código.
00:03:05Puedo mirar el JSON que está llegando y puedo entenderlo.
00:03:09No solo eso,
00:03:09sino que el poder de la IA me permitirá buscar a través de código minificado a velocidades desconocidas para mí a lo largo de todo mi universo de programación.
00:03:18Así que lo que hicimos fue que primero conseguimos un montón de versiones de Honey.
00:03:22Las que revisé comenzaron desde aproximadamente febrero de 2019,
00:03:27hasta el día de hoy,
00:03:281901.
00:03:29Y con eso,
00:03:29lo que quería hacer era ir,
00:03:31bien,
00:03:31primero que nada,
00:03:32¿existe esto de los puntos del usuario que decide cuándo mostrar y cuándo no mostrar el menú de repliegue?
00:03:38Sí, existe bastante.
00:03:40Pero la verdadera pregunta era, ¿había cambiado?
00:03:43Porque trabajé en una gran empresa,
00:03:44he trabajado en una gran empresa,
00:03:45¿verdad?
00:03:46Tú has trabajado en una gran empresa,
00:03:47estoy seguro de que sí,
00:03:48o algunos de ustedes lo han hecho,
00:03:49y saben que a veces el código simplemente se queda ahí..
00:03:50Ya sabes,
00:03:51es como ups,
00:03:51simplemente sigue ahí,
00:03:53nadie lo ha cambiado en cinco años,
00:03:54así son las cosas.
00:03:55Y eso es más o menos lo que estaba buscando,
00:03:58es decir,
00:03:58¿se quedó el código ahí?
00:04:00¿O ha habido cambios que fueron significativos?
00:04:03No como pequeñas correcciones de errores.
00:04:05Muy bien,
00:04:05así que para evitar problemas de derechos de autor,
00:04:07porque aparentemente los abogados de PayPal van a demandar,
00:04:10les meten el DMCA,
00:04:11a cualquiera que realmente muestre el código.
00:04:13Eso significa que tengo que hacer esta extraña pantomima en la vieja pizarra para mostrarles lo que estaba pasando.
00:04:18Así que comenzando en la versión 11,
00:04:20recuerden,
00:04:21que es aproximadamente 2019,
00:04:22esta versión sí tenía la lógica de stand down.
00:04:25Incluso tenía cosas que se llamaban lógicas de stand down SSD.
00:04:29Coincidía con el archivo JSON que se descarga con un montón de datos.
00:04:32Aquí está mi stand down de un usuario que ni siquiera ha iniciado sesión,
00:04:36las cosas más básicas.
00:04:38Aquí pueden ver que UP es puntos de usuario.
00:04:41ADB es como la última vez que se usó el bloqueador de anuncios.
00:04:45También está si la cuenta ha iniciado sesión.
00:04:47Y hay algunos otros campos que parecen aparecer de vez en cuando.
00:04:50Entonces,
00:04:50lo interesante es que en 2019 bajo la versión 11,
00:04:53las cosas a menudo se veían así.
00:04:55Hay como una declaración switch gigante que terminaba teniendo estos casos donde es como,
00:04:59ok,
00:05:00oye,
00:05:00¿probamos si hay un correo electrónico?
00:05:02Y sí, literalmente tenía una cadena de texto.
00:05:04¿Este correo contiene test?
00:05:06Entonces siempre hacer stand down,
00:05:08lo cual,
00:05:08por cierto,
00:05:09es turbio.
00:05:10Está evitando que estas cuentas de prueba de enlace entren y puedan tener como link share test para ir a ver si esto realmente funciona.
00:05:16Porque seamos sinceros,
00:05:17¿quién aquí no ha tenido una cuenta de prueba que no contenga la palabra test?
00:05:20Yo ciertamente la he tenido.
00:05:22Pero aun así, esto de aquí era una verificación explícita.
00:05:24Si tienes la palabra test en tu correo en cualquier parte,
00:05:28te deshabilitará.
00:05:29Pero más que eso,
00:05:29quiero decir,
00:05:30esto ya se habló,
00:05:31pero más que eso,
00:05:32las cosas que eran realmente confusas es que pasaba por una serie de verificaciones y era como,
00:05:36oye,
00:05:37¿el proveedor que está actualmente activo es igual a LS,
00:05:40que es link share?
00:05:41Si lo es, quiero que apliques exactamente estas reglas.
00:05:44Y luego más adelante,
00:05:45tenía esta verificación donde pasaba por todas las reglas que había descubierto,
00:05:49y luego iba una por una en un pequeño bucle for revisando cada una de estas reglas y verificando,
00:05:54¿alguna de ellas falla?
00:05:55Si alguna de ellas fallaba, hacía stand down.
00:05:57Así que este era un proceso bastante codificado de forma rígida,
00:06:01como pueden ver,
00:06:01porque había como una línea literal que decía,
00:06:04si es link share,
00:06:05haz esta acción.
00:06:06Si estamos en este otro proveedor, haz algo diferente.
00:06:08Ahora,
00:06:09por supuesto he estado en muchos,
00:06:10muchos proyectos donde este tipo de cosas simplemente pasan.
00:06:12Esto es totalmente normal.
00:06:14Empiezas donde estás como,
00:06:15ok,
00:06:15oye,
00:06:16podríamos tener uno o dos proveedores y eso es todo.
00:06:18Así que solo pondré un par de casos extremos codificados de forma rígida aquí y nos aseguraremos de que las cosas se manejen de cierta manera.
00:06:24Hacemos stand down por cierta cantidad de duración,
00:06:26que por cierto,
00:06:26no era una parte muy larga.
00:06:27Deberían ver el video de MegaLag para descubrir exactamente qué tan terribles eran realmente las reglas.
00:06:34Pero de nuevo,
00:06:35mi objetivo es ir,
00:06:35ok,
00:06:36¿hicieron cambios al código donde hubo correcciones de errores?
00:06:39¿Qué pasó?
00:06:40Bueno,
00:06:40aquí es donde las cosas se ponen un poco confusas porque entre las versiones 11 hasta la 14,
00:06:46que creo que es hasta 2022,
00:06:48sí,
00:06:482022,
00:06:49las cosas se mantuvieron bastante constantes.
00:06:52Realmente nada cambió,
00:06:53un poco de ediciones,
00:06:54nada que realmente mostrara mucho.
00:06:56Pero comenzando alrededor de,
00:06:58creo que en la versión 16,
00:06:59entonces en 2024,
00:07:00se hizo una refactorización robusta de tal manera que pueden impulsar muchas de estas decisiones desde un endpoint en Honey.
00:07:07Ahora este endpoint envía un objeto que se ve así,
00:07:10que tiene este valor base,
00:07:12luego tiene estos valores,
00:07:14luego tiene estos valores bajo X.
00:07:16Eso significa que la versión anterior usaba un montón de series de declaraciones if para determinar el tipo de comportamientos que quería hacer.
00:07:23Y luego haría una evaluación de reglas para ver,
00:07:26¿realmente pasó esta regla?
00:07:28¿Realmente obtuvimos un verdadero o un falso?
00:07:30Pero en la versión 16,
00:07:31decidieron ponerse un poco más serios en cuanto a ingeniería de software.
00:07:36Ahora,
00:07:36todos sabemos qué haces cuando tienes un montón de declaraciones if que están haciendo este tipo de envoltorio de datos y realizando una mutación básica en un objeto,
00:07:44¿no?
00:07:45Bueno,
00:07:45querrías manejarlo a través de algún tipo de configuración.
00:07:48Querrías manejarlo a través de algo que sea un poco más dinámico para hacerlo un poco más fácil.
00:07:52Y eso es exactamente lo que hicieron.
00:07:53Así que si volvemos aquí y miramos los datos que vienen de mí,
00:07:56un usuario de Honey sin iniciar sesión,
00:07:58verás justo aquí que tengo una clase base.
00:08:00Esta clase base se convertirá en el objeto base para cómo Honey determina las cosas.
00:08:05Ahora mismo,
00:08:06para esta clase base de usuario sin iniciar sesión,
00:08:09requiero 65,
00:08:10000 puntos de usuario para que Honey no se retire.
00:08:13Si tengo menos de 65,
00:08:14000 puntos,
00:08:14recuerda que no he iniciado sesión así que tengo cero puntos,
00:08:17dirá: lo siento,
00:08:18me retiro.
00:08:18Voy a evitar esto.
00:08:20Ahora,
00:08:20cuando obtiene esa base,
00:08:22lo que hace entonces es verificar ¿cómo llegamos aquí?
00:08:25¿De dónde llegamos aquí?
00:08:27¿Por qué llegamos aquí?
00:08:28Y hace la siguiente verificación: ¿esto vino de una de estas redes de afiliados?
00:08:32Y entonces comenzará a envolver cosas.
00:08:33Entonces,
00:08:34bien,
00:08:34si vengo de un sitio de link share,
00:08:36ahora solo hará que mis puntos requeridos sean 5,
00:08:39001.
00:08:40Editará este objeto base.
00:08:41De hecho,
00:08:42está haciendo la ingeniería mejor y más sofisticada.
00:08:44Ya no es una serie de declaraciones if codificadas de forma rígida.
00:08:48En cambio, está haciendo un auténtico: oye, toma dot base.
00:08:51Luego quiero decir, ¿tienes mi proveedor?
00:08:55Si tienes mi proveedor,
00:08:56quiero expandir los valores de mi proveedor o simplemente un objeto vacío.
00:09:01Y luego hizo algo aún más salvaje,
00:09:04que es todo esto de aquí debajo de X.
00:09:07Estos son todos valores específicos de la tienda.
00:09:09Entonces verificaría: oye,
00:09:11sea cual sea la tienda en la que estoy actualmente,
00:09:14también quiero agregar esos valores.
00:09:17Y luego iría y haría la lógica básica de reglas,
00:09:19mostrando que ya no está bajo algún tipo de modo de mantenimiento.
00:09:23Está mostrando que ya no es este tipo de cosa hacky codificada rígidamente que ha existido durante como una década.
00:09:29En cambio, pasaron de eso.
00:09:31Y en 2024, dijeron, ¿sabes qué?
00:09:33Necesitamos ser más robustos y necesitamos poder tomar más decisiones sobre más tiendas y más proveedores de una manera más fácil de mantener.
00:09:43Esto fue ingeniería de software, gente, y lo hicieron.
00:09:46Así que cuando miro esto,
00:09:47lo que veo es que con el tiempo,
00:09:49han hecho cambios para mejorar su sistema,
00:09:51lo que significa que hay una intención detrás de ello.
00:09:54Quieren mantener lo que sea que el sistema esté haciendo,
00:09:57ya sea o no fraudulento.
00:09:59No puedo decir eso,
00:10:00es algo que alguien más debe decidir,
00:10:02pero al menos puedo decir que sus decisiones han sido hacerlo más robusto y mejor.
00:10:07Y dado el hecho de que la percepción general de este sistema es que es bastante turbio,
00:10:12han hecho que su sistema bastante turbio sea mucho,
00:10:15mucho mejor.
00:10:16Pero eso no es todo lo que encontré.
00:10:17Encontré algo más que despertó mi interés.
00:10:19Seguía viendo la palabra VIM que simplemente seguía apareciendo.
00:10:23Ahora estoy como: VIM,
00:10:24¿qué está haciendo el editor de texto?
00:10:26Cuando le pregunté a Claude Code al respecto,
00:10:28en realidad dijo: oye,
00:10:30estás hablando del gestor de instancias VIM que se ha encontrado dentro de Honey.
00:10:34Y yo estaba como: gestor de instancias VIM.
00:10:35Bien, eso no puede ser.
00:10:37Eso no es.
00:10:38Y luego,
00:10:39a medida que empecé a mirar esto,
00:10:41lo que terminé viendo es que hay un motor completo de JavaScript dentro de JavaScript que se ejecuta dentro del plugin de Honey.
00:10:49Ahora,
00:10:50esto es absolutamente lo más extraño que he visto jamás.
00:10:54Intenté leer un poco al respecto.
00:10:56No soy un experto desarrollador de plugins cuando se trata de Chrome.
00:10:59Así que no tenía idea de por qué alguien ejecutaría JavaScript dentro de JavaScript.
00:11:05Pero lo que Honey hace es que en realidad tiene Acorn,
00:11:09que es un analizador de JavaScript y produce un AST a partir de JavaScript válido.
00:11:14Y toma esto,
00:11:15evalúa JavaScript y luego lo alimenta a este motor VIM.
00:11:19Ahora hay varias referencias dentro del código que en realidad hacen referencia a este otro objeto llamado cart ops retrieval JS y product ops retrieval JS,
00:11:28que a veces no es nulo,
00:11:30en realidad contiene código.
00:11:31Y también hace referencia a este código JS,
00:11:34que también a veces no es nulo,
00:11:35como justo aquí,
00:11:36es JavaScript real de verdad.
00:11:38Pero por lo que pude ver,
00:11:39en realidad no está ejecutando nada de este código.
00:11:41Intenté establecer algunos puntos de interrupción.
00:11:42Nunca llegué al punto de crear un activador,
00:11:45pero de todos modos,
00:11:46esto existe.
00:11:47Tienen el aparato configurado para poder ejecutar código remoto en tu máquina basado en lo que devuelva Honey de una manera muy,
00:11:56muy ofuscada.
00:11:57Este JavaScript dentro de JavaScript,
00:11:59tienen un analizador de JavaScript.
00:12:00Tienen una máquina virtual de JavaScript.
00:12:03Es JavaScript real dentro del JavaScript.
00:12:06Pero también tienen esta sección donde hay simplemente un montón de funciones convertidas en cadenas de texto.
00:12:11Y hay un montón de JavaScript en línea que está lleno de formas en las que buscan a través de páginas y cosas así.
00:12:18Pero esas vienen con el producto.
00:12:22Así que técnicamente no van contra los antiguos términos de servicio de Google.
00:12:26Porque si miras los requisitos adicionales del manifest V3 para cualquiera que esté haciendo esto,
00:12:31es que no deberías poder usar JavaScript eval.
00:12:33Bueno, entonces no vamos a hacer eso.
00:12:34No vamos a usar eval.
00:12:35Lo que vamos a hacer es codificar de forma fija algunas operaciones que no queremos que otros plugins sepan que estamos haciendo.
00:12:40Y luego vamos a incorporar un motor completo de JavaScript para ejecutarlas y así ofuscar aún más lo que estamos haciendo.
00:12:47Lo cual es gracioso porque este V3 justo aquí,
00:12:49parece que fue diseñado específicamente para Honey porque dice construir un intérprete para ejecutar comandos complejos obtenidos de una fuente remota,
00:12:56incluso si esos comandos se obtienen como datos.
00:12:59Así que se lo saltan.
00:13:00Estas no son cosas remotas.
00:13:01Son cadenas de texto que en realidad están disponibles dentro de la extensión de Honey.
00:13:05Pero hombre, esto es pura ofuscación.
00:13:07Esto es algo muy raro.
00:13:09Personalmente no puedo entender ni una sola razón de por qué esto está pasando en realidad.
00:13:14Como dije,
00:13:14aparentemente se debe a interacciones con otras extensiones,
00:13:17otras extensiones que son bloqueadores de anuncios.
00:13:19Aparentemente los bloqueadores de anuncios podrían bloquear la extensión de Honey si ejecuta directamente ciertas funciones,
00:13:25pero de alguna manera a través de este intérprete raro,
00:13:28es capaz de ejecutar cosas que logran evitar ser detectadas.
00:13:31No lo sé, pero me parece un desastre total.
00:13:34Y encontré esto muy,
00:13:34muy interesante porque nunca he hecho ningún tipo de ingeniería inversa.
00:13:37Nunca he revisado realmente el código fuente de otra persona,
00:13:39especialmente código fuente minificado.
00:13:41Solo quería mostrarles esto.
00:13:42Esta es quizás la ingeniería más inusual que he visto en mi vida.
00:13:46He sido parte de bases de código que tienen más de diez mil líneas de máquinas de estado raras y con las que es imposible trabajar,
00:13:54difíciles de razonar,
00:13:55pero esto se lleva el premio.
00:13:57Esto tiene que ser el artilugio más complejo y extraño,
00:14:00nivel máquina de Rube Goldberg que jamás haya visto.
00:14:03Pero además,
00:14:04las reglas dinámicas para hacer el tema de la desactivación,
00:14:07son robustas.
00:14:08Cualquiera que sea el propósito,
00:14:10sea o no fraudulento,
00:14:12ha sido diseñado para ser dinámico y controlado mediante JSON por tienda,
00:14:17por proveedor y por usuario.
00:14:19Pero en fin, quiero darle un saludo especial a Magalega.
00:14:21Fue realmente genial.
00:14:22Pude conversar con él.
00:14:23Me ayudó un poco revisando algunas cosas.
00:14:25Así que un gran saludo para él.
00:14:26Definitivamente deberías ver el video.
00:14:27Está en la descripción.
00:14:28Está súper bien hecho.
00:14:29Hay varios de ellos y recomiendo que los veas todos.
00:14:32Son muy, muy buenos.
00:14:33Además, ¿te gusta esto que hice?
00:14:35¿Te gusta este formato?
00:14:36No lo sé.
00:14:37Esto es algo nuevo.
00:14:38Esto es simplemente yo pasando algo de tiempo en stream,
00:14:40divirtiéndome y luego informándoles.
00:14:42Si hubieras estado en el stream,
00:14:43habrías visto esto suceder en vivo.
00:14:44Podría haber sido mucho más divertido para ti.
00:14:45El nombre es No soy un ingeniero inverso,
00:14:48pero esto fue muy divertido.
00:14:50Puedo ver por qué la gente lo hace.
00:14:51Una joya.
00:14:52Oye, ¿eso es HTTP?
00:14:55Saca eso de aquí.
00:14:56Así no se pide café.
00:14:57Pedimos café por SSH, terminal.shop.
00:15:00Sí, ¿quieres una experiencia real?
00:15:02¿Quieres café de verdad?
00:15:03¿Quieres una suscripción increíble para no tener que recordarlo nunca más?
00:15:06Oh,
00:15:07¿quieres mezclas exclusivas con café exclusivo y contenido exclusivo?
00:15:12Entonces échale un vistazo a CRON.
00:15:13¿No sabes qué es SSH?
00:15:14Bueno, quizás el café no es para ti.
00:15:18♪ Café terminal en mano ♪ ♪ Vive el sueño ♪

Key Takeaway

El análisis del código fuente de Honey revela que su sistema de robo de comisiones de afiliados evolucionó de código rígido a un sistema dinámico sofisticado en 2024, e incluye un intérprete JavaScript oculto para ofuscar sus operaciones.

Highlights

Honey tiene un sistema de repliegue selectivo que se comporta diferente según los puntos de recompensa del usuario

El código evolucionó de verificaciones codificadas rígidamente en 2019 a un sistema dinámico basado en JSON en 2024

Honey bloquea cuentas con 'test' en el correo para evitar detección por afiliados que prueban sus enlaces

La extensión contiene un intérprete completo de JavaScript (VIM) ejecutándose dentro de JavaScript para ofuscar operaciones

Los cambios de ingeniería en 2024 demuestran intención deliberada de mantener y mejorar el comportamiento cuestionable

Honey usa configuraciones específicas por tienda y proveedor que requieren diferentes cantidades de puntos de usuario para desactivarse

El sistema cumple técnicamente con Manifest V3 pero usa ofuscación extrema para evitar detección de otras extensiones

Timeline

Introducción y contexto del escándalo de Honey

El presentador explica que analizará el código fuente de Honey, una extensión de Chrome para cupones, porque todo su código está disponible públicamente. Menciona que puede revisar las alegaciones hechas en videos de YouTube y verificar si realmente están ocurriendo estos comportamientos cuestionables. Además, puede examinar cómo el código ha evolucionado con el tiempo para determinar si los ingenieros han hecho cambios deliberados para mejorar estos comportamientos problemáticos. Introduce un extracto de tres minutos de un video revelador sobre Honey para proporcionar contexto sobre las acusaciones de robo de comisiones a influencers y el uso selectivo de políticas de repliegue.

Demostración del comportamiento selectivo de repliegue

Se muestra evidencia de cómo Honey se comporta de manera diferente según el estado de la cuenta del usuario. El video demuestra que cuando se visita Newegg.com sin enlace de afiliado, Honey aparece ofreciendo reembolso, pero con un enlace de afiliado, Honey se desactiva correctamente. Sin embargo, al probar con dos navegadores simultáneamente usando diferentes cuentas de Honey, la cuenta sin puntos se desactiva apropiadamente, mientras que la cuenta con puntos de recompensa acumulados NO se desactiva, robando así la comisión del afiliado. Esta demostración evidencia que Honey elige selectivamente cuándo aplicar las reglas de repliegue basándose en si el usuario tiene puntos de recompensa.

Metodología de análisis del código

El presentador explica su metodología para revisar el código de Honey, comenzando desde versiones de febrero de 2019 hasta la versión actual 1901. Su objetivo principal es determinar si el código problemático simplemente quedó abandonado (como sucede en muchas empresas grandes) o si hubo cambios significativos e intencionales a lo largo del tiempo. Menciona que usará IA para buscar a través del código minificado a velocidades sin precedentes. También explica que mostrará sus hallazgos en una pizarra para evitar problemas de derechos de autor, ya que aparentemente los abogados de PayPal están demandando a quienes muestran el código directamente.

Análisis de la versión 11 (2019) - Código original

La versión 11 de 2019 contenía lógica de repliegue (stand down) con archivos JSON que incluían campos como UP (puntos de usuario), ADB (última vez que se usó bloqueador de anuncios) y estado de inicio de sesión. El código usaba una declaración switch gigante con verificaciones explícitas, incluyendo una verificación turbia que bloqueaba cualquier correo que contuviera la palabra 'test', evitando así que afiliados pudieran probar si sus enlaces funcionaban correctamente. El sistema tenía verificaciones codificadas de forma rígida para proveedores específicos como LinkShare (LS), y procesaba reglas en un bucle que verificaba cada una, desactivándose si alguna fallaba. Esta estructura rígida era típica de proyectos iniciales con pocos proveedores.

Evolución del código hasta 2024

Entre las versiones 11 y 14 (hasta 2022), el código se mantuvo relativamente constante sin cambios significativos. Sin embargo, comenzando con la versión 16 en 2024, se realizó una refactorización robusta que permitió impulsar decisiones desde un endpoint en Honey. Este nuevo sistema envía un objeto JSON complejo con valores base y valores específicos bajo diferentes categorías. El cambio representa una transición de código rígido con múltiples declaraciones if a un sistema más dinámico y configurable basado en datos del servidor, demostrando una evolución deliberada hacia mayor sofisticación técnica.

Sistema dinámico basado en configuración (2024)

El sistema refactorizado de 2024 funciona estableciendo una clase base que determina comportamientos predeterminados, como requerir 65,000 puntos de usuario para no desactivarse (usuarios sin iniciar sesión tienen 0 puntos, por lo que Honey se desactiva). Luego el sistema verifica de qué red de afiliados llegó el usuario y envuelve el objeto base con valores específicos del proveedor. Por ejemplo, si viene de LinkShare, reduce el requisito a solo 5,001 puntos. Además, el sistema incorpora valores específicos de tiendas individuales bajo la sección 'X'. Esta ingeniería más sofisticada reemplazó las declaraciones if codificadas rígidamente con un sistema auténtico de expansión de objetos basado en configuración JSON, haciendo el sistema más fácil de mantener y más robusto.

Evidencia de intención deliberada

El presentador concluye que los cambios a lo largo del tiempo demuestran clara intención detrás del sistema. En 2024, los desarrolladores hicieron el sistema más robusto, mejor y más mantenible, pasando de código hacky que existió por casi una década a un sistema de ingeniería de software apropiado. Pueden ahora tomar decisiones sobre más tiendas y proveedores de manera más fácil. Aunque el presentador no puede declarar si esto es fraudulento legalmente, puede afirmar con certeza que las decisiones han sido hacer el sistema turbio mucho mejor y más sofisticado. Esta evolución deliberada contradice la posibilidad de que sea simplemente código antiguo olvidado.

Descubrimiento del intérprete VIM

El presentador encontró algo inesperado: referencias constantes a 'VIM' en el código, que resultó no ser el editor de texto sino un 'gestor de instancias VIM'. Al investigar, descubrió que Honey contiene un motor completo de JavaScript ejecutándose dentro de JavaScript. Este hallazgo lo describe como 'lo más extraño que he visto jamás' en su carrera. La extensión utiliza Acorn, un analizador de JavaScript que produce un AST (árbol de sintaxis abstracta) a partir de código JavaScript válido, y luego alimenta este código al motor VIM para ejecutarlo. El presentador admite no ser experto en desarrollo de plugins de Chrome y no entender inicialmente por qué alguien ejecutaría JavaScript dentro de JavaScript.

Capacidad de ejecución remota de código

Dentro del código hay referencias a objetos llamados 'cart ops retrieval JS' y 'product ops retrieval JS' que a veces contienen código JavaScript real. Aunque el presentador no pudo activar este código mediante puntos de interrupción durante sus pruebas, el aparato existe completamente configurado. Esto significa que Honey tiene la capacidad técnica de ejecutar código remoto en la máquina del usuario basado en lo que sus servidores devuelvan, de manera muy ofuscada. Este sistema de JavaScript dentro de JavaScript, con su propio analizador y máquina virtual, representa una capacidad extremadamente preocupante. Además, hay secciones con funciones convertidas en cadenas de texto y JavaScript en línea para buscar en páginas web.

Evasión de políticas de Manifest V3

Técnicamente este sistema no viola los términos de servicio antiguos de Google porque las funciones vienen incluidas con el producto en lugar de ser descargadas remotamente. Los requisitos de Manifest V3 prohíben usar JavaScript eval, así que Honey evita esto codificando de forma rígida operaciones que no quiere que otros plugins detecten, luego usa un motor completo de JavaScript para ejecutarlas y ofuscar aún más sus acciones. Irónicamente, el documento V3 específicamente menciona 'construir un intérprete para ejecutar comandos complejos obtenidos de una fuente remota', y Honey argumenta que estas no son cosas remotas sino cadenas disponibles dentro de la extensión. Sin embargo, el presentador considera esto pura ofuscación y algo muy extraño sin razón justificable.

Teoría sobre interacción con bloqueadores de anuncios

Aparentemente este sistema inusual existe debido a interacciones con otras extensiones, específicamente bloqueadores de anuncios. Los bloqueadores de anuncios podrían bloquear la extensión de Honey si ejecuta directamente ciertas funciones, pero de alguna manera a través de este intérprete extraño, Honey logra ejecutar operaciones que evitan ser detectadas. El presentador admite no comprender completamente esta justificación y la considera un desastre total. Enfatiza que nunca había hecho ingeniería inversa ni revisado código fuente minificado de otra persona antes. Describe esto como quizás la ingeniería más inusual que ha visto en su vida, incluso comparándola con bases de código de más de 10,000 líneas de máquinas de estado imposibles de mantener.

Conclusiones y reconocimientos finales

El presentador concluye que este es el artilugio más complejo nivel 'máquina de Rube Goldberg' que jamás haya visto. Resume que las reglas dinámicas para el sistema de desactivación son robustas y, cualquiera que sea su propósito (fraudulento o no), han sido diseñadas para ser controladas dinámicamente mediante JSON por tienda, por proveedor y por usuario. Da un saludo especial a MegaLag, con quien pudo conversar y quien lo ayudó revisando algunas cosas, recomendando ver sus videos que están enlazados en la descripción. Pregunta a la audiencia si les gusta este formato nuevo de contenido basado en streams, invitándolos a su canal de Twitch. Termina con un anuncio humorístico de café de terminal.shop, bromeando sobre pedir café por SSH y mencionando suscripciones y contenido exclusivo.

Community Posts

View all posts