
Análise da VM ofuscada personalizada e formato de bytecode do DataDome, revelando criptografia de strings, cifras S-box e sinais de fingerprinting de navegador para educação em engenharia reversa.
A DataDome incorpora uma VM personalizada em seu pacote para esconder o que eles realmente estão fazendo. Fiquei curioso e a desmontei. Compartilhando aqui para quem estiver interessado no mesmo tipo de quebra-cabeça de engenharia reversa.
A DataDome envia um pacote JavaScript altamente ofuscado para o seu navegador. Dentro dele, há uma máquina virtual personalizada — eles compilam sua lógica real de fingerprinting em um formato privado de bytecode e a executam dentro dessa VM em tempo de execução. Esta análise da versão mais recente no momento da escrita.
Nenhum código da DataDome está incluído neste repositório — apenas minha própria análise e ferramentas.
Por favor, leia a nota no final antes de usar isso.
Uma vez que você consegue ler o bytecode, algumas coisas se destacam.
Criptografia de strings. Todas as strings são armazenadas em um único blob criptografado no topo do bytecode. Cada string é decodificada em tempo de execução usando uma chave XOR por entrada combinada com uma semente embutida no cabeçalho da tabela. Então, mesmo ler os bytes brutos não lhe diz nada sem conhecer a semente.
Tabelas S-box por toda parte. Os primeiros ~20KB de bytecode são quase inteiramente sequências de PUSH_N_IMM + ARRAY_FROM_STACK construindo tabelas de consulta de 256 bytes. Estas são S-boxes, provavelmente para uma cifra personalizada ou rodadas AES usadas para fazer hash dos sinais coletados antes de enviá-los.
Sinais de fingerprinting que você realmente pode ver após decodificar as strings:
Este projeto existe puramente para satisfazer a curiosidade sobre como a ofuscação de VM personalizada funciona na prática. É um exercício de aprendizado em engenharia reversa, não uma ferramenta para contornar a detecção de bots.
O que você faz com esse conhecimento é por sua conta.