1

Тема: Получение шифрованных данных и реальной ссылки на видео или плейлист

Если при анализе страницы с фильмом мы не видим реальную ссылку на видео-файл или плейлист, то нужно разобраться как флеш-плеер получает реальную ссылку.
Обычно вариантов два:
1) Для того, чтобы получить реальную ссылку на видео, нужно сначала сделать специальный запрос по определённому адресу с переданными параметрами;
2) Ссылки зашифрованы и флеш-плеер умеет их расшифровывать.

Второй вариант обычно используется вместе с плеером Uppod, в который может быть зашиты данные для раскодирования зашифрованных ссылок. Вот про этот второй вариант и пойдёт дальше речь.

В Uppod плеере могут быть вставлены специальные символы замен, по которым шифрованные данные как по таблице заменяет каждый символ. Полученный результат перекодируется из Base64 в обычную строку.
Также, может быть использован второй алгоритм в Uppod, использующий hash,  в котором по сути - две таблицы замен, которые используются в разных случаях, в зависимости от вида шифрованной ссылки. Не смотря на то, что алгоритм с hash более сложный, значения hash во всех плеерах Uppod всегда одинаковые (по крайней мере до этого момента было именно так).

Примеры расшифровок плеера Uppod есть в этой теме.

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

Благодаря теоремам baat, был реализован механизм получения значений таблиц замен codec_a и codec_b, а также вероятности наличия мусора (или его точного значения) только по значениям зашифрованной ссылки и её реальной (расшифрованной).

Встречайте:
Uppod Experiment - восстановление codec_a, codec_b, определение муcора, а также алгоритма использующегося при кодировании (определение алгоритма  использования hash).


Как получить зашифрованную и реальную ссылки на странице фильма

Для этого проще всего использовать современный браузер, в котором есть средства разработчика (есть практически во всех последних популярных браузерах от IE до Opera).
Я расскажу на примере использования Chrome.

1) После открытия страницы с видео в браузере, нужно посмотреть содержимое html и поискать, как правило, тег <object... в котором указаны параметры флеш-плеера и ссылка на плейлист (обычно как параметр pl=) или видео файл (как параметр file=).
Если тег <object или <video со ссылками не найден, то можно поискать тег <iframe и если такой есть, посмотреть что именно из него загружается. Очень часто код плеера спрятан именно за iframe.

Чтобы среди кучи html кода найти место, где расположен именно код плеера или iframe, можно воспользоваться инструментами разработчика и нажав правой клавишей мышки на элементе рядом с плеером на странице (на самом плеере не получится, ибо это, как правило, флеш объект и у него своё контекстное меню). В появившемся меню выбрать "Посмотреть код" (в IE это будет "Проверить элемент", в Firefox "Исследовать элемент") - откроется окно со структурой HTML DOM загруженной страницы.
И перемещая мышку над тегами найти подсвечивающий именно наш плеер элемент. Раскрыть его, если нужно и углубляться пока не найдём тег <object или участок кода с зашифрованными ссылками.

После этого у нас будет зашифрованное значение ссылки на плейлист или видео-файл.

2) Подсмотреть реальную ссылку можно путём отслеживания запросов самого браузера.
В инструментах разработчика обычно есть вкладка "Network" или "Сеть", где можно посмотреть запросы и ответы, которые делает и получает браузер.
Чтобы подсмотреть ссылку на видео - нужно при открытых инструментах разработчика запустить со страницы фильм на просмотр.
Чтобы подсмотреть ссылку на плейлист, нужно обновить страницу с плеером, чтобы при загрузке и инициализации плеера был запрос на плейлист. После чего, среди множества ссылок запросов нужно найти именно запрос на плейлист.

После этого у нас будет реальная ссылка на плейлист или видео (расшифрованная).

После чего эти данные можно использовать в Uppod Experiment для того, чтобы получить таблицы замен или алгоритм. А также найти мусор, который мешает правильно раскодировать ссылки.

Наглядная демонстрация поиска шифрованных и реальных ссылок:

+ Пример нахождения codec_a и codec_b

https://hms.lostcut.net/img/gifs/findcode_filmix.gif

+ Раскодировка allserials.tv часть 1 (определение алгоритма)

