Eu Li o Código Fonte do Honey

TThe PrimeTime
Computing/SoftwareAdvertising/MarketingInternet Technology

Transcript

00:00:00(teclado digitando) Então,
00:00:03eu quis dar uma olhada nesse grande escândalo do Honey que está acontecendo.
00:00:12Se você não conhece o Honey,
00:00:14Honey é uma daquelas extensões de cupons do Chrome,
00:00:16o que significa que todo o seu código está disponível para eu analisar.
00:00:19E assim posso verificar as coisas que estão sendo alegadas nesses vídeos do YouTube e realmente ver: isso está acontecendo?
00:00:26Mas além disso,
00:00:27quando se trata de extensões,
00:00:28posso realmente observar ao longo do tempo e ver: essas decisões ruins estavam sendo tomadas e os engenheiros de software fizeram alterações não apenas para continuar,
00:00:39mas para tornar esses comportamentos ruins ainda melhores e mais robustos?
00:00:44Sim, fizeram.
00:00:45E vou mostrar como isso aconteceu.
00:00:47Mas sei que há muitos de vocês que provavelmente não têm ideia do que está acontecendo.
00:00:50Você não está realmente familiarizado com o Honey.
00:00:52E então você nunca realmente ficou por dentro.
00:00:55Isso na verdade envolve uma operação muito específica do Honey que quero abordar.
00:00:59Então vamos assistir a um trecho de três minutos deste último vídeo de revelação sobre o Honey.
00:01:05E depois vou falar sobre examinar o código minificado e exatamente o que encontrei e a intenção por trás disso,
00:01:10o que é um tanto surpreendente.
00:01:12Agora,
00:01:12se há uma coisa que as pessoas odeiam mais do que engano,
00:01:15é roubo.
00:01:15E no meu primeiro vídeo,
00:01:16mostrei como o Honey estava roubando dinheiro de influenciadores.
00:01:19Mas o que não contei é que esse comportamento,
00:01:22na maioria dos casos,
00:01:23é estritamente proibido.
00:01:25Veja bem,
00:01:25as empresas que administram essa indústria,
00:01:27as redes de afiliados,
00:01:28sabem muito bem que extensões de cupons como o Honey têm uma alta probabilidade de roubar comissões de influenciadores,
00:01:34blogueiros e outros afiliados focados em conteúdo.
00:01:37Mais importante ainda,
00:01:38elas também entendem que isso não é justo,
00:01:40especialmente sob a política de "último clique ganha",
00:01:44que permanece como padrão da indústria.
00:01:46Então,
00:01:47para evitar esse tipo de roubo de comissão,
00:01:49a maioria das principais redes de afiliados aplica o que é conhecido como política de recuo.
00:01:53Deixe-me mostrar como isso funciona no Honey.
00:01:55Vamos visitar o newegg.com primeiro sem um link de afiliado.
00:01:58E como você pode ver,
00:01:59o Honey aparece imediatamente oferecendo cashback.
00:02:02Mas se fizermos isso novamente,
00:02:03desta vez usando meu link de afiliado para o Newegg,
00:02:06você vai notar que o Honey não aparece.
00:02:08E se clicarmos no ícone do Honey,
00:02:10você pode ver que o Honey agora está desativado.
00:02:12Então é assim que o Honey deveria se comportar quando um usuário já clicou no link de afiliado de outra pessoa.
00:02:17Então, onde está a suposta fraude, você pergunta?
00:02:20Bem,
00:02:20acontece que o Honey sempre teve um sistema de recuo integrado em seu aplicativo,
00:02:25mas tem escolhido seletivamente quando e a quem aplicar as regras.
00:02:28Vamos testar meu link de afiliado para o Newegg novamente.
00:02:31Só que desta vez tenho dois navegadores Chrome totalmente separados abertos ao mesmo tempo,
00:02:36e cada um está conectado a uma conta Honey diferente.
00:02:38A conta Honey à esquerda tem zero pontos de cashback,
00:02:41enquanto a conta Honey à direita acumulou pontos de cashback.
00:02:45Agora,
00:02:45o que acontece quando abro o link de afiliado do Newegg em ambos os navegadores?
00:02:49A conta Honey à esquerda recua como fez da primeira vez.
00:02:52Mas olhe só,
00:02:53a conta à direita,
00:02:54que tem pontos de cashback,
00:02:56não recuou.
00:02:58Então, por que isso acontece?
00:02:59Então essa é a coisa que eu queria testar.
00:03:01Eu quis examinar isso porque isso é código.
00:03:03Eu entendo de código.
00:03:05Posso olhar o JSON que está sendo recebido e posso entendê-lo.
00:03:09Além disso,
00:03:09o poder da IA me permitirá pesquisar código minificado em velocidades desconhecidas para mim durante todo o meu universo de programação.
00:03:18Então o que fizemos foi conseguir várias versões do Honey.
00:03:22As que eu meio que examinei começaram por volta de fevereiro de 2019,
00:03:27até os dias atuais,
00:03:281901.
00:03:29E com isso,
00:03:29o que eu queria fazer era: ok,
00:03:31primeiro,
00:03:32esse tipo de ponto de usuário que decide quando mostrar ou não o menu de recuo,
00:03:38existe?
00:03:38Sim, existe.
00:03:40Mas a verdadeira pergunta era: tinha mudado?
00:03:43Porque eu trabalhei em uma grande empresa,
00:03:45eu trabalhei em uma grande empresa,
00:03:46certo,
00:03:46você trabalhou em uma grande empresa,
00:03:47tenho certeza que sim,
00:03:48ou alguns de vocês trabalharam,
00:03:49e vocês sabem que às vezes o código simplesmente fica por lá.
00:03:50Sabe como é,
00:03:51tipo opa,
00:03:51ainda está lá,
00:03:52ninguém mexeu naquilo há cinco anos,
00:03:54é assim que funciona.
00:03:55E era meio que isso que eu estava procurando,
00:03:58tipo,
00:03:58será que o código ficou por lá?
00:04:00Ou houve mudanças significativas?
00:04:03Não tipo pequenas correções de bugs.
00:04:05Tá,
00:04:05então para evitar problemas de direitos autorais,
00:04:07porque aparentemente os advogados do PayPal vão processar,
00:04:10mandar DMCA em cima de qualquer um que mostrar o código de fato.
00:04:13Isso significa que eu tenho que fazer essa charada estranha no velho quadro-negro para mostrar a vocês o que estava acontecendo.
00:04:18Então,
00:04:19começando na versão 11,
00:04:20lembram,
00:04:21que é lá de 2019,
00:04:22essa versão já tinha a lógica de stand down.
00:04:25Ela até tinha coisas que eram chamadas de lógicas de stand down SSD.
00:04:29Ela combinava com o arquivo JSON que vinha com um monte de dados.
00:04:32Aqui está o meu stand down de um usuário que nem está logado,
00:04:36o mais básico possível.
00:04:38Aqui dentro,
00:04:38você pode ver que UP é user points,
00:04:40pontos do usuário.
00:04:41ADB é tipo add block,
00:04:42bloqueador de anúncios,
00:04:43última vez usado.
00:04:45Também tem o is account logged in, se a conta está logada.
00:04:47E tem outros campos que aparecem de vez em quando.
00:04:50Então,
00:04:50o interessante é que em 2019,
00:04:52na versão 11,
00:04:53as coisas geralmente eram assim.
00:04:55Tem tipo um switch statement gigante que acabava tendo esses cases onde era tipo,
00:05:00ok,
00:05:00ei,
00:05:01a gente testa se tem um email?
00:05:02E sim, literalmente tinha uma string.
00:05:04Esse email contém test?
00:05:06Então sempre faz stand down, o que, aliás, é suspeito.
00:05:10Estava evitando que essas contas de teste do link entrassem e tipo compartilhassem link de teste para ver se isso realmente funciona?
00:05:16Porque vamos ser sinceros,
00:05:17quem aqui não teve uma conta de testes que não contenha a palavra test?
00:05:20Eu certamente já tive.
00:05:22Mas de qualquer forma,
00:05:22isso aqui era uma verificação explícita.
00:05:24Se você tem a palavra test em qualquer lugar do seu email,
00:05:28ele te desabilita.
00:05:29Mas além disso,
00:05:29quer dizer,
00:05:30isso já foi comentado,
00:05:31mas além disso,
00:05:32as coisas que eram realmente confusas é que ele passava por uma série de verificações e era tipo,
00:05:37ei,
00:05:37o provedor que está ativo no momento é igual a LS,
00:05:40que é link share?
00:05:41Se for, eu quero que você aplique essas regras exatas.
00:05:44E depois,
00:05:45mais adiante,
00:05:45tinha essa verificação onde ele passava por todas as regras que tinha descoberto,
00:05:49e aí ia uma por uma num loop pequeno passando por cada uma dessas regras e verificando,
00:05:54alguma delas falha?
00:05:55Se qualquer uma delas falhasse, fazia o stand down.
00:05:57Então era um processo meio hardcoded,
00:06:00como vocês podem ver,
00:06:01porque tinha tipo uma linha literal dizendo,
00:06:04se for link share,
00:06:05faz essa ação.
00:06:06Se a gente estiver nesse outro provedor, faz outra coisa.
00:06:08Agora,
00:06:09é claro que eu já estive em muitos,
00:06:10muitos projetos onde esse tipo de coisa simplesmente acontece.
00:06:12Isso é totalmente normal.
00:06:14Você começa tipo,
00:06:15ok,
00:06:15ei,
00:06:16a gente pode ter um ou dois provedores e pronto.
00:06:18Então eu só vou colocar uns casos hardcoded aqui e vamos garantir que as coisas sejam tratadas de um certo jeito.
00:06:24A gente faz stand down por um tempo,
00:06:26que aliás,
00:06:26não era muito longo.
00:06:27Você deveria assistir o vídeo do MegaLag para descobrir exatamente o quão terríveis as regras realmente eram.
00:06:34Mas de novo,
00:06:34meu objetivo é tipo,
00:06:35ok,
00:06:36eles fizeram mudanças no código ou eram correções de bugs?
00:06:39O que aconteceu?
00:06:40Bom,
00:06:40é aqui que as coisas ficam um pouco confusas porque entre as versões 11 e 14,
00:06:46que eu acho que vai até 2022,
00:06:48sim,
00:06:482022,
00:06:49as coisas ficaram praticamente constantes.
00:06:52Nada mudou muito,
00:06:53uns pequenos ajustes,
00:06:54nada muito relevante.
00:06:56Mas por volta da versão 16,
00:06:58acho,
00:06:58então em 2024,
00:06:59foi feita uma refatoração robusta para que eles pudessem conduzir muitas dessas decisões a partir de um endpoint no Honey.
00:07:07Agora esse endpoint envia um objeto que se parece com isso,
00:07:11que tem esse valor base,
00:07:13depois tem esses valores,
00:07:14depois tem esses valores sob X.
00:07:16Então isso significa que a versão anterior usava um monte de if statements em série para meio que determinar o tipo de comportamento que ela queria executar.
00:07:23E então faria a avaliação da regra para ver se essa regra realmente passou.
00:07:28Será que realmente obtivemos um verdadeiro ou um falso?
00:07:30Mas na versão 16,
00:07:31decidiram ser um pouco mais rigorosos em termos de engenharia de software.
00:07:36Agora,
00:07:36todos nós sabemos o que se faz quando há um monte de declarações if que estão fazendo esse tipo de encapsulamento de dados e realizando uma mutação básica num objeto?
00:07:45Bem,
00:07:45você iria querer conduzir isso através de algum tipo de configuração.
00:07:48Você iria querer conduzir através de algo um pouco mais dinâmico para torná-lo um pouco mais fácil.
00:07:52E foi exatamente isso que fizeram.
00:07:53Então,
00:07:54se voltarmos aqui e olharmos para os dados que estão vindo de mim,
00:07:57um usuário Honey não logado,
00:07:58você verá aqui que tenho uma classe base.
00:08:00Esta classe base se tornará o objeto base de como o Honey determina.
00:08:05Agora,
00:08:06para esta classe base de usuário não logado,
00:08:09preciso de 65.000 pontos de usuário para que o Honey não recue.
00:08:13Se eu tiver menos de 65.000 pontos,
00:08:15lembre-se que não estou logado então tenho zero pontos,
00:08:17ele dirá: desculpe,
00:08:18estou recuando.
00:08:18Estou evitando isto.
00:08:20Agora,
00:08:20quando obtém essa base,
00:08:22o que faz em seguida é verificar como chegamos aqui?
00:08:25Onde chegamos?
00:08:27Por que chegamos aqui?
00:08:28E faz a próxima verificação: isto veio de uma dessas redes de afiliados?
00:08:32E então começará a encapsular as coisas.
00:08:33Então,
00:08:33ok,
00:08:34se eu vier de um local de compartilhamento de link,
00:08:37agora só precisará de 5.001 pontos.
00:08:40Ele editará este objeto base.
00:08:41Na verdade está fazendo a engenharia melhor e mais sofisticada.
00:08:44Não é mais uma série de declarações if codificadas estaticamente.
00:08:48Em vez disso,
00:08:48está fazendo um verdadeiro: ei,
00:08:50pegue o ponto base.
00:08:51Então quero dizer, você tem meu provedor?
00:08:55Se você tem meu provedor,
00:08:57quero espalhar os valores do meu provedor ou apenas um objeto vazio.
00:09:01E então fez algo ainda mais impressionante,
00:09:04que são todos estes aqui embaixo do X.
00:09:07Estes são todos valores específicos da loja.
00:09:09Então verificaria: ei,
00:09:11seja qual for a loja em que estou atualmente,
00:09:14também quero adicionar esses valores.
00:09:17E então iria fazer a lógica de regra básica,
00:09:19mostrando que não está mais sob algum tipo de modo de manutenção.
00:09:23Está mostrando que não é mais esse tipo de coisa improvisada codificada estaticamente que existe há quase uma década.
00:09:29Em vez disso, saíram daquilo.
00:09:31E em 2024, disseram: sabe de uma coisa?
00:09:33Precisamos ser mais robustos e precisamos ser capazes de tomar mais decisões sobre mais lojas e mais provedores de uma forma mais fácil de manter.
00:09:43Isto foi engenharia de software, pessoal, e eles fizeram.
00:09:46Então,
00:09:47quando olho para isto,
00:09:48o que vejo é que ao longo do tempo fizeram mudanças para tornar seu sistema melhor,
00:09:52o que significa que há uma intenção por trás disso.
00:09:54Eles querem manter o que quer que o sistema esteja fazendo,
00:09:57seja fraudulento ou não.
00:09:59Não posso dizer isso,
00:10:00é para outra pessoa decidir,
00:10:02mas posso pelo menos dizer que suas decisões foram torná-lo mais robusto e melhor.
00:10:07E dado o facto de que a percepção geral deste sistema é de ser bastante duvidoso,
00:10:12tornaram o seu sistema bastante duvidoso muito,
00:10:15muito melhor.
00:10:16Mas não é tudo o que encontrei.
00:10:17Encontrei outra coisa que despertou meu interesse.
00:10:19Continuava a ver a palavra VIM que simplesmente continuava aparecendo.
00:10:23Agora estou tipo: VIM,
00:10:24o que é que o editor de texto está fazendo?
00:10:26Quando perguntei ao Claude Cote sobre isso,
00:10:28ele realmente disse: ei,
00:10:29você está falando sobre o gerenciador de instâncias VIM que foi encontrado dentro do Honey?
00:10:34E eu fiquei tipo: gerenciador de instâncias VIM.
00:10:35Ok, não pode ser isso.
00:10:37Não é isso.
00:10:38E então,
00:10:39quando comecei a olhar para isto,
00:10:41o que acabei vendo é que há um motor JavaScript inteiro dentro de JavaScript que roda dentro do plugin Honey.
00:10:49Agora, isto é absolutamente a coisa mais estranha que já vi.
00:10:54Tentei ler um pouco sobre isso.
00:10:56Não sou um desenvolvedor especialista em plugins quando se trata do Chrome.
00:10:59Então não fazia ideia de por que alguém executaria JavaScript em JavaScript.
00:11:05Mas o que o Honey faz é que na verdade tem o Acorn,
00:11:09que é um analisador de JavaScript e produz uma AST a partir de JavaScript válido.
00:11:14E pega isto,
00:11:15avalia JavaScript,
00:11:16e depois alimenta-o neste motor VIM.
00:11:19Agora há várias referências dentro do código que na verdade se referem a esse outro objeto chamado cart ops retrieval JS e product ops retrieval JS,
00:11:28que às vezes não é nulo,
00:11:30na verdade contém código.
00:11:31E também se refere a esse código JS,
00:11:33que também às vezes não é nulo,
00:11:35tipo aqui mesmo,
00:11:36é JavaScript real de verdade.
00:11:38Mas pelo que pude perceber,
00:11:39ele não está realmente executando nenhum desse código.
00:11:41Tentei definir alguns breakpoints.
00:11:42Nunca cheguei ao ponto de criar um gatilho,
00:11:45mas ainda assim,
00:11:46isso existe.
00:11:47Eles têm o aparato configurado para poder executar código remoto na sua máquina com base no que o Honey retorna de uma forma muito,
00:11:56muito ofuscada.
00:11:57Este JavaScript dentro de JavaScript,
00:11:59eles têm um parser de JavaScript.
00:12:00Eles têm uma máquina virtual JavaScript.
00:12:03É JavaScript de verdade dentro do JavaScript.
00:12:06Mas eles também têm essa seção onde há simplesmente todas essas funções em formato de string.
00:12:11E há um monte de JavaScript inline que está simplesmente repleto de maneiras pelas quais eles pesquisam páginas e coisas assim.
00:12:18Mas essas vêm junto com o produto.
00:12:22Então tecnicamente não são contra os antigos termos de serviço do Google.
00:12:26Porque se você olhar os requisitos adicionais para o manifest V3 para quem está fazendo isso,
00:12:30é que você não deveria ter permissão para usar o eval do JavaScript.
00:12:33Ok, então não vamos fazer isso.
00:12:34Não vamos usar eval.
00:12:35O que vamos fazer é colocar no código algumas operações que não queremos que outros plugins saibam que estamos fazendo.
00:12:40E então vamos incorporar um motor JavaScript inteiro para executá-las e ofuscar ainda mais o que estamos fazendo.
00:12:47O que é engraçado porque esse V3 aqui,
00:12:49parece que foi projetado especificamente para o Honey porque diz construir um interpretador para executar comandos complexos buscados de uma fonte remota,
00:12:56mesmo que esses comandos sejam buscados como dados.
00:12:59Então eles contornam isso.
00:13:00Essas não são coisas remotas.
00:13:01São strings que na verdade estão disponíveis dentro da extensão do Honey.
00:13:05Mas cara, isso é muita ofuscação.
00:13:07Isso é uma coisa estranha.
00:13:09Eu pessoalmente não consigo entender um único motivo pelo qual isso está realmente acontecendo.
00:13:14Como eu disse,
00:13:14aparentemente é devido a interações com outras extensões,
00:13:17outras extensões sendo bloqueadores de anúncios.
00:13:19Aparentemente os bloqueadores de anúncios podem bloquear a extensão do Honey se ela executar certas funções diretamente,
00:13:24mas de alguma forma através desse interpretador estranho,
00:13:27ela consegue realmente executar coisas que estão evitando ser detectadas.
00:13:31Não sei, mas parece uma zona total para mim.
00:13:34E achei isso muito,
00:13:34muito interessante porque nunca fiz nenhum tipo de engenharia reversa.
00:13:37Nunca realmente olhei o código-fonte de outra pessoa,
00:13:39especialmente código-fonte minificado.
00:13:41Só queria mostrar isso para vocês.
00:13:42Esta é talvez a engenharia mais incomum que já vi na minha vida.
00:13:46Já fiz parte de bases de código que têm mais de 10 mil linhas de máquinas de estado estranhas e são impossíveis de trabalhar,
00:13:54difíceis de raciocinar,
00:13:55mas essa aqui leva o prêmio.
00:13:57Essa tem que ser a engenhoca mais complexa e estranha,
00:14:00nível máquina de Rube Goldberg que já vi.
00:14:03Mas além disso,
00:14:04as regras dinâmicas para fazer o stand down,
00:14:07elas são robustas.
00:14:08Seja qual for o propósito,
00:14:10sendo fraudulento ou não,
00:14:12foi projetado para ser dinâmico e ser controlado via JSON por loja,
00:14:17por provedor e por usuário.
00:14:19Mas enfim, quero dar um salve especial para o Magalega.
00:14:21Foi muito legal.
00:14:22Consegui conversar com ele.
00:14:23Ele me ajudou um pouco meio que olhando algumas coisas.
00:14:25Então um grande salve para ele.
00:14:26Você definitivamente deveria conferir o vídeo.
00:14:27Está na descrição.
00:14:28É super bem feito.
00:14:29São vários deles e recomendo que você assista todos.
00:14:32São muito, muito bons.
00:14:33Além disso, você gostou dessa coisa que eu fiz?
00:14:35Você gostou desse formato?
00:14:36Não sei.
00:14:37Isso é meio novo.
00:14:38É só eu passando um tempo na live,
00:14:39me divertindo e então reportando de volta para você.
00:14:42Se você estivesse na live,
00:14:43teria visto isso acontecer ao vivo.
00:14:44Poderia ter sido muito mais divertido para você.
00:14:45O nome é Eu não sou um engenheiro reverso,
00:14:48mas isso foi muito divertido.
00:14:50Consigo ver por que as pessoas fazem isso.
00:14:51Até mais.
00:14:52Ei, isso é HTTP?
00:14:55Tira isso daqui.
00:14:56Não é assim que pedimos café.
00:14:57Pedimos café via SSH, terminal.shop.
00:15:00Quer uma experiência de verdade?
00:15:02Quer café de verdade?
00:15:03Quer uma assinatura incrível para nunca mais ter que lembrar?
00:15:06Ah,
00:15:07quer blends exclusivos com café exclusivo e conteúdo exclusivo?
00:15:12Então confere o CRON.
00:15:13Não sabe o que é SSH?
00:15:14Bom, talvez o café não seja pra você.
00:15:18♪ Café do terminal na mão ♪ ♪ Vivendo o sonho ♪

