JW Player

Материал из Абсурдопедии
Перейти к навигацииПерейти к поиску
Aquote1.png

Быстрый способ сделать ваше видео недоступным для 0.5 пользователей интернета — это просто встроить его через JW Player.

Aquote2.png
— Очевидец с пиратского форума, 2012 год

JW Player (чит. Джей-Дабл-ю Плеер, среди вебмастеров — просто Живик или Джей-Даб) — легендарный, монструозный, дико проприетарный и некогда монопольный инструмент для воспроизведения медиаконтента на просторах интернета. В эпоху, когда HTML5 ещё лежал в проекте в виде невнятных черновиков, а Стив Джобс ещё не совершил своё эпохальное убийство технологии Flash, JW Player стоял на 95% всех сайтов с видео: от респектабельных онлайн-кинотеатров до самых грязных порнотубов и пиратских порталов с сериалами в озвучке 1.5 землекопов.

Объект лютой ненависти 1000000-ов пользователей, вынужденных лицезреть бесконечную буферизацию, и 100-ен 1000-ч начинающих вебмастеров, пытавшихся взломать его лицензионный ключ ради удаления позорного водяного знака.

С чего всё начиналось[править]

В далёком 2005 году голландский студент по имени Йерун Вейринг (Jeroen Wijering) написал простенький медиаплеер на Flash для своего личного сайта, будучи учащимся Design Academy Eindhoven. В те времена воспроизвести видео в браузере без установки тяжёлых плагинов вроде QuickTime или Windows Media Player было нетривиальной задачей. Творение Йеруна позволяло просто скормить плееру ссылку на FLV-файл и получить работающее видео прямо на странице.

Проект мгновенно взлетел. Самый сок в том, что именно ранняя, бесплатная версия JW Player версии 3 использовалась молодым и тогда ещё никому не известным сайтом YouTube для показа видеороликов на заре его существования в 2005-2006 годах. Йерун умудрился продать лицензию будущему медиагиганту за какие-то смешные 15 евро, после чего YouTube улетел в космос и был выкуплен Google за 1650000000 долларов, а создатель плеера остался кусать локти.

Почуяв запах огромных денег, Йерун быстро свернул лавочку альтруизма. Была основана компания Longtail Ad Solutions (позже переименованная в JW Player в 2013 году), которая превратила бесплатную поделку в доильный аппарат для медиа-корпораций. Начиная с версии 4, плеер оброс коммерческими лицензиями, анальной защитой от копирования, поддержкой рекламных протоколов VAST/VPAID и прочими прелестями корпоративного софта.

Разбор кода[править]

Великая тайна лицензионного ключа[править]

Самая мякотка и главный источник лулзов для хакеров-самоучек кроется в модуле проверки лицензии. В коде это выглядит так:

