Там этот код очень страшный только на первый взгляд. Я уже такое видел.
В общем, любые eval и запакованные скрипты я раскодирую в инструментах разработчика в Chrome (можно в любом современном браузере), в консоле.
Переходим в консоль, копируем всё, что между скобок в eval(...) и пишу
var aaa =
и вставляю скопированный участок. Потом набираем
aaa
и смотрим, что выводит. Отпугивает начинающих вываливающийся код, который кажется всё тем же самым, на самом деле это новый eval и опять запакованные функции.
С ними повторяем то же самое, т.е. копируем всё, что между скобок eval и присваиваем переменной, смотрим что содержит переменная.
Только нужно быть внимательным при копировании, ибо там потом на втором или третьем уровне глубины уже подряд встречаются два eval и их нужно раскодировать отдельно и последовательно. В итоге, можно добраться до раскодированного скрипта.
А вот там то и будут ссылки с token.
И да, похоже привязка к IP есть. И вообще, канал euro sport 2 для меня заблокирован по просьбе правообладателей. Пробовал всё на канале setanta sport.
Ща, попробую видео записать.
Также где-то в подкасте я уже использовал раскодировку вложенных eval-ов.
Нашёл, в seasonvar было такое. Вот такой скрипт получился:
///////////////////////////////////////////////////////////////////////////////
// Javascript Eval
string jsEval(string sData) {
Variant objScript, objJS; string sResult = '';
try {objScript = CreateOleObject('MSScriptControl.ScriptControl');} except {};
if (VarType(objScript) != varDispatch) {
HmsLogMessage(2, 'Не могу создать ActiveXObject MSScriptControl.ScriptControl');
return '';
}
objScript.Language = 'JavaScript';
try { sResult = objScript.Eval(sData); } except { };
return sResult;
}
///////////////////////////////////////////////////////////////////////////////
// Получение ссылки с http://viks.tv
void GetLink_vikstv(string sLink) {
string sHtml, sData, scriptBlock;
sHtml = HmsDownloadURL(sLink);
// Ищем в загруженном html запакованную функцию в eval
if (HmsRegExMatch('(eval\\(function\\(w,i,s,e\\).*?\'\\)\\);)', sHtml, scriptBlock)) {
// Распаковываем, пока распаковывается (всегда последний eval, если их несколько)
while (HmsRegExMatch('.*eval(\\(.*\\));', scriptBlock, scriptBlock)) {
scriptBlock = jsEval(scriptBlock);
}
// На выходе в scriptBlock - распакованный js код
}
// Получаем ссылку
HmsRegExMatch('[\'"](http://.*?)[\'"]', scriptBlock, MediaResourceLink);
// Даём понять программе, чтобы он это не воспринимал как прямую ссылку на поток (HLS не может так)
if (Pos('m3u8', MediaResourceLink)>0) MediaResourceLink = ' '+Trim(MediaResourceLink);
// А ещё прикол в C++Script такой, что если слева и справа есть одна и та же переменная со сложением,
// то он может интерпретировать это как Переменная+=..., поэтому приходится обворачивать в Trim()...
}
///////////////////////////////////////////////////////////////////////////////
// Г Л А В Н А Я П Р О Ц Е Д У Р А //
{
GetLink_vikstv('http://viks.tv/448-setanta-sport.html');
}
Sony Bravia KDL-32CX523