Key Takeaway

A análise do código-fonte do Honey revelou que a extensão evoluiu intencionalmente de 2019 a 2024 para implementar um sistema sofisticado e seletivo de roubo de comissões de afiliados, além de incorporar um interpretador JavaScript completo para ofuscar suas operações.

Highlights

O desenvolvedor analisou o código-fonte minificado da extensão Honey do Chrome para verificar as alegações de fraude de afiliados

O Honey possui um sistema de 'stand down' (recuo) que funciona de forma seletiva baseado nos pontos de cashback do usuário

Entre 2019 e 2024, o código evoluiu de verificações hardcoded para um sistema dinâmico controlado por JSON, demonstrando intencionalidade

A extensão contém um interpretador JavaScript completo (VIM) rodando dentro do JavaScript para ofuscar operações

O sistema de recuo foi refatorado em 2024 para ser mais robusto, com regras específicas por loja, provedor e tipo de usuário

Usuários não logados precisam de 65.000 pontos para que o Honey não recue, mas com Link Share esse número cai para 5.001 pontos

O Honey incorporou o parser Acorn e uma VM JavaScript para executar código de forma ofuscada, possivelmente para evitar detecção por bloqueadores de anúncios

Timeline

Introdução ao Escândalo Honey e Metodologia de Análise

