В результате анализа можно сделать вывод, что расширение «vksaver - music saver vk», заявленное как инструмент для скачивания музыки из ВКонтакте, выполняет гораздо больше действий, чем ожидается от обычного download-helper. В частности, оно:
вмешивается во внутренние механизмы VK, включая работу с HLS-потоками и Webpack-модулями;
осуществляет манипуляции с DOM-структурой страницы и перехватывает контекст выполнения;
внедряет стороннюю рекламу (в том числе через YaDirect);
способно автоматически публиковать записи от имени пользователя;
предпринимает попытки обхода механизма защиты audio_api_unavailable.
Таким образом, функциональность расширения выходит за рамки заявленного назначения и потенциально может создавать риски для безопасности и конфиденциальности пользователя.
Архитектура
Расширение внедряется как content-script на vk.com и:
Подключает собственный JS-код в DOM.
Модифицирует элементы аудиоплеера.
Инжектирует стили и скрипты.
Перехватывает HLS.
Встраивает рекламные блоки.
Автоматически инициирует репост.
Обход защиты VK: декодирование audio_api_unavailable
Ключевой блок:
run = { o: t => { if (~t.indexOf('audio_api_unavailable')) { let e = t.split('?extra=')[1].split('#'), o = '' === e[1] ? '' : run.a(e[1]); if (e = run.a(e[0]), 'string' != typeof o || !e) return t; o = o ? o.split(String.fromCharCode(9)) : []; for (let s, r, n = o.length; n--;) { r = o[n].split(String.fromCharCode(11)); s = r.splice(0, 1, e)[0]; if (!run.l[s]) return t; e = run.l[s].apply(null, r); } if (e && 'http' == e.slice(0,4)) return e; } return t } }
Что происходит
VK возвращает «заглушку»:
audio_api_unavailable?extra=ENCODED
Расширение:
Декодирует Base64 (
run.a)Выполняет цепочку трансформаций:
reverse (
v)смещение алфавита (
r)перестановки (
s)XOR (
x)модифицированный shuffle (
i)
Получает реальный
httpURL.
Это важно
Это осознанный обход защиты платформы.
С точки зрения безопасности:
нарушение политики сервиса,
эксплуатация внутренних алгоритмов,
потенциальный бан аккаунта.
Инжект и перехват HLS
Фрагмент:
hls.src = '/dist/'+Object.keys(w.stVersions||{}) .filter(e=>/\/hls/.test(e))[0]; hls.onload = init.hls = () => !w.Hls && Object.keys(w) .filter(e=>/webpack/.test(e)&&Array.isArray(w[e])) .map(e=>w[e]) .flat() .forEach(e=>{ if(e[1]) for(let i in e[1]) ~e[1][i].toString().indexOf('hls.js config') && (e[1][i](e,i,{d:(a,t)=>e=t,r:e=>e}), e.default&&(w.Hls=e.default())) });
Что делает код
Ищет HLS-бандл VK.
Ищет Webpack runtime.
Инжектирует собственный Hls.
Подменяет конфигурацию.
Это:
вмешательство во внутреннюю архитектуру сайта,
манипуляция медиапотоком,
потенциальная точка MITM внутри браузера.
Автоматический репост от имени пользователя
Самый тревожный блок:
showFastBox({...}, "Рассказать друзьям", function() { var postId = 'wall-188966325_1030'; ajax.post('/like.php', {act : 'publish_box', object : postId}, { onDone: function(title, html, js, data) { ajax.post('/like.php', { act: 'a_do_publish', from: 'box', to: 0, hash: js.match(/shHash: '([a-f0-9]+)'/)[1], object: postId }); } }); });
Что происходит
Показывается окно «Рассказать друзьям».
При клике выполняется:
publish_boxa_do_publish
Используется динамически извлечённый
hash.
Риски
автоматизированное действие от имени пользователя
скрытая социальная инженерия
спам-распространение
Это уже поведенческий признак adware/PUA.
Инжекция рекламы (YaDirect)
Функция context():
Ya.Context.AdvManager.render({ blockId:'R-A-' + 843079 * 2 + ~d, renderTo:i });
Что делает расширение
создаёт div
вставляет рекламный блок
управляет тайм-аутом показа
хранит флаг в
localStorage.VBT
Это:
не заявленная пользователю монетизация
внедрение сторонней рекламы в feed
манипуляция DOM VK
Массовая загрузка и сбор данных
Пример:
[...document.getElementsByClassName('im_msg_media_audio_message')]
Скрипт:
парсит имена отправителей
даты сообщений
названия чатов
формирует zip-архив
Технически — это не эксфильтрация (данные не отправляются наружу),
но расширение имеет полный доступ к:
переписке
структуре страницы
токенам VK (через DOM-контекст)
Любое обновление может добавить exfiltration.
Манипуляции с MutationObserver
new MutationObserver(elem => { elem.forEach(e => { e.type == 'childList' && e.addedNodes.forEach(e => { (e.nodeType == 1 || e.nodeType == 9) && findNode(e); }) }); }).observe(b, {childList:true, subtree:true})
Расширение:
следит за всем DOM
автоматически инжектит элементы
перехватывает динамический контент
Это типично для:
adware
click-hijacking
DOM-based injection
Мини-библиотека $ и Ajax
В начале файла реализована собственная мини-библиотека:
function $(element, context) { ... } $.ajax = function(options){ ... }
Это:
попытка скрыть функциональность,
уход от стандартных API,
усложнение анализа.
Классификация
По совокупности признаков расширение относится к:
PUA (Potentially Unwanted Application)
Adware
Обход защиты сервиса
Модификатор контента
Признаки вредоносности:
Признак | Наличие |
|---|---|
Обход защиты платформы | + |
Инжект рекламы | + |
Автопостинг | + |
DOM-инжекция | + |
Webpack-hooking | + |
HLS-перехват | + |
Почему это опасно:
Полный доступ к DOM vk.com
Возможность перехвата токенов
Автоматические действия от имени пользователя
Подмена медиапотока
Неявная реклама
Нарушение ToS
Индикаторы компрометации (IOC)
Идентификатор расширения: bndkfmmbidllaiccmpnbdonijmicaafn
Файл main.js:
MD5: c85b185b7cebe16bbde9ebfcadf58815
SHA-1: a7977cc8aeaa9540a377ee67b16fa03088f29a97
SHA-256: 4b4ffd029964a1eb87dbdf227711f22e79fb2ffb3d54ae287ee8cea59c872bc7
Файл background.js:
MD5: 247c3856e7d9e72a75269d05af362b3a
SHA-1: 9a87162a31572bf04f507ad8cc2754bf8a9314c9
SHA-256: 3caecd0de3abf3fe3f9ceb2b0f8bc288d7f5c74d8bd0d11d9308eedfb8f7c61a
Вывод
Расширение «vksaver - music saver vk»:
технически сложное,
намеренно обходит ограничения,
внедряет рекламу,
ини��иирует действия от имени пользователя,
вмешивается во внутреннюю архитектуру ВКонтакте.
Это не просто «загрузчик музыки», а полноценный DOM-инжектор с рекламной и вирусной механикой распространения.
