8 puntos por GN⁺ 2025-04-22 | 1 comentarios | Compartir por WhatsApp
  • TikTok usa una máquina virtual (VM) para reforzar su capa de seguridad y ofuscación
  • Este proyecto hace ingeniería inversa de esta VM basada en web para analizar cómo se elude la seguridad y cómo se generan las firmas de las solicitudes
  • El objetivo principal es webmssdk.js, que contiene el código de la VM involucrado en la generación de X-Bogus y _signature
  • El proyecto desofusca JavaScript y analiza y decompila el bytecode de la VM de TikTok para restaurarlo a un nivel significativo de funciones
  • Con esto, incluso es posible generar la _signature necesaria para solicitudes que requieren autenticación, como publicar comentarios
  • La VM está diseñada de forma sofisticada y cuenta con estructuras avanzadas de bytecode como bucles, manejo de excepciones y gestión de alcance

Resumen del proyecto de ingeniería inversa de la VM de TikTok

  • TikTok usa una máquina virtual (VM) ofuscada basada en JavaScript para generar firmas de solicitudes del cliente, proteger datos y evitar la evasión de seguridad
  • Este proyecto busca restaurar los algoritmos de firma (X-Bogus, _signature) mediante la desofuscación y decompilación del archivo webmssdk.js

Funciones clave y análisis de estructura

Desofuscación

  • TikTok ofusca cadenas indexándolas con arreglos y notación con corchetes

    r[Gb[301]](Gb[57], e)  
    
  • El descifrado del arreglo Gb se procesa mediante sustitución usando una tabla fija de cadenas

  • Después de decodificar todos esos patrones, se convierten a una notación con punto (dot notation) más legible

Eliminación de la ofuscación de llamadas a funciones

  • Las funciones se almacenan en el arreglo Ab y se invocan por índice

    Ab[31](args) → Ab31(args)  
    
  • Con un parser de AST, se separan como funciones individuales, se les asigna nombre y también se ajusta la forma de invocarlas

Descifrado del bytecode

  • El bytecode tiene una composición compleja con cifrado base64 + gzip + leb128 + XOR

    r = cálculo de la clave XOR  
    descompresión y decodificación leb128 para reconstruir el conjunto de instrucciones  
    
  • Cada función está construida sobre bytecode y, mediante el proceso de decompilación, se restaura la estructura de las funciones

Características de la VM de TikTok

  • Está más avanzada que una VM común, con funciones anidadas, manejo de alcance, manejo de excepciones y bifurcaciones condicionales
  • Cada instrucción está disfrazada con una estructura if-else en lugar de switch → esto se restaura a una forma de switch case

Decompilación y depuración

  • Cada función de bytecode se decompila a nivel de una función JS normal y se guarda en formato VMxxx.js
  • Ejemplo: VM223 es un generador de caracteres aleatorios
  • La depuración se realiza usando Tampermonkey + una extensión para evadir CSP en Chrome, reemplazando el JS original por los archivos decompilados

Análisis de firmas (Signing)

Estructura de los headers de la solicitud

  • Al enviar solicitudes al servidor, se incluyen 3 headers adicionales
    • msToken : emitido por el servidor, se regenera en cada solicitud
    • X-Bogus : se genera en webmssdk.js con base en la solicitud
    • _signature : se usa en solicitudes que requieren autenticación; lo genera webmssdk.js
  • Una solicitud común de consulta de usuario solo requiere X-Bogus
  • Una solicitud autenticada, como publicar un comentario, también requiere _signature

Flujo de funciones de la VM

  • VM86: punto de entrada de toda la generación de firmas
  • VM113: genera X-Bogus
  • VM189: genera _signature
  • Este flujo puede reproducirse con signer.js para firmar URLs

Mecanismos adicionales de protección

  • Seguimiento del mouse: VM120
  • Verificación del entorno: VM265
  • Sin embargo, todo esto es protección del lado del cliente y no hay comunicación con el servidor → puede ignorarse para la generación de firmas

Precauciones y mantenimiento

  • La VM de TikTok se actualiza continuamente → si cambia la estructura, se requiere una nueva decompilación
  • Este proyecto es adecuado principalmente para análisis de seguridad, investigación de tecnologías anti-bots y fines educativos

1 comentarios

 
GN⁺ 2025-04-22
Opiniones de Hacker News
  • Uso un sitio web de streaming que se corta con frecuencia y muestra mensajes de error. Estoy analizando el código JavaScript para encontrar una solución, y un asistente de IA me ayudó mucho a entender el código ofuscado

    • Con IA se pueden reescribir funciones de JavaScript difíciles de entender para hacerlas más legibles y agregar comentarios
    • La IA ayuda a inferir nombres de variables o funciones para comprender el comportamiento general del código
    • Recomiendo ampliamente usar agentes de IA como herramienta para quienes hacen trabajos similares
  • Se puede reemplazar el archivo JavaScript que se ejecuta en la web por una versión desofuscada para usar TikTok con normalidad

    • Con Tampermonkey y una extensión de CSP se puede hacer que el archivo se cargue desde un origen bloqueado
    • También se puede lograr el mismo efecto sin extensiones de terceros usando Local Overrides de Chrome DevTools
  • Parece que ponen mucho esfuerzo en ocultar el código. Eso puede obstaculizar la optimización del programa, aumentar la complejidad y generar más errores

    • Entiendo la intención de bloquear bots, pero hace falta un método más efectivo
    • No pueden impedir los clones, ya que estos pueden observar cómo funciona y hacer ingeniería inversa al estilo de caja negra
  • Encontré en mis marcadores un ejemplo de ingeniería inversa de la VM de TikTok

  • Siempre disfruto leer textos sobre esfuerzos de ingeniería inversa, y este fue fácil de seguir

    • Muchos sitios web y servicios de protección contra bots usan por defecto verificaciones del entorno y seguimiento del movimiento del mouse
    • Siempre es interesante ver cuánto tardan los servicios en cambiar sus mecanismos después de que estas medidas quedan anuladas
  • No hay una razón legítima para que una plataforma de redes sociales use este nivel de ofuscación

  • Pregunta sobre qué es una VM

    • He tenido experiencia usando VM para construir entornos de prueba en distintos sistemas operativos
    • Una máquina virtual de JavaScript funciona con su propio sistema operativo sobre el sistema operativo anfitrión
    • La VM de la que se habla en el TFA no es de ese tipo
    • Últimamente se usa "VM" en varios contextos distintos, así que resulta confuso
  • Pregunta sobre si está relacionada con la VM de Lynx

    • Se comparte el enlace de LynxJS
    • Se discutió en Hacker News enlace
  • Pregunta sobre si también hay una VM en la app de iOS

    • Pienso que una VM iría en contra de las políticas de Apple
  • Trabajé un tiempo con bots para TikTok y fue muy difícil