O desenvolvedor apresenta sua proposta de analisar o código-fonte da extensão Honey do Chrome para verificar as alegações feitas em vídeos recentes sobre práticas fraudulentas. Ele explica que, por ser uma extensão de navegador, todo o código está disponível para análise detalhada. A vantagem dessa abordagem é poder observar a evolução do código ao longo do tempo e identificar se decisões ruins foram não apenas mantidas, mas ativamente aprimoradas pelos engenheiros. O objetivo é ir além das alegações e examinar evidências técnicas concretas de comportamento questionável no código.

Contexto do Problema: Sistema de Recuo e Roubo de Comissões

Um trecho do vídeo de MegaLag é apresentado explicando como o Honey supostamente rouba comissões de influenciadores. As redes de afiliados implementam políticas de 'stand down' (recuo) para evitar que extensões de cupons roubem comissões sob a regra 'último clique ganha'. O vídeo demonstra que o Honey se comporta corretamente recuando quando um usuário sem pontos de cashback clica em um link de afiliado, mas não recua quando o usuário tem pontos acumulados. Essa diferenciação seletiva no comportamento do sistema de recuo é o centro da controvérsia. O desenvolvedor decide investigar se essa lógica realmente existe no código e como evoluiu ao longo do tempo.

Metodologia e Descoberta Inicial do Código de Stand Down