https://hms.lostcut.net/img/gifs/allserials_tv_exp.gif

+ Раскодировка allserials.tv часть 2 (проверка алгоритма)

https://hms.lostcut.net/img/gifs/allserials_tv_exp2.gif

Sony Bravia KDL-32CX523
Спасибо сказали: d1mas, vsefilmi, михаил, baat, Big Dog, satelitas6

2 (2018.04.09 01:31:37 отредактировано satelitas)

Re: Получение шифрованных данных и реальной ссылки на видео или плейлист

Здраствуйте WendyH , очень интересная статья , за нее спасибо :)
На днях попалась мне ссылка на видео : https://vidlink.org/embed/59eee43ef893828c34caa37a , там идет редирект на https://vidlink.org/streamdrive/info/59 … 8c34caa37a и здесь я спотыкаюсь :(  ссылку спрятали за функцию . Можете на PHP помочь . Спасибо.

3 (2018.04.09 12:32:26 отредактировано WendyH)

Re: Получение шифрованных данных и реальной ссылки на видео или плейлист

satelitas пишет:

Здраствуйте WendyH , очень интересная статья , за нее спасибо :)
На днях попалась мне ссылка на видео : https://vidlink.org/embed/59eee43ef893828c34caa37a , там идет редирект на https://vidlink.org/streamdrive/info/59 … 8c34caa37a и здесь я спотыкаюсь :(  ссылку спрятали за функцию . Можете на PHP помочь . Спасибо.

Строго говоря, там не редирект на /streamdrive/info/, а POST запрос. Но да, в ответе запакованный javascript в виде

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))...

Ну а т.к. вы хотите всё делать на PHP, то придётся вам распаковщик таких упакованных данных писать на PHP.
Т.е. вот эту функцию полностью реализовать на PHP:

eval(function(p, a, c, k, e, d) {
            e = function(c) {
                return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
            };
            while (c--) {
                if (k[c]) {
                    p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c])
                }
            }
            return p
        }('o.q=...

Хотел уже было попробовать, но прежде чем писать велосипед - нужно проверить, а нет ли его в свободном доступе.
Нашёл вот такой JavaScriptUnpacker. И он с этим справился.

В итоге вот такой скрипт получился (он не должен быть именно такой, но для того, чтобы показать принцип, пойдёт):

+ открыть спойлер
<?php
$urlBase = "https://vidlink.org";

$embedUrl = "https://vidlink.org/embed/59eee43ef893828c34caa37a";

// Загружаем HTML страницу
$input = @file_get_contents($embedUrl) or die("Please try again later: $embedUrl");

// Делаем поиск в html всех нужных данных: url, postID, action
if (!preg_match("/url\s*=\s*'(.*?)'/", $input, $matches)) die("Url for POST request not found!");

$url = $urlBase.$matches[1];

if (!preg_match("/postID\s*=\s*'(.*?)'/", $input, $matches)) die("postID for POST request not found!");

$postID = $matches[1];

if (!preg_match("/'action':\s*'(.*?)'/", $input, $matches)) die("'action' for POST request not found!");

$action = $matches[1];

// Формируем данные для POST запроса
$post = "browserName=Chrome&platform=Win32&postID=$postID&action=".urlencode($action);

$options  = array(
  'http'=>array(
    'method'=>"POST",
    'header'=>"Accept-language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n" .
              "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36\r\n" .
              "Origin: $urlBase\r\n" .
              "Referer: $embedUrl\r\n" .
              "X-Requested-With: XMLHttpRequest\r\n",
    'content'=> $post
  )
);
$context = stream_context_create($options);

// Делаем POST запрос, где в ответе у нас будут запакованные данные javascript
$packedData = file_get_contents($url, false, $context);

// Загружаем класс распаковщика
require "JavaScriptUnpacker.php";

// Распаковываем
$data = JavaScriptUnpacker::unpack($packedData);

// Ну а дальше можете делать что хотите. Выдёргивать ссылку через регулярку или, как в примере ниже, попытаться преобразовать json данные.

// Берём данные в json представлении (перечисление, начинающееся с [ и заканчивающееся ])
if (!preg_match("/\[.*\]/", $data, $matches)) die($data);

// Преобразуем json представление в массив
$srcs = json_decode($matches[0], TRUE);

// Берём первое попавшееся значение src
$link = $srcs[0]["src"];

// Выводим результат
echo $urlBase.$link;

P.S.: Для скрипта выше, нужно чтобы там же где скрипт лежал JavaScriptUnpacker.php, который вот этот.

Sony Bravia KDL-32CX523
Спасибо сказали: satelitas1

4

Re: Получение шифрованных данных и реальной ссылки на видео или плейлист

У-ау , WendyH вы гуру , все работает . От вас ничего не скроешь . Еще раз, спасибо :)

