Мы находимся в 2020 году, и президент США собирается запретить TikTok, мобильное приложение для обмена видео в социальных сетях, поскольку «оно представляет угрозу для национальной безопасности США». В то же время Microsoft начала обсуждение возможности покупки TikTok в Соединенных Штатах. В последнее время TikTok широко освещался в СМИ, но насколько это реально? Это то, на что я постараюсь ответить в этой статье.
Введение
2 августа 2020 года я начал анализировать TikTok и написал об этом в Твиттере.
Через несколько минут после этого твита один из моих последователей прокомментировал.
Мы обсуждали личные сообщения, и он объяснил мне проблему. Он прослушал сетевые запросы, сделанные TikTok, и заметил, что запрос делается каждые 2 минуты. Однако контент был зашифрован, и он не смог его расшифровать.
Звучит как хорошая отправная точка для нашего путешествия:
- Что регулярно отправляет TikTok?
- Когда это отправляется?
- Куда это отправляется?
- Как контент зашифрован?
Что регулярно отправляет TikTok?
При отладке проблемы 90% работы должны быть в состоянии воспроизвести проблему. Итак, сначала я попытался воспроизвести проблему.
- Я скачал последнюю версию TikTok во французском PlayStore
- Я настроил Burp Suite для перехвата сетевых запросов, сделанных моим телефоном
- Я использовал скрипт Frida, чтобы обойти закрепление SSL, реализованное в приложении, и запустить TikTok.

Бинго! Каждые 5 минут TikTok отправлял сетевой запрос с зашифрованным контентом.
/service/2/app_log/ endpoint
Давайте сосредоточимся на запросах к конечной точке /service/2/app_log/

Параметры
Прежде чем изучать зашифрованный контент, мы можем заметить, что этот запрос содержит огромное количество параметров

Большинство имен говорят сами за себя. Я вижу 3 типа параметров:
- Информация об устройстве: device_id, device_type, device_brand, os_api, os_version,…
- Информация о приложении: app_type, app_language, version_code, version_name, build_number,…
- Информация о пользователе: current_region, locale, region
Вы удивлены этим? К сожалению, это довольно стандартно. Большинство ваших любимых приложений содержат одну и ту же информацию, это не относится к TikTok.
Зашифрованный контент
Время посмотреть на зашифрованный контент! Это самая веселая часть. Я декомпилировал приложение и произвел поиск по слову «app_log». Я сразу нашел метод sendEncryptLog в классе com.ss.android.common.applog.NetUtil

Если вы не понимаете код, не стоит волноваться. Посмотрите на сигнатуру метода. Потребовалось 4 параметра. arg4 – это URL, arg5 – это содержимое запроса (без шифрования), а остальное нас не волнует.
Теперь я могу использовать Frida для перехвата вызова этого метода и просмотра содержимого запроса перед шифрованием.

Я использовал мой маленький метод TTencryptedLog, и я получил следующий вывод

Если мы просмотрим содержимое файла JSON, мы увидим довольно стандартные данные.
- Как и раньше, много информации об устройстве
- Когда вы запускаете приложение
- Регистрация событий. Мне, вероятно, нужно больше времени уделять этому вопросу, чтобы понять, что по их мнению является «событием». Но, насколько я понимаю, это довольно стандартное аналитическое решение.
Когда это отправляется?
Ответ на этот вопрос равен ответу, когда вызывается метод sendEncryptLog . Нажав клавишу X с помощью JEB , вы можете легко получить все перекрестные ссылки.

Мы можем увидеть 4 метода:
- doUpdateConfig
- sendTimelyEvent
- sendLog
- неизвестный метод в пакете deviceRegister
Метод sendEncryptLog используется для отправки другого типа JSON. Итак, я очистил данные TikTok и перезапустил все с нуля. Мне удалось поймать следующие JSON
Содержание запроса при регистрации устройства

Содержание запроса при изменении настроек журнала TikTok

И снова имена полей говорят сами за себя. Я не вижу ничего подозрительного или специфичного для TikTok в этих файлах JSON.
Куда это отправляется?
Как вы видели на предыдущих скриншотах, запросы отправляются на log16-normal-c-useast1a.tiktokv.com. Забавно видеть, что я сижу в Европе, и мои журналы отправляются в точку с востоком в США… TikTok – это приложение, используемое по всему миру, они, вероятно, использовали несколько конечных точек для загрузки журналов.
После копания в коде мы можем найти класс URLConfig

Существует 7 конфигураций URL: China, America, America HTTP, SIG AWS, SIG ALIYUN, Musically, Mussically HTTP. Опять же, кажется странным не иметь европейскую конфигурацию URL, но все в порядке.
Как контент зашифрован?
Вы помните метод sendEncryptLog?

Шифрования происходит на этой линии: v5 = b.a(v5, v5.length);

EncryptorUtil – это самое интересное

Бинго! Шифрование выполняется в собственной библиотеке. Вся собственная библиотека, используемая TikTok, находится в папке /data/data/com.zhiliaoapp.musically/app_librarian/<версия> в вашем телефоне.
Вывод
В этой статье я попытался понять, что регулярно отправляет TikTok. Я расшифровал содержание запросов и прошел его. Насколько мы можем видеть, в этот момент TikTok не ведет себя подозрительно, он не экранирует необычные данные. Получение данных о пользовательских устройствах довольно распространено в мобильном мире, и мы получили бы точно такой же результат с Facebook, Snapchat, Instagram и др.