O desenvolvedor explica sua metodologia de análise, obtendo múltiplas versões da extensão Honey desde fevereiro de 2019 até a versão atual. Ele usa IA para ajudar a pesquisar código minificado em velocidades antes impossíveis. A primeira descoberta confirma que a lógica de stand down baseada em pontos de usuário realmente existe no código. No entanto, a pergunta crucial não é apenas se existe, mas se mudou ao longo do tempo - se foi apenas código esquecido há anos ou se houve mudanças significativas e intencionais. O desenvolvedor enfatiza que em grandes empresas, código antigo frequentemente fica abandonado sem modificações, então é importante distinguir entre código legado e desenvolvimento ativo.

Estrutura do Código em 2019: Sistema Hardcoded

A análise da versão 11 de 2019 revela que o sistema de stand down já existia com lógica chamada 'SSD' (stand down logic). O código utilizava um arquivo JSON com dados incluindo UP (user points/pontos do usuário), ADB (ad block), e status de login. O sistema funcionava através de um switch statement gigante com casos hardcoded para diferentes situações. Uma descoberta suspeita foi uma verificação explícita que desabilitava o Honey se o email do usuário continha a palavra 'test', possivelmente para evitar que contas de teste descobrissem o comportamento real do sistema. O código verificava provedores específicos como Link Share (LS) e aplicava regras diferentes para cada um, passando por todas as regras descobertas em um loop e fazendo stand down se qualquer regra falhasse.

