1

Тема: viks.tv

vlad514 пишет:

Здравствуйте. Существует ли подкаст сайта http://viks.tv/  ?

видел подобное сообщение... подкаста к данному сайту не встретил...
сам этим сайтом не пользовался, пока не отвалились другие сайты с тв... но на нем несколько необходимых каналов работают...

прошу помощи с выдёргиванием ссылок с этого сайта...

2 (2017.03.04 17:27:33 отредактировано baat)

Re: viks.tv

http://viks.tv/352-evrosport-2.html

ссылка получается такого плана... вопрос где token берёт... и есть ли привязка к ip...

http://91.234.34.154:8081/eurosport2/in … 25109bc419

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

вот этот кусочек показался интересным...

+ открыть спойлер

http://rgho.st/6l2fHbQlS/thumb.png

а вот этот очень и очень страшным...

+ открыть спойлер

http://rgho.st/8vTTCn8VT/image.png

3

Re: viks.tv

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

Переходим в консоль, копируем всё, что между скобок в eval(...) и пишу
var aaa =
и вставляю скопированный участок. Потом набираем
aaa
и смотрим, что выводит. Отпугивает начинающих вываливающийся код, который кажется всё тем же самым, на самом деле это новый eval и опять запакованные функции.
С ними повторяем то же самое, т.е. копируем всё, что между скобок eval и присваиваем переменной, смотрим что содержит переменная.
Только нужно быть внимательным при копировании, ибо там потом на втором или третьем уровне глубины уже подряд встречаются два eval и их нужно раскодировать отдельно и последовательно. В итоге, можно добраться до раскодированного скрипта.
А вот там то и будут ссылки с token.

И да, похоже привязка к IP есть. И вообще, канал euro sport 2 для меня заблокирован по просьбе правообладателей. Пробовал всё на канале setanta sport.

Ща, попробую видео записать.

+ Осторожно, большой gif

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

Также где-то в подкасте я уже использовал раскодировку вложенных 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

4

Re: viks.tv

WendyH, эм, вот она как... а автоматизировать как-то можно? вне браузера и подкаста?... а средствами php, например...

пытаюсь, так...

function visible($eval)
{
   return ('<script type="text/javascript">var o = '.$eval.'; document.write(o.innerHTML); </script>');
}

но первый же eval возвращает undefined...

5

Re: viks.tv

baat пишет:

WendyH, эм, вот она как... а автоматизировать как-то можно? вне браузера и подкаста?... а средствами php, например...

пытаюсь, так...

function visible($eval)
{
   return ('<script type="text/javascript">var o = '.$eval.'; document.write(o.innerHTML); </script>');
}

но первый же eval возвращает undefined...

Э... не представляю выполнение js средствами PHP. Только повторять (переписать) функцию распаковки.

А то, что делаете вы - это просто в браузер отправляете скрипт, где после выполнения в браузере переменная o - это будет строка. У неё нет свойства innerHTML. Это свойство undefined.

Sony Bravia KDL-32CX523

6 (2017.03.05 00:35:59 отредактировано baat)

Re: viks.tv

да, спасибо большое...
разобрался, работает...

+ открыть спойлер

http://rgho.st/7HwYCzHZb/thumb.png

7

Re: viks.tv

Здравствуйте!
Могли бы описать каким образом разобрались, и как это сделали?
Был бы очень признателен!

8 (2019.01.17 19:40:35 отредактировано PoPsa)

Re: viks.tv

Всем привет. Решил попрактиковаться в расшифровке JS функций на сайте. В качестве подопытного был выбран viks.
Написал такой скрипт

import requests
import re

url = 'link_herel'
_headers = {'Origin':'http://viks.tv','Referer':url,'User-Agent' : 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0'}

req = requests.get(url, headers=_headers)
html = req.text


def Decode(w,i,s,e):
    lIll = 0;
    ll1I = 0;
    Il1l = 0;
    ll1l = [];
    l1lI = [];
    while True:
        if lIll < 5:
            l1lI.append(w[lIll])
        elif lIll < len(w):
            ll1l.append(w[lIll])
        lIll += 1
        if ll1I < 5:
            l1lI.append(i[ll1I])
        elif ll1I < len(i):
            ll1l.append(i[ll1I])
        ll1I += 1
        if Il1l < 5:
            l1lI.append(s[Il1l])
        elif Il1l < len(s):
            ll1l.append(s[Il1l])
        Il1l +=1
        if len(w) + len(i) + len(s) + len(e) == len(ll1l) + len(l1lI) + len(e):
            break

    lI1l = ''.join(ll1l)
    I1lI = ''.join(l1lI)
    ll1I = 0
    l1ll = []

    for lIll in range(0, len(ll1l), 2):
        ll11 = -1

        if (ord(I1lI[ll1I]) % 2):
            ll11 = 1

        l1ll.append(chr(int(lI1l[lIll:lIll+2], 36) - ll11))

        ll1I += 1
        if ll1I >= len(l1lI):
            ll1I = 0;

    return ''.join(l1ll)

def get_url(path):
    r = re.search("'(http:.*?)'",path)
    print(r[1])

while True:

    r = re.search(".*eval\(function\(w,i,s,e\).*?}\('(.*?)','(.*?)','(.*?)','(.*?)'", html)
    if r:
        html = Decode(r[1], r[2], r[3], r[4])

    else:
        get_url(html)
        break

В итоге получаю ссылку на m3u8 c хвостом wmAuthSign, вставляю в VLC - не работает. Ловлю в wireshark с той же страницы - работает.
Подскажите в чем моя ошибка ?

9

Re: viks.tv

Смотрите здесь https://hms.lostcut.net/viewtopic.php?id=597 ,чтоб понять ошибку в расшифровке.

10

Re: viks.tv

Dr.Dru пишет:

Смотрите здесь https://hms.lostcut.net/viewtopic.php?id=597 ,чтоб понять ошибку в расшифровке.

Честно говоря не понял, как это относится к viks, ведь со страницы я получаю именно такую JS функцию, которую и повторяю.

11 (2019.01.18 11:49:25 отредактировано Dr.Dru)

Re: viks.tv

Я в том смысле,что для расшифровке вам нужен только этот кусок.Скачайте для примера подкаст Tivix,там прописано...
https://hms.lostcut.net/viewtopic.php?id=237

+ открыть спойлер

"C++"
if (HmsRegExMatch('(eval\\(function\\(w,i,s,e\\).*?\'\\)\\);)', sHtml, scriptBlock)) {
    // Распаковываем, пока распаковывается (всегда последний eval, если их несколько)
    while (HmsRegExMatch('.*eval(\\(.*\\));', scriptBlock, scriptBlock)) {
      scriptBlock = jsEval(scriptBlock);