Поставил расширение Youside — боковая панель YouTube (Chrome ID: mmecpiobcdbjkaijljohghhpfgngpjmk). Описание — стандартное: встроенный плеер, подписки, быстрый доступ. На практике — код не про YouTube.
Разбор userpage.js.
Сетевой слой: внешний control-plane
await fetch("https://mines.cloudapi.stream/user\_info", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ user_id: localStorage.getItem("user_id"), type: "game_new" })});
Что важно:
-
жёстко задан внешний API (
cloudapi.stream) -
используется
user_idизlocalStorage(персистентный идентификатор) -
параметр
type=game_newне связан с YouTube
Ответ сервера (result) полностью определяет поведение UI.
Серверная модель управления
Используемые поля:
-
success -
is_valid -
rating -
protxt
Дальше клиент просто применяет это к DOM.
Гейтинг интерфейса
if (result.is_valid) { proplansID.classList.add('h_'); playBtn.classList.remove('h_');} else { playBtn.classList.add('h_');}
Фактически feature-флаги приходят с сервера.
Инъекция HTML
if (result.protxt) { proplansID.innerHTML = result.protxt;}
-
прямой
innerHTML -
без фильтрации
-
сервер может вернуть любой контент
Монетизация через подмену ссылок
document.querySelectorAll('.buyBtn').forEach(btn => { btn.setAttribute( 'href', `https://topup.cloudapi.stream/?user\_id=${encodeURIComponent(localStorage.getItem("user\_id"))}&type=game` );});
-
все
.buyBtnпереписываются -
внешний домен
-
user_id передаётся в query
В описании расширения про это ничего нет.
Сбор идентификаторов
const langCode = (navigator.language || navigator.userLanguage).split('-')[0];const extensionId = chrome.runtime.id;
Используется:
-
user_id(localStorage) -
navigator.language
Комбинация достаточна для стабильного трекинга.
Поведение Play
playBtn.addEventListener("click", () => { window.location = "https://youtube.com/";});
-
никакого плеера
-
никакого embed
-
просто редирект
Чего нет в коде
При заявленных функциях отсутствует:
-
YouTube IFrame API
-
любые запросы к
youtube.com -
логика подписок / поиска
-
работа с видеопотоком
Архитектура по факту
-
Генерируется/читается
user_id -
Клиент ходит в внешний API
-
Получает конфигурацию
-
Сервер управляет UI
-
Внедряются ссылки монетизации
Это не YouTube-клиент, а thin-client для стороннего backend.
IOC
Extension ID:
-
mmecpiobcdbjkaijljohghhpfgngpjmk
Domains:
Hashes:
-
SHA256: 3de1a05b26284c0e3dcc81e2e4b9ba4e99e1ce1245a9c57718b28ce111c9dfd9
-
MD5: 8ac5dcbd91b84f083feb813021d9223d
Итог
Код показывает:
-
привязку пользователя к внешнему сервису через
user_id -
удалённое управление интерфейсом
-
внедрение HTML с сервера
-
скрытую подмену ссылок
При этом отсутствует заявленный YouTube-функционал.
По совокупности это выглядит как вредоносное/нежелательное расширение, замаскированное под утилиту для работы с YouTube.
ссылка на оригинал статьи https://habr.com/ru/articles/1024996/