Rétro-ingénierie de la VM obfusquée de TikTok
(github.com/LukasOgunfeitimi)- 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
_signaturené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
Gbest 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
Abet appelées par indexAb[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-elseplutôt qu’unswitch→ 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êteX-Bogus: généré danswebmssdk.jsà partir de la requête_signature: utilisé pour les requêtes nécessitant une authentification, généré parwebmssdk.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
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é
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
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
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
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
Question pour savoir s'il s'agit d'une VM liée à Lynx
Question pour savoir si l'app iOS contient aussi une VM
J'ai brièvement travaillé sur un bot TikTok, et c'était très difficile