
Análisis de la máquina virtual ofuscada y el formato de bytecode personalizados de DataDome, revelando cifrado de cadenas, cifrados S-box y señales de fingerprinting del navegador para educación en ingeniería inversa.
DataDome incorpora una MV personalizada en su paquete para ocultar lo que realmente hace. Tuve curiosidad y la desarmé. Lo comparto aquí para cualquiera que esté interesado en el mismo tipo de rompecabezas de ingeniería inversa.
DataDome envía a tu navegador un paquete JavaScript muy ofuscado. Dentro, hay una máquina virtual personalizada: compilan su lógica real de fingerprinting en un formato de bytecode privado y luego lo ejecutan dentro de esa MV en tiempo de ejecución. Este análisis corresponde a la última versión en el momento de escribir esto.
En este repositorio no se incluye ningún código de DataDome, solo mi propio análisis y herramientas.
Por favor, lee la nota al final antes de usar esto.
Una vez que puedes leer el bytecode, destacan algunas cosas.
Cifrado de cadenas. Todas las cadenas se almacenan en un solo blob cifrado al principio del bytecode. Cada cadena se decodifica en tiempo de ejecución usando una clave XOR por entrada combinada con una semilla incorporada en el encabezado de la tabla. Así que incluso leer los bytes en bruto no te dice nada sin conocer la semilla.
Tablas S-box por todas partes. Los primeros ~20KB de bytecode son casi completamente secuencias de PUSH_N_IMM + ARRAY_FROM_STACK que construyen tablas de búsqueda de 256 bytes. Estas son S-boxes, probablemente para un cifrado personalizado o rondas AES usadas para hacer hash de las señales recogidas antes de enviarlas.
Señales de fingerprinting que realmente se pueden ver después de decodificar las cadenas:
Este proyecto existe puramente para satisfacer la curiosidad sobre cómo funciona la ofuscación con MV personalizada en la práctica. Es un ejercicio de aprendizaje en ingeniería inversa, no una herramienta para evadir la detección de bots.
Lo que hagas con este conocimiento es tu responsabilidad.