8 points par GN⁺ 2025-04-22 | 1 commentaires | Partager sur WhatsApp
  • TikTok utilise une machine virtuelle (VM) pour renforcer sa couche de sécurité et d’obfuscation
  • Ce projet consiste à rétro-ingénierie cette machine virtuelle (VM) web afin d’analyser les mécanismes de contournement de sécurité et de génération de signatures de requêtes
  • La cible principale est webmssdk.js, qui contient le code VM impliqué dans la génération de X-Bogus et de _signature
  • Le projet désobfusque le JavaScript, analyse et décompile le bytecode de la VM TikTok pour le restaurer à un niveau de fonctions compréhensible
  • Cela permet aussi de générer la valeur _signature nécessaire pour les requêtes exigeant une authentification, comme la publication de commentaires
  • La VM est conçue de manière sophistiquée et possède des structures de bytecode avancées, notamment pour les boucles, la gestion des exceptions et des scopes

Aperçu du projet de rétro-ingénierie de la VM TikTok

  • TikTok utilise une machine virtuelle (VM) obfusquée en JavaScript pour générer les signatures des requêtes client, protéger les données et empêcher le contournement des mécanismes de sécurité
  • Ce projet vise à reconstituer les algorithmes de signature (X-Bogus, _signature) via la désobfuscation et la décompilation du fichier webmssdk.js

Analyse des fonctions clés et de la structure

Désobfuscation

  • TikTok obfusque les chaînes en les indexant via des tableaux et la notation entre crochets

    r[Gb[301]](Gb[57], e)  
    
  • Le déchiffrement du tableau Gb est effectué par substitution à l’aide d’une table de chaînes fixe

  • Une fois tous ces motifs décodés, ils sont convertis dans une dot notation plus lisible

Suppression de l’obfuscation des appels de fonctions

  • Les fonctions sont stockées dans le tableau Ab et appelées par index

    Ab[31](args) → Ab31(args)  
    
  • Un parseur AST est utilisé pour les séparer en fonctions individuelles, leur attribuer un nom et modifier leur mode d’appel

Déchiffrement du bytecode

  • Le bytecode est structuré de manière complexe avec un chiffrement en base64 + gzip + leb128 + XOR

    r = calcul de la clé XOR  
    décompression et décodage leb128 pour reconstituer le jeu d’instructions  
    
  • Chaque fonction est construite à partir de bytecode, puis sa structure est restaurée via le processus de décompilation

Caractéristiques de la VM TikTok

  • Plus avancée qu’une VM classique avec fonctions imbriquées, gestion des scopes, gestion des exceptions et branchements conditionnels
  • Chaque instruction est déguisée sous une structure if-else plutôt qu’un switch → ensuite restaurée sous forme de switch case

Décompilation et débogage

  • Chaque fonction bytecode est décompilée au niveau d’une fonction JS classique et enregistrée sous la forme VMxxx.js
  • Exemple : VM223 est un générateur de caractères aléatoires
  • Le débogage est réalisé dans Chrome avec Tampermonkey + une extension de contournement CSP, en remplaçant le JS d’origine par les fichiers décompilés

Analyse de la signature (Signing)

Structure des en-têtes de requête

  • Trois en-têtes supplémentaires sont inclus lors des requêtes au serveur
    • msToken : émis par le serveur, régénéré à chaque requête
    • X-Bogus : généré dans webmssdk.js à partir de la requête
    • _signature : utilisé pour les requêtes nécessitant une authentification, généré par webmssdk.js
  • Les requêtes classiques de consultation de profil n’ont besoin que de X-Bogus
  • Les requêtes authentifiées, comme la publication de commentaires, nécessitent aussi _signature

Flux des fonctions VM

  • VM86 : point d’entrée de la génération complète de signature
  • VM113 : génération de X-Bogus
  • VM189 : génération de _signature
  • Ce flux peut être reproduit avec signer.js pour signer des URL

Mécanismes de protection supplémentaires

  • Suivi de la souris : VM120
  • Vérification de l’environnement : VM265
  • Toutefois, il s’agit entièrement de protections côté client, sans communication avec le serveur → elles peuvent donc être ignorées pour la génération de signatures

Points d’attention et maintenance

  • La VM TikTok est mise à jour en continu → une nouvelle décompilation est nécessaire si la structure change
  • Ce projet est surtout adapté à l’analyse de sécurité, à la recherche sur les techniques anti-bot et à des fins pédagogiques

1 commentaires

 
GN⁺ 2025-04-22
Commentaires Hacker News
  • J'utilise un site de streaming qui se coupe souvent et affiche des messages d'erreur. J'analyse le code JavaScript pour trouver une solution, et un assistant IA m'a beaucoup aidé à comprendre le code obfusqué

    • Avec l'IA, il est possible de réécrire des fonctions JavaScript obscures de manière plus compréhensible et d'ajouter des commentaires
    • L'IA aide à deviner les noms des variables ou des fonctions pour comprendre le comportement global du code
    • Je recommande vivement d'utiliser des agents IA comme outil pour celles et ceux qui font un travail similaire
  • Il est possible d'utiliser TikTok normalement en remplaçant les fichiers JavaScript exécutés sur le web par des fichiers désobfusqués

    • Avec Tampermonkey et une extension CSP, on peut charger les fichiers depuis une origine bloquée
    • Les Local Overrides de Chrome DevTools permettent d'obtenir le même effet sans extension tierce
  • Ils semblent faire beaucoup d'efforts pour cacher le code. Cela peut nuire à l'optimisation du programme, augmenter la complexité et provoquer davantage d'erreurs

    • Je comprends l'intention de bloquer les bots, mais il faut une méthode plus efficace
    • Il est impossible d'empêcher les clones, qui peuvent observer le fonctionnement et le rétroc oncevoir en mode boîte noire
  • J'ai retrouvé dans mes favoris des exemples de rétro-ingénierie de la VM de TikTok

  • J'aime toujours lire des billets sur les efforts de rétro-ingénierie, et celui-ci était facile à suivre

    • Beaucoup de sites web et de services de protection contre les bots se basent par défaut sur l'inspection de l'environnement et le suivi des mouvements de souris
    • Il est toujours intéressant de voir combien de temps il faut au service pour changer de mécanisme une fois ces mesures neutralisées
  • Il n'existe aucune raison légitime pour qu'une plateforme de réseaux sociaux utilise un tel niveau d'obfuscation

  • Question sur ce qu'est une VM

    • J'ai déjà utilisé des VM pour mettre en place des environnements de test sur différents systèmes d'exploitation
    • Une machine virtuelle JavaScript fonctionne comme son propre système d'exploitation au-dessus de l'OS hôte
    • La VM évoquée dans le TFA n'est pas de ce type
    • Le terme "VM" est utilisé récemment dans divers contextes, ce qui est source de confusion
  • Question pour savoir s'il s'agit d'une VM liée à Lynx

    • Lien vers LynxJS
    • Discussion sur Hacker News lien
  • Question pour savoir si l'app iOS contient aussi une VM

    • Je pense qu'une VM irait à l'encontre des règles d'Apple
  • J'ai brièvement travaillé sur un bot TikTok, et c'était très difficile