Período de Estabilidade e Mudança Significativa em 2024

Entre as versões 11 e 14 (2019-2022), o código permaneceu praticamente constante com apenas pequenos ajustes e correções de bugs sem relevância significativa. No entanto, por volta da versão 16 em 2024, foi implementada uma refatoração robusta e fundamental. O sistema passou de verificações hardcoded para um sistema dinâmico controlado por endpoints do Honey que enviam objetos JSON com valores base, valores específicos de provedores, e valores específicos de lojas. Esta mudança representa uma evolução de engenharia de software significativa, transformando múltiplas declarações if em um sistema configurável e orientado a dados. A implementação de 2024 demonstra claramente intenção de longo prazo e manutenção ativa do sistema, não apenas código abandonado.

Sistema Dinâmico: Lógica Sofisticada de Pontos

O desenvolvedor detalha como o novo sistema funciona na prática usando dados reais de um usuário não logado. A classe base estabelece que são necessários 65.000 pontos de usuário para que o Honey não recue - usuários com menos pontos (como não logados com zero) fazem o sistema recuar. No entanto, quando o acesso vem de redes de afiliados específicas como Link Share, esse requisito cai drasticamente para apenas 5.001 pontos através de encapsulamento de objetos. O sistema também adiciona valores específicos da loja atual, criando um esquema tri-dimensional de decisões baseado em: tipo de usuário, provedor de afiliados, e loja específica. Esta arquitetura demonstra engenharia sofisticada projetada para máxima flexibilidade e controle granular sobre o comportamento de stand down.