var i="invalid",r="RnXcsftYjWRDA^Uy",o=function(o){...
    o=t.decrypt(o,r);
    var a=o.split("/");
    s=a[0],"pro"===s&&(s="premium");
    var u=n(s);

Да-да, вы не ослышались. Защита коммерческого плеера, за лицензию которого корпорации платят 1000-и вечнозелёных президентов в год, держится на модифицированном алгоритме TEA (Tiny Encryption Algorithm) с намертво зашитым в код ключом дешифрования:

`RnXcsftYjWRDA^Uy`

Работает эта схема следующим образом:

  1. Вебмастер покупает лицензию и вставляет длинный хэш на свой сайт.
  2. Плеер при запуске берет этот хэш и дешифрует его с помощью ключа `RnXcsftYjWRDA^Uy`.
  3. На выходе получается строка вида premium/domain.com/timestamp.
  4. Если 1-й элемент равен premium или enterprise, плеер милостиво соглашается убрать водяной знак и включить поддержку стриминга.

Естественно, эта защита взламывалась любым школьником, умеющим нажимать кнопку F12 в браузере. Достаточно было просто переопределить функцию дешифрования или принудительно заставить метод `edition()` возвращать строку unlimited. Разработчики знали об этом, но продолжали делать хорошую мину при плохой игре, выпуская патч за патчем с одними и теми же граблями.

Борьба с нищебродами[править]

В коде присутствует замечательный класс, отвечающий за детект блокировщиков рекламы:

function e(){
    var e=document.createElement("div");
    return e.className=n,e.innerHTML=" ",e.style.width="1px"...
}
var n="afs_ads";

Плеер создаёт невидимый элемент с классом `afs_ads` (Adblock Fast Solutions Ads). Поскольку большинство списков блокировки (вроде EasyList) содержат правило скрывать любые элементы с подобными именами классов, хитрый плагин проверяет, скрыт ли этот блок:

if(""!==o.innerHTML&&o.className===n&&null!==o.offsetParent&&0!==o.clientHeight...

Если элемент скрыт — ага! Попался, нищеброд! Плеер генерирует событие `adBlock`, после чего сайт может выдать пользователю плашку на 0.5 экрана: Уважаемый пользователь, ваш блокировщик рекламы мешает нам покупать яхты, немедленно отключите его или вы не увидите новую серию.

Почему все его так ненавидят[править]

Культурное наследие JW Player на просторах рунета и мирового интернета огромно, но окрашено исключительно в тёмные тона.

Рекламный ад[править]

JW Player стал 1 из пионеров интеграции агрессивной видеорекламы. Благодаря поддержке Google IMA и VPAID, плеер позволял владельцам сайтов вставлять рекламу:

  1. Pre-roll (перед видео) — классика. Посмотри 3 ролика про онлайн-казино, чтобы увидеть 1 секунду видео.
  2. Mid-roll (посреди видео) — на самом интересном месте.
  3. Post-roll (после видео) — когда ты уже заснул под монотонный бубнеж.
  4. Pause-roll — нажал на паузу, чтобы ответить на звонок? На тебе баннер на весь экран со звуком!

При этом кнопки пропуска рекламы часто делались настолько мелкими или маскировались под элементы интерфейса, что попадание по ним превращалось в увлекательную игру-кликер.

Постоянная буферизация[править]

Словосочетание JW Player у многих ассоциируется с бесконечным крутящимся кружком загрузки. Алгоритмы предзагрузки контента (буферизации) в плеере были настроены настолько загадочно, что даже на 1-гигабитном интернет-канале видео могло замереть через каждые 3 минуты воспроизведения. Плеер упорно отказывался качать видео дальше определённого лимита, а при малейшем сбое соединения просто сбрасывал весь скачанный прогресс и начинал загрузку заново.

Платный воздух[править]

Ценовая политика компании JW Player всегда вызывала искреннее недоумение у нормальных людей. Хочешь убрать логотип JW? Плати. Хочешь настроить цвета кнопок? Плати. Нужна поддержка стриминга HLS для мобильных устройств? Оформи подписку уровня Enterprise за безумные деньги.

Это привело к тому, что интернет заполнили 1000-и сайтов, использующих криво взломанные версии плеера, которые постоянно ломались при обновлении браузеров, радуя пользователей ошибками вида Error loading media: File could not be played.

Как взломать JW Player за 2 минуты[править]

Исторической забавой отечественных вебмастеров всегда был взлом Живика. Поскольку весь код написан на JavaScript и выполняется на стороне клиента (в браузере пользователя), никакая обфускация не могла спасти плеер от шаловливых ручонок.

Вот классический рецепт взлома версий 7.x (исключительно в образовательных целях, разумеется):

  1. Скачиваем оригинальный файл `jwplayer.js`.
  2. Открываем его в любом текстовом редакторе, поддерживающем поиск.
  3. Ищем ту самую строку дешифрования лицензии: `RnXcsftYjWRDA^Uy`.
  4. Находим рядом функцию, которая проверяет статус лицензии (обычно она возвращает переменную, принимающую значения invalid, pro, premium или enterprise).
  5. Принудительно заменяем возвращаемое значение функции на enterprise или unlimited.
  6. Ищем блок кода, отвечающий за рендеринг водяного знака (классы `.jw-logo` или функции отрисовки логотипа).
  7. Просто комментируем строки, добавляющие элемент логотипа в DOM-дерево.
  8. Profit! Получаем плеер стоимостью несколько 1000-ч долларов бесплатно, без регистрации и смс.

Разумеется, в более поздних версиях разработчики перенесли часть проверок на свои сервера, но к тому времени на рынке уже появились мощные бесплатные конкуренты, сделавшие JW Player ненужным.

Эпитафия плееру[править]

Сегодня JW Player практически полностью утратил своё былое величие. Его вытеснили:

  1. Нативный HTML5 — современные браузеры научились играть видео без всяких посредников и свистоперделок через тег `<video>`.
  2. Бесплатные опенсорсные плееры — такие проекты, как Video.js, Plyr, Clappr и Shaka Player, предлагают куда более богатый функционал совершенно бесплатно и без анальной монетизации.
  3. Переход на платформы — большинство сайтов теперь просто встраивают плееры от YouTube, Vimeo или Rutube, избавляя себя от геморроя с хранением и конвертацией видеофайлов.