В результате анализа можно сделать вывод, что расширение «vksaver - music saver vk», заявленное как инструмент для скачивания музыки из ВКонтакте, выполняет гораздо больше действий, чем ожидается от обычного download-helper. В частности, оно:

  • вмешивается во внутренние механизмы VK, включая работу с HLS-потоками и Webpack-модулями;

  • осуществляет манипуляции с DOM-структурой страницы и перехватывает контекст выполнения;

  • внедряет стороннюю рекламу (в том числе через YaDirect);

  • способно автоматически публиковать записи от имени пользователя;

  • предпринимает попытки обхода механизма защиты audio_api_unavailable.

Таким образом, функциональность расширения выходит за рамки заявленного назначения и потенциально может создавать риски для безопасности и конфиденциальности пользователя.

Архитектура

Расширение внедряется как content-script на vk.com и:

  1. Подключает собственный JS-код в DOM.

  2. Модифицирует элементы аудиоплеера.

  3. Инжектирует стили и скрипты.

  4. Перехватывает HLS.

  5. Встраивает рекламные блоки.

  6. Автоматически инициирует репост.

Обход защиты 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)

  • Получает реальный http URL.

Это важно

Это осознанный обход защиты платформы.

С точки зрения безопасности:

  • нарушение политики сервиса,

  • эксплуатация внутренних алгоритмов,

  • потенциальный бан аккаунта.

Инжект и перехват 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
      });
    }
  });
});

Что происходит

  1. Показывается окно «Рассказать друзьям».

  2. При клике выполняется:

    • publish_box

    • a_do_publish

  3. Используется динамически извлечённый 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-перехват

+

Почему это опасно:

  1. Полный доступ к DOM vk.com

  2. Возможность перехвата токенов

  3. Автоматические действия от имени пользователя

  4. Подмена медиапотока

  5. Неявная реклама

  6. Нарушение 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-инжектор с рекламной и вирусной механикой распространения.

Комментарии (4)


  1. atomlib
    18.02.2026 05:46

    Кто проводил анализ? Кто писал текст? Статья похожа на сгененированную.

    О каком расширении идёт речь? Ссылок на него нет. Вообще, под похожими именами распространяются как минимум два расширения. Если начинаю искать, то могу с лёгкостью перепутать.


  1. mcsimm
    18.02.2026 05:46

    Из-за некоторых пунктов это расширение и устанавливается. Не знаю, кто как, а я в последнее время снова стал MP3-шечки сохранять в локальные хранилища. Где-то инета нет, какие-то песни пропадают. Да и с видео такая же штука.


    1. vdudouyt
      18.02.2026 05:46

      Есть и куча сервисов, где это можно сделать без установки потенциальной малвари. В наши непростые времена соблюдать цифровую гигиену особенно важно. И, как известно, если что-то где-то доступно бесплатно и это не опенсорс, то скорее всего товар это Вы.


  1. s5384
    18.02.2026 05:46

    Что за паника? По пунктам:

    "Подключает собственный JS-код в DOM" - а как ещё предлагаете обрабатывать нажатие на кнопку для скачивания трека? Как предлагаете через API получать данные трека и его содержимое, инициировать сохранение на устройство?

    "Модифицирует элементы аудиоплеера" - добавление кнопки скачивания, возможно отключает рекламу между треками.

    "Инжектирует стили и скрипты" - стиль для созданной кнопки. А под скриптами, скорее всего, имеется в виду актуальный скрипт для получения трека по API и HLS сборщик в mp3.

    "Перехватывает HLS" - всё правильно, треки в формате m3u8, HLS поток. Без скачивания всех отдельных кусочков и сборки их в цельный mp3 не обойтись. Благо, в ВК сразу mp3 используется в m3u8, а не какой-нибудь aac, который встречается чаще в подобных ситуациях. Иначе, ИИ, писавший статью, в обморок бы упал при виде ffmpeg конвертера aac в mp3.

    "Встраивает рекламные блоки" - я с подобным не сталкивался, но возможно даже так. Один фиг, от ВК есть реклама. Что одна, что другая блокировщиками рекламы убираются. Вероятно, расширение заменяет ВК рекламу на свою, не вижу особых проблем. Некоторые расширения даже умудряются в фоне рекламу крутить.

    "Автоматически инициирует репост" - это глупость. Если есть возможность, то это не значит, что делает. Тем более, ниже идёт описание раскрывающегося списка, который есть официально в ВК. Расширение либо полностью новый список вставляет (с кнопкой скачивания в первую очередь), либо добавляет старый постинг, через старые API, которые до сих пор успешно работают.

    Я бегло прочитал обоснования в статье, всё притянуто по большей части и написано максимально оторвано от контекста. Особенно с тем же обходом API для получения HLS. Попробуйте для начала проанализировать стандартное поведение сетевой активности в панели разработчика при использовании чистого плеера ВК, и, о чудо, будут выполняться точно такие же запросы через сервер "error404.php?extra=" или что-то в таком духе (я сейчас с мобильного устройства пишу, не могу точно посмотреть, а сам не залезал туда больше года).

    Кому сильно надо, могу показать, как происходит скачивание трека подробно, а именно: запрос к VK API, получение ответа, редирект, получение m3u8 HLS, скачивание кусочков mp3 и расшифровка некоторых частей при необходимости (вроде бы ссылки на некоторые зашифрованы ключом, который идёт в комплекте с m3u8), склейка, переименование (возможно даже добавление id3 тегов) и инициация сохранения на устройство. Могу показать это на реальных примерах и даже способ получить mp3 напрямую от VK API