Análise da Intencionalidade: Engenharia Ativa vs Código Legado

O desenvolvedor conclui sua análise sobre a evolução do sistema de stand down, enfatizando que as mudanças ao longo do tempo não foram manutenção básica, mas melhorias significativas de engenharia. A transição de código hardcoded para um sistema dinâmico, robusto e orientado a configuração demonstra intenção clara de manter e aprimorar o comportamento do sistema. Embora não possa determinar legalmente se o sistema é fraudulento, pode afirmar tecnicamente que houve decisões deliberadas para torná-lo mais robusto e melhor ao longo de cinco anos. Dado que a percepção geral deste sistema é de ser duvidoso, os engenheiros tornaram esse sistema duvidoso muito mais sofisticado e eficiente, indicando que não é um acidente ou código esquecido.

Descoberta Surpreendente: Motor JavaScript Dentro de JavaScript

Durante a análise, o desenvolvedor encontrou referências constantes a 'VIM' e descobriu que não se trata do editor de texto, mas de um 'Virtual Instance Manager' - um interpretador JavaScript completo rodando dentro do JavaScript da extensão. O Honey incorporou o Acorn (um parser JavaScript) que produz uma Abstract Syntax Tree (AST) de código JavaScript válido e alimenta um motor VIM customizado. O código faz referências a objetos como 'cart_ops_retrieval_JS' e 'product_ops_retrieval_JS' que às vezes contêm código JavaScript real. Embora o desenvolvedor não tenha conseguido acionar a execução desse código nos seus testes com breakpoints, toda a infraestrutura está configurada. Isso significa que o Honey tem capacidade técnica para executar código remoto ofuscado na máquina do usuário de forma muito complexa.

