В результате анализа можно сделать вывод, что расширение «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-инжектор с рекламной и вирусной механикой распространения.