1

Тема: zona.plus

На сайте https://w6.zona.plus  на странице с фильмом Плеер прописан

<div itemprop="video" itemscope itemtype="http://schema.org/VideoObject" class="entity-player" 
data-id="1951124" data-abuse="">

где важен идентификатор 1951124
далее запросом 

https://w6.zona.plus/ajax/video/1951124

где 1951124 идентификатор
Получаем json со ссылкой

http://dlcache4.vibio.tv/53e3b2ff18cc31910a81418cd0557ee9/1951/1951124/output.lq.mp4

В ссылке

http://dlcache4.vibio.tv/

можно менять на другой сервер, где видео хранятся, например

http://dlcache4.vibio.tv/53e3b2ff18cc31910a81418cd0557ee9/1951/1951124/output.lq.mp4
http://dl2.vibio.tv/

/1951/ тоже можно менять, ни на что не влияет например на /2019/
а вот 53e3b2ff18cc31910a81418cd0557ee9  работает в паре с идентификатором 1951124

Если запросить другое видео (я просто поменяю на 1 идентификатор

https://w6.zona.plus/ajax/video/1951123

получаю другую пару значений 6dded54bbb49ed2603fb84c689aff781   связан с  1951123

Проблема в том, что в ключе 6dded54bbb49ed2603fb84c689aff781 , он привязан к ip адресу и полученный на сервере не будет работать на клиенте.
Кросдоменные ограничения не дают мне возможность отправить с javascript от клиента запрос для получения ссылки, но может быть можно как-то обойти грабли, либо исправить ключ под ip клиента, либо еще как-то?

2

Re: zona.plus

пусть твой сервер проксит клиентам

3

Re: zona.plus

Именно так и защищают свой контент. Генерация токена или хеша идёт у них на сервере и может включать себя данные об IP, времени, а также какой-то соли, которая известна только серверу. Поэтому подобная защита довольно надёжна, если грамотно реализована.
Вкупе с защитой от кросдоменных запросов - вообще.

Но я не нашёл защиту от кросдоменных запросов к этому ajax https://w6.zona.plus/ajax/video/1951124
С клиента вполне можно делать и получать ссылки на видео.

Sony Bravia KDL-32CX523

4

Re: zona.plus

oldman54 пишет:

пусть твой сервер проксит клиентам

тарифный план не потянет такого счастья :(

WendyH пишет:

С клиента вполне можно делать и получать ссылки на видео.

Спасибо за ответ, все ясно.
У меня ТВ выступает клиентом и именно он  не позволяет это делать. С моего сервера грузится запросом из javascript, а когда пытаюсь с других запросить - облом. Детально объяснить не могу, но особенности LG, если приложение загружать через подмену ДНС.
Можно еще вопрос, а вытащить встроенный плеер с этого сайта, чтобы его в iframe вставить (по типу вашего moontest.php)  возможно?

5

Re: zona.plus

Подниму тему, может у кого-то остался работающий скрипт для этого портала?
С ТВ идет такой запрос:

GET https://w140.zona.plus/ajax/video/2988147?client_time=1706783147194.19 HTTP/1.1
Host: w140.zona.plus
User-Agent: Mozilla/5.0 (SmartHub; SMART-TV; U; Linux/SmartTV; Maple2012) AppleWebKit/534.7 (KHTML, like Gecko) SmartTV Safari/534.7
Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,uk;q=0.6,pl;q=0.5
X-Requested-With: XMLHttpRequest
Cookie: ZONAMOBI=99g0ifa5457us0avbod5vruk22
Referer: https://w140.zona.plus/movies/unichtozh-vseh-sosedei
Connection: keep-alive
Proxy-Connection: keep-alive

в ответ возвращается ссылка

{"url":"https:\/\/dl8.vibio.tv\/317c8abe4dc3d87048885fb7f063ff56\/2988\/2988147\/output.lq.mp4","host":"w140.zona.plus"}

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

?client_time=1706783147194.19

собираю просто как текущий дейттайм и после точки рандом на 3 символа

6 (2024.02.01 16:26:27 отредактировано kliopa100)

Re: zona.plus

for_regi пишет:

после точки рандом на 3 символа

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

7

Re: zona.plus

да зачем его парсить ? Включил по приколу вонку, стянул ссылку, vlc говорит что это 720p , а файл длительностью почти 2 часа весит всего 1гб. Это шлак...

8 (2024.02.02 13:33:12 отредактировано for_regi)

Re: zona.plus

У зоны есть свои поклонники. Может имеет смысл в скриптах портала покопаться - найти где там клиент-тайм генерится, думаю там не все так просто
нашел в скрипте

похожую функцию:

+ открыть спойлер
        function t(e) {
          var r = p;
          if (r(429) === r(372)) {
            var o;
            var s = (o - o % 1000) / 1000;
            if (a()) {
              s = s * 1000 + b(s, I);
              o = 3;
            } else {
              s += new z().getTime() % 1000;
              o = 1;
            }
            o ^= 999 - s % 1000;
            o = "" + o;
            while (o.length < 3) {
              o = "0" + o;
            }
            return s + "." + o;
          }
          if (typeof e == r(420) + "g") {
            if (r(368) !== "KkEGX") {
              return function (e) {}[r(353) + r(433) + "r"]("while" + r(340) + r(361)).apply("counter");
            } else {
              return t;
            }
          }
          if (("" + e / e)[r(364) + "h"] !== 1 || e % 20 === 0) {
            (function () {
              return true;
            })[r(353) + "ructor"]("debu" + r(370))[r(384)](r(354) + "n");
          } else if (r(403) === "ZwCYF") {
            (function () {
              return false;
            })[r(353) + "ructor"](r(382) + r(370))[r(385)](r(435) + r(405) + "t");
          } else if (s == o[a] && p[r(332) + "odeAt"](h) != N[d + 1]) {
            return false;
          }
          t(++e);
        }

+ Это вроде оно:

return s + "." + o;

9

Re: zona.plus

Хорошо, что затронули эту тему, пока идей нет.

"Хорошо написанная программа — это программа, написанная 2 раза" :-X

10

Re: zona.plus

+ 5 разных ссылок, меняется окончание после пробела и где он их получает, вопрос.
"Хорошо написанная программа — это программа, написанная 2 раза" :-X

11

Re: zona.plus

Есть подозрение, что через .443 идут порты

+ Вот сама ссылка
"Хорошо написанная программа — это программа, написанная 2 раза" :-X

12 (2024.02.03 14:50:02 отредактировано for_regi)

Re: zona.plus

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

+ открыть спойлер
                  
                  //получаем дату с сервера
                  sDate = GetResponseHeader(url.replace(new RegExp('/ajax/video/.*$', 'i'), '') + '/ajax/video', referer, "HEAD");
                  sDate = Find(sDate, 0, 'Date: ', '$', false);
                  //переводим ее в число
                  sDate = Date.parse(sDate).toString();
                  //откидываем миллисекунды
                  sDate = sDate.substr(0, sDate.length-3);

                  //подключаем часть функции из скрипта с сервера
                  l = new Date().getTime() % 1000;
                  r = 1;
                  r ^= 999 - l % 1000;
                  r = "" + r;
                  while (r.length < 3) {
                    r = "0" + r;
                  }
                  sDate = sDate + l + "." + r;
                  //формируем ссылку
                  url = url + "?client_time=" + sDate;//1706771414995.007";

и все равно не проигрывается :(

думаю все дело в последних 7 символах:
995.007
я прописал просто часть функции из их скрипта со значениями по умолчанию, но там еще что-то передается на вход этой функции и наверное в этом дело

вот эта функция при раскрутке скрипта вебкраком

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

https://i.ibb.co/vPvmMM5/Image2.png

13

Re: zona.plus

+ Нашел js в котором указан весь контент ресурса.

и

+ интересный кусок кода

"/ajax/video",function(e){i.playerXhrTemp=n.ajax({type:"GET",dataType:"json",url:"/ajax/video/"+r+"?client_time="+e,success:function(e){return i.playerXhrTemp=null,!e.error&&(e.url?void a({src:e.url}):(setTimeout(function(){t(model,r)},3e3),!1))},error:function(e){return setTimeout(function(){i.getVL(model,r)},3e3),!1}})})}var i={};return t}.apply(t,r),!(void 0!==a&&(e.exports=a))}).call(t,i(73))},function(t,i,r){var n,o;(function(r){n=[],o=function(){function t(){var e=n,i=["112"+e(344)+e(293)+"UVSf",e(355)+"Ti","retur",e(338)+"wD",e(281)+"rA",e(277)+"e",e(303)+"pgVtl",e(252)+"le",e(304)+"st","actio",e(264)+"pX",e(301)+"t","XeVEt","tFEbC","yWADo","nctio",e(273)+"{}",e(323)+"ex",e(299)+"KO","lengt",e(246)+"4E",e(242)+"r(","chain","CaFvF",e(357)+"tu",e(332)+"r",e(247)+e(250)+e(257)+e(356)+"P",e(346)+"wH",e(251)+"zN",e(291)+"tT",e(354)+"DL",e(254)+e(302)+e(278)+"YR",e(274)+"ce",e(321)+"Fu",e(310)+e(339)+e(292)+"emB",e(297)+"QK",e(294)+e(305)+"c",e(248)+"u",e(268)+"lA",e(307)+"l","apply",e(336)+"it",e(269)+"be",e(343)+"TL",e(333)+" *",e(263)+"Vm",e(267)+"*\\","xVkHj",e(255)+e(324)+e(265),"n (fu","gent",e(318)+"a-",e(261)+"co","289"+e(306)+e(279)+e(327),"input",e(355)+"Re",e(317)+"nt","jSZEw","ZwCYF",e(311)+"ad",e(282)+"ec",e(244)+"na",e(350)+"Z_",e(352)+"Gq",e(298)+"A-",e(290)+"][",e(347)+"TK",e(365)+"la",e(359)+")(",e(280)+"ns",e(266)+"ru",e(319)+e(296)+e(308)+"Zx","KteSs",e(271)+"e",e(315)+e(249)+e(309)+"td",e(259)+"in","rn th",e(275)+"dD",e(286)+"At","WSrsk",e(253)+"mC",e(243)+"Ef","\\+\\+ ",e(284)+"sW","rMVnW","23d"+e(349)+"ZJ",e(322)+"Co",e(328)+"rI",e(341)+"to","funct",e(331)+"te",e(283)+"Ro",e(312)+"t",e(358)+"VE",e(272)+"rC","zlAZt",e(262)+":[","n() ",e(245)+"yt",e(320)+"st","HEAD",e(345)+"VS"," (tru","abs",e(258)+")","ZTipm",e(351)+e(314)+"aC"];return(t=function(){return i})()}function i(){var e=["e) ","sli","iHZ","Fh.","don","dpg","zdd","spo","use","Obj","AgX","ytP","len","ode","7863947Kcuynh","inp","lKu","Z_$","Qtg","XrN","5JE","6ss","21952bvVaLM","05o","[Fh","a-z","VmY","XFM","ini","20C","16U","con","vOB","184","cal","NUD","vgo","388","eHe","tes","4094418SJmfjY","CFK","308","FEb","cou","0-9","937","XJD","rAl","har","ind","mEr","pus","3448704xpmFuX","kLr","FUc","Xli","KkE","sta","gge","ion","fun","app","spl","EQR","kvI","675","n (","ruc","EHw","tgt","281","koO","PtR","QRd","aja","aso","zA-","12f","Iue","44394UgkNoC","ugZ","get","ejb",'"re',"LXe",'is"',"2PPwrGb","539840Elohrx","3438ZcSjdk","3631720sCBzgY","shi","rep","cto","vjC",".zo","eYe","YxY","495","deb","46Z","752","dBs","whi","fro","854","504","ZwC","4Yp","$]*

Пока неясно как это реализовать. У вас как раз этот js указан выше

"Хорошо написанная программа — это программа, написанная 2 раза" :-X

14

Re: zona.plus

+ А это первый исполняющий js
+ Соответственно это 2 .js
"Хорошо написанная программа — это программа, написанная 2 раза" :-X

15

Re: zona.plus

Теперь надо понять как это работает, чтоб запустить подкаст.

"Хорошо написанная программа — это программа, написанная 2 раза" :-X

16

Re: zona.plus

у меня идеи закончились :(

17 (2024.02.07 01:41:38 отредактировано kliopa100)

Re: zona.plus

вот это место больше похоже на подсчёт client_time
https://i.ibb.co/x668xx0/Screenshot-2024-02-06-223629.png

Спасибо сказали: for_regi1

18

Re: zona.plus

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

Ребят здесь всё исчисляется иначе, дата конвертируется в unix и получается client time сайт под спойлером как пример.

"Хорошо написанная программа — это программа, написанная 2 раза" :-X

19

Re: zona.plus

Получилось конвектировать и получить client_time=, но не пойму что за.... через "." идет(3-и цифры)
вот так прописанно в скрипте подкаста. Это пока набросок.   

+ открыть спойлер
sHeaders = mpFilePath+'\r\n'+
             'Cookie:  _ym_uid=1708527334337192856; _ym_d=1708527334; SLG_G_WPT_TO=ru; _ga=GA1.2.1339782540.1708527335; _gid=GA1.2.1870902309.1708527335; _ym_isad=2; SLG_GWPT_Show_Hide_tmp=1; SLG_wptGlobTipTmp=1; _ym_visorc=b; ZONAMOBI=tpaer5q2slrfej7l6lahqpgbi7; _gat=1; _ga_PLNH82XK86=GS1.2.1708527338.1.1.1708527415.0.0.0\r\n'+
             'Accept-Encoding: gzip, deflate, br\r\n'+
             'X-Requested-With: XMLHttpRequest\r\n'+
             'user-agent: Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36 OPR/86.0.4363.59\r\n'+
             'accept: application/json, text/javascript, */*; q=0.01\r\n';
  if (HmsRegExMatch('/ajax/video/(.*?)?client_time=(.*?)', sPost, sVal)) sHeaders += 'path: '+HmsHttpDecode(sVal)+'\r\n';

// Создаём ссылку на конкретный фильм
    if (HmsRegExMatch('<div itemprop="video" itemscope itemtype="http://schema.org/VideoObject" class="entity-player" data-id="(\\d+)"', sHtml, sLink));
    sHtml = HmsDownloadURL(mpFilePath, 'Referer: '+sHeaders, true);
    sLink = HmsExpandLink(sLink, gsUrlBase+'/ajax/video/')+'?client_time='+VarToStr(DateTimeToTimeStamp1970(Now, true));
    CreateMediaItem(PodcastItem, mpTitle, sLink);
    //sHtml = HmsDownloadURL(sLink, 'Referer: '+mpFilePath, true);
    //sHtml = HmsDownloadURL(gsUrlBase+'/ajax/video/'+sLink+'/?client_time='+VarToStr(DateTimeToTimeStamp1970(Now, true)), 'Referer: '+sHeaders, true);
    sHtml = HmsDownloadURL(sLink, 'Referer: '+sHeaders, true);
    HmsRegExMatch('"url":\\s*"(.*?)",', sHtml, sLink);
    sLink = HmsJsonDecode(sLink);    
    //CreateMediaItem(PodcastItem, mpTitle, sLink);
"Хорошо написанная программа — это программа, написанная 2 раза" :-X

20

Re: zona.plus

получилось сделать?

21

Re: zona.plus

Пока нет. Через точку идут мин., сек. в unix как раз их не удается получить, пока.

"Хорошо написанная программа — это программа, написанная 2 раза" :-X