Ofuscação e Possível Contorno de Políticas do Chrome

O desenvolvedor explica que tecnicamente o código JavaScript em formato string está dentro do produto e não viola os antigos termos de serviço do Google. O Manifest V3 do Chrome proíbe o uso de eval() do JavaScript, mas o Honey contorna isso incorporando um motor JavaScript completo para executar operações que não quer que outros plugins detectem. Os requisitos do V3 especificamente mencionam não construir interpretadores para executar comandos complexos buscados remotamente, mas o Honey argumentaria que são strings disponíveis dentro da extensão, não código remoto. Aparentemente, essa arquitetura serve para evitar detecção por bloqueadores de anúncios que podem bloquear a extensão se ela executar certas funções diretamente, mas através do interpretador consegue executar operações sem ser detectada.

Conclusões e Reflexões sobre Engenharia Reversa

O desenvolvedor conclui que esta é talvez a engenharia mais incomum que já viu em toda sua carreira, descrevendo-a como uma 'máquina de Rube Goldberg' de complexidade máxima. Embora tenha trabalhado em bases de código com mais de 10 mil linhas de máquinas de estado estranhas, o sistema do Honey é excepcionalmente complexo e ofuscado. Ele resume que as regras dinâmicas de stand down são robustas e foram projetadas para serem controladas via JSON por loja, provedor e usuário, independentemente de serem fraudulentas ou não. O desenvolvedor agradece ao MegaLag pela colaboração e recomenda assistir seus vídeos detalhados. Finaliza perguntando se os espectadores gostaram desse formato de análise ao vivo de código, convidando para suas transmissões ao vivo onde esse tipo de investigação acontece em tempo real.

Community Posts

View all posts