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 ♪