Кто-то решил покопаться в виртуальной машине TikTok и разобрать её обфусцированный код. Интересно, что скрывает популярное приложение? 🤔 Если любите реверс-инжиниринг — это точно ваш контент! #reverseengineering #tiktok
Проект по реверс-инжинирингу виртуальной машины (VM) TikTok раскрывает сложные механизмы обфускации в файле webmssdk.js. Виртуальная машина TikTok — это ключевой компонент системы безопасности платформы, использующий многослойные методы защиты. Основные этапы исследования включают деобфускацию JavaScript, декомпиляцию инструкций VM и инъекцию модифицированного кода. Главный метод обфускации в webmssdk.js основан на bracket notation, где переменные индексируются через массив Gb с закодированными строками. Например, конструкция rGb[301] после деобфускации превращается в читаемый r.addEventListener(«abort»,e). Второй метод маскирует вызовы функций через массив Ab, где каждая функция вызывается как Abindex. С помощью инструментов AST (Abstract Syntax Tree) и bapel исследователи преобразовали это в стандартные вызовы вида Abindex(args). Виртуальная машина TikTok исполняет байткод, зашифрованный XOR с динамическим ключом, который извлекается из payload. Байткод дополнительно сжат через gZip и закодирован в формате leb128 для уменьшения размера. VM поддерживает сложные функции: scopes, вложенные функции и обработку исключений, что свидетельствует о её продвинутой архитектуре. Для отладки используется замена оригинального webmssdk.js на деобфусцированную версию через Tampermonkey и отключение CSP. Это позволяет анализировать такие функции, как генерация заголовков X-Bogus и _signature, необходимых для API-запросов. Например, window.frontierSign генерирует X-Bogus, а VM189 создаёт _signature для аутентифицированных запросов (например, комментариев). Исследователи также обнаружили клиентские проверки на ботов (VM120 — трекинг мыши, VM265 — проверка окружения), которые не влияют на серверную валидацию. Важно отметить, что TikTok регулярно обновляет свою VM, что требует постоянного реверс-инжиниринга новых версий.