5

Re: Получение шифрованных данных и реальной ссылки на видео или плейлист

пробовал вот такую расшифровать
http://datalock.ru/playlist/d93eb5f9034 … 1544726675
насколько понимаю там шифрованная ссылка
#2aHR0cDovL2RhdGEwOS1jZG4uZGF0YWxvY2sucnU6ODEvaDJscy83Zl9CZWF0LlMwMUUwM\/\/Z3JpZA==S5hMS4wOS4xMi4xOC5tcDQvaW5kZXgubTN1OCBvciBodHRwOi8vZGF0YTA5LWNkbi5kYXRhbG9jay5ydS9nZmkybG0vZDkzZWI1ZjkwMzQxY2QyY2YyZTYxMGRkNjkzZjliZjYvZ3JpZC83Zl9CZWF0LlMwMUUwMS5hMS4wOS4xMi4xOC5tcDQ=
прямая ссылка
http://data09-cdn.datalock.ru:81/h2ls/7 … index.m3u8
получаем 14% и сообщение Ошибка декодирования Base64 (некорректные символы или длина Base64 строки)
Если убрать #2 вначале, то процент сразу 61%
но Ошибка декодирования Base64 (некорректные символы или длина Base64 строки) остается.
Что-то вероятно близкое, но уже модернизированное?

6

Re: Получение шифрованных данных и реальной ссылки на видео или плейлист

smsbox3 пишет:

пробовал вот такую расшифровать
http://datalock.ru/playlist/d93eb5f9034 … 1544726675
насколько понимаю там шифрованная ссылка

Да, там base64 с добавленным мусором. Брать без первых двух символов #2 и удалять на данный момент подстроку "\/\/Z3JpZA==", где бы она ни была. Это мусор, вставляемый в рандомное место.

После большой практики расшифровки такие вещи уже будут бросаться в глаза, например левые некорректные символы для base64 типа слешей, да и знаки равно используются только как дополнение к концу строк для кратности длины четырём, поэтому видеть их в середине странно.
Совет: чтобы понять, что именно лишнее, нужно поэкспериментировать и добиться, чтобы какой-нибудь онлайн расшифровщик base64 показал как можно больше символов в ссылке. И тогда посмотреть и самому предсказать, какая ссылка там должна быть (а их там не одна может быть), закодировать в правильный base64 и сравнить с тем, что даёт сайт. Так сразу можно вычислить мусор.
Например, есть такая строка:

#2aHR0cDovL2RhdGEwOS1jZG4uZGF0YWxvY2sucnU6ODEvaDJscy83Zl9CZWF0LlMwMUUwMS5hMS4wOS4xMi4xOC5tcDQvaW\/\/Z3JpZA==5kZXgubTN1OCBvciBodHRwOi8vZGF0YTA5LWNkbi5kYXRhbG9jay5ydS9nZmkybG0vZDkzZWI1ZjkwMzQxY2QyY2YyZTYxMGRkNjkzZjliZjYvZ3JpZC83Zl9CZWF0LlMwMUUwMS5hMS4wOS4xMi4xOC5tcDQ=

Идём сюда, вставляем весь текст, начиная от aHR0 и получаем битые ссылки:

http://data09-cdn.datalock.ru:81/h2ls/7f_Beat.S01E01.a1.09.12.18.mp4/ioÿgriddex.m3u8 or http://data09-cdn.datalock.ru/gfi2lm/d93eb5f90341cd2cf2e610dd693f9bf6/grid/7f_Beat.S01E01.a1.09.12.18.m

Что, нетрудно догадаться, должно выглядеть так:

http://data09-cdn.datalock.ru:81/h2ls/7f_Beat.S01E01.a1.09.12.18.mp4/index.m3u8 or http://data09-cdn.datalock.ru/gfi2lm/d93eb5f90341cd2cf2e610dd693f9bf6/grid/7f_Beat.S01E01.a1.09.12.18.m3u8

Кодируем обратно в base64 и сравниваем исходную и нашу строки:

aHR0cDovL2RhdGEwOS1jZG4uZGF0YWxvY2sucnU6ODEvaDJscy83Zl9CZWF0LlMwMUUwMS5hMS4wOS4xMi4xOC5tcDQvaW\/\/Z3JpZA==5kZXgubTN1OCBvciBodHRwOi8vZGF0YTA5LWNkbi5kYXRhbG9jay5ydS9nZmkybG0vZDkzZWI1ZjkwMzQxY2QyY2YyZTYxMGRkNjkzZjliZjYvZ3JpZC83Zl9CZWF0LlMwMUUwMS5hMS4wOS4xMi4xOC5tcDQ=
aHR0cDovL2RhdGEwOS1jZG4uZGF0YWxvY2sucnU6ODEvaDJscy83Zl9CZWF0LlMwMUUwMS5hMS4wOS4xMi4xOC5tcDQvaW            5kZXgubTN1OCBvciBodHRwOi8vZGF0YTA5LWNkbi5kYXRhbG9jay5ydS9nZmkybG0vZDkzZWI1ZjkwMzQxY2QyY2YyZTYxMGRkNjkzZjliZjYvZ3JpZC83Zl9CZWF0LlMwMUUwMS5hMS4wOS4xMi4xOC5tM3U4

Находим мусор и проверяем на других ссылках свою теорию.

Sony Bravia KDL-32CX523
Спасибо сказали: smsbox31

7

Re: Получение шифрованных данных и реальной ссылки на видео или плейлист

WendyH пишет:

Да, там base64 с добавленным мусором. Брать без первых двух символов #2 и удалять на данный момент подстроку "\/\/Z3JpZA==", где бы она ни была. Это мусор, вставляемый в рандомное место.

При декодировании ссылок с https://filmix.co/ выявил 3 строки с мусором.
А сколько на одном сайте и с конкретным плеером может быть строк мусора?
Что может подсказать Ваш опыт?

С уважением,
matkin

8

Re: Получение шифрованных данных и реальной ссылки на видео или плейлист

matkin пишет:

При декодировании ссылок с https://filmix.co/ выявил 3 строки с мусором.
А сколько на одном сайте и с конкретным плеером может быть строк мусора?
Что может подсказать Ваш опыт?

Вот мусор с filmix.co


#2WzQ4MHBd
\/\/Y2VyY2EudHJvdmEuc2FnZ2V6emE=
\/\/c2ljYXJpby4yMi5tb3ZpZXM=
\/\/a2lub2NvdmVyLnc5OC5uamJo

Отладка кода — это как охота. Только охота, на баги.

9

Re: Получение шифрованных данных и реальной ссылки на видео или плейлист

Spell пишет:

Вот мусор с filmix.co

Я проверял на десятке ссылок эти три строки мусора - работает...
Но какая вероятность, что не появится еще строчки и декодирование не отработает.
Вообще - сколько возможно таких строк мусора и как они могут меняться?

С уважением,
matkin

10

Re: Получение шифрованных данных и реальной ссылки на видео или плейлист

matkin пишет:

Я проверял на десятке ссылок эти три строки мусора - работает...
Но какая вероятность, что не появится еще строчки и декодирование не отработает.
Вообще - сколько возможно таких строк мусора и как они могут меняться?

Они поменяются как только этого захотят этого авторы сайта.
Думаю, со временем точно, но через сколько - никто не может сказать. Думаю они сами ещё не решили.

Sony Bravia KDL-32CX523

11

Re: Получение шифрованных данных и реальной ссылки на видео или плейлист

WendyH пишет:

Они поменяются как только этого захотят этого авторы сайта.
Думаю, со временем точно, но через сколько - никто не может сказать. Думаю они сами ещё не решили.

Я все думаю, связываться ли с этим сайтом. Если они через день будут менять...

С уважением,
matkin