91 (2016.09.30 00:55:46 отредактировано baat)

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

WendyH пишет:

На PHP запрос примерно такой:

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

$post = "domain=&url=&type=database&hash=941fdceee6625a064716ca2404bfcae6&id=10282&quality=720p";

$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: http://kodik.cc\r\n" .
              "Referer: http://kodik.cc/video/10282/941fdceee6625a064716ca2404bfcae6/720p\r\n" .
              "X-Requested-With: XMLHttpRequest\r\n",
    'content'=> $post
  )
);
$context = stream_context_create($options);
$data    = file_get_contents("http://kodik.cc/get-video", false, $context);

И никакой шифрации.

в тот хренушки...

+ открыть спойлер
<?php
$link_video= 'http://kodik.cc/video/3149/ebe6f16c2b015abcea98feb8b8341c64/720p';

//'http://kodik.cc/video/10282/941fdceee6625a064716ca2404bfcae6/720p'; c этой работает
//'http://kodik.cc/video/3149/ebe6f16c2b015abcea98feb8b8341c64/720p'; с этой нет :-(

$hash = explode('/', $link_video)[5]; $id = explode('/', $link_video)[4]; 
$post = 'domain=&url=&type=database&hash='.$hash.'&id='.$id.'&quality=720p';

$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: http://video.kodik.cc\r\n"."Referer: http://kodik.cc/video/".$id."/".$hash."/720p"."\r\n"."X-Requested-With: XMLHttpRequest\r\n", 'content'=> $post));
$context = stream_context_create($options);
$data  =  file_get_contents("http://kodik.cc/get-video", false, $context);

echo $id.'<br>'.$hash.'<br>'. strlen($data);
?>

http://kodik.cc/video/10282/941fdceee66 … fcae6/720p - c этой работает
http://kodik.cc/video/3149/ebe6f16c2b01 … 41c64/720p - с этой нет :-(

код внутри идентичный... но метод похоже иной используется... http://video.kodik.name/sessions/new_session... можно как-то унифицировать и написать универсальное решение?..

п.с. и я так понял  http://video.kodik.name/sessions/new_session и http://moonwalk.cc/sessions/new_session из одной оперы? не?... только последний ругается на ip...

92

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

baat пишет:

п.с. и я так понял  http://video.kodik.name/sessions/new_session и http://moonwalk.cc/sessions/new_session из одной оперы? не?... только последний ругается на ip...

Да, и это /get-video тоже. Всё из одной оперы и по одному принципу.

Я в подкасте просто делаю проверку, если в загруженной странице встречается iframe на video.kodik.name, то его загружаю и там уже ищем параметры для запроса. Ну и адрес запроса другой, да.

Sony Bravia KDL-32CX523

93

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

WendyH пишет:

Я в подкасте просто делаю проверку, если в загруженной странице встречается iframe на video.kodik.name, то его загружаю и там уже ищем параметры для запроса.

это где?... не нахожу чтот....

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

http://rgho.st/865WLGtNN/image.png

WendyH пишет:

Ну и адрес запроса другой, да.

допустим...

+ открыть спойлер
<?php
$link_video= 'http://kodik.cc/video/03149/ebe6f16c2b015abcea98feb8b8341c64/720p';

//'http://kodik.cc/video/10282/941fdceee6625a064716ca2404bfcae6/720p';
//'http://kodik.cc/video/3149/ebe6f16c2b015abcea98feb8b8341c64/720p';

$text =  file_get_contents($link_video);
$hash = explode('/', $link_video)[5]; $id = explode('/', $link_video)[4]; 

if (strpos($text,'kodik.name')>0) {
$new_hash=explode('/', explode('<iframe src="http://video.kodik.name/video/',$text)[1])[0];
$post = 'domain=&url=&type=database&hash='.$hash.'&id='.$id.'&quality=720p'; //тут какой он должен быть???

$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: http://video.kodik.name\r\n"."Referer: http://kodik.name/video/".$new_hash."/frame"."\r\n"."X-Requested-With: XMLHttpRequest\r\n", 'content'=> $post));
$context = stream_context_create($options);
$data  =  file_get_contents("http://kodik.name/session/new_session", false, $context);

echo $id.'<br>'.$hash.'<br>'. strlen($data);

} else {
$post = 'domain=&url=&type=database&hash='.$hash.'&id='.$id.'&quality=720p';

$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: http://video.kodik.cc\r\n"."Referer: http://kodik.cc/video/".$id."/".$hash."/720p"."\r\n"."X-Requested-With: XMLHttpRequest\r\n", 'content'=> $post));
$context = stream_context_create($options);
$data  =  file_get_contents("http://kodik.cc/get-video", false, $context);

echo $id.'<br>'.$hash.'<br>'. strlen($data);}
?>

как-то так?... всё поменял на новый запрос? не всё?...
а какой post должен быть в случае с kodik.name?

if (strpos($text,'kodik.name')>0) {
$new_hash=explode('/', explode('<iframe src="http://video.kodik.name/video/',$text)[1])[0];
$post = 'domain=&url=&type=database&hash='.$hash.'&id='.$id.'&quality=720p';

94

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

Действительно, у меня в подкасте не проверяется на kodik.name конкретно, но проверяется на наличие iframe с src начинающегося с http.

if (HmsRegExMatch('<iframe[^>]+src="(http.*?)"', sHtml, sLink))
  sHtml = HmsDownloadURL(sLink, 'Referer: '+sHeaders, true);

Но суть одна.
И там дальше я делаю поиск "/get-video" (наличие такого запроса) в странице. Если не нахожу, то ищу "/new_session" - если есть, то это moonwalk-овский алгоритм - вызываем совсем другую функцию для поиска и формирования запроса.
Хоть я и сказал, что там всё по одному принципу, но данные для запроса другие:

video_token: '86d8565d067d33d5',
    content_type: 'movie',
    access_key: '75204f694b34d5f1',
    mw_pid: 2547,
    mw_did: 364090,
    ad_attr: condition_detected 

Т.е. выцарапывать нужно уже video_token, access_key и прочие. Иделать запрос не к http://kodik.name/session/new_session, а к http://video.kodik.name/session/new_session.
Как-то так.

Sony Bravia KDL-32CX523

95 (2016.09.30 10:20:01 отредактировано baat)

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

хорошо, а теперь что не так?...
ссылку отдаёт но совершенно неправильную...  :(

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

$link_video= 'http://kodik.cc/video/3149/ebe6f16c2b015abcea98feb8b8341c64/720p';

//'http://kodik.cc/video/10282/941fdceee6625a064716ca2404bfcae6/720p';
//'http://kodik.cc/video/3149/ebe6f16c2b015abcea98feb8b8341c64/720p';

$text =  file_get_contents($link_video);
$hash = explode('/', $link_video)[5]; $id = explode('/', $link_video)[4]; 

if (strpos($text,'kodik.name')>0) {

$new_hash = explode('/', explode('<iframe src="http://video.kodik.name/video/',$text)[1])[0];
$new_name = 'http://video.kodik.name/video/'.$new_hash.'/iframe';
$new_text = file_get_contents($new_name);

$video_token = explode("'",explode("video_token: '",$new_text)[1])[0]; $content_type = explode("'",explode("content_type: '",$new_text)[1])[0]; 
$access_key = explode("'",explode("access_key: '",$new_text)[1])[0]; $mw_pid = explode(",",explode("mw_pid: ",$new_text)[1])[0]; 
$mw_did = explode(",",explode("mw_did: ",$new_text)[1])[0];

$new_post = 'video_token='.$video_token.'&content_type='.$content_type.'&access_key='.$access_key.'&mw_pid='.$mw_pid.'&mw_did='.$mw_did.'&ad_attr=0'; 

$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: http://video.kodik.name\r\n"."Referer: ".$new_name."\r\n"."X-Requested-With: XMLHttpRequest\r\n", 'content'=> $new_post));
$context = stream_context_create($options); $data  =  file_get_contents("http://video.kodik.name/sessions/new_session", false, $context);
$data = str_replace('\u0026','&',explode('"', explode('manifest_m3u8":"', $data)[1])[0]);

} else {
$post = 'domain=&url=&type=database&hash='.$hash.'&id='.$id.'&quality=720p';

$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: http://video.kodik.cc\r\n"."Referer: http://kodik.cc/video/".$id."/".$hash."/720p"."\r\n"."X-Requested-With: XMLHttpRequest\r\n", 'content'=> $post));
$context = stream_context_create($options); $data  =  file_get_contents("http://kodik.cc/get-video", false, $context);
$data = str_replace('\/','/',explode('"', explode('src":"', $data)[1])[0]);
}

echo $data;
?>

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

96

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

baat пишет:

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

Это всего лишь означает, что в отданной ссылке от запроса есть привязка к IP. И сервер это проверяет.
Т.е. в хеше также задействован IP клиента, который делает запрос к video.kodik.name/session/new_session.
А т.к. скрипт PHP исполняется на сервере и делает запрос с другого IP, то этот вариант с PHP обламывается. Нужно всё делать у клиента.

Sony Bravia KDL-32CX523

97

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

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

#############################################################
п.с. давно не заходил... могу предложить ещё одну идею по поиску мусора...

1) берём 5 закодированных строк (можно больше), в которых мусор неизвестно где...

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

2iob3gRLvabM0QEMtgTM0ake6Hm=2xmLkasBUaWzUHJ5U1EmOxEayQujtxUVkgYattQ3N1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVtQUBk5Wa
2iob3gRLvabM0QEMtgUMU5Ge6Hm=2xmLkasBUaWzUHJ5U1EmOxEayQujtxUVkgYat1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvtQ3NQnVtQUBk5Wa
2iob3gRLvabM0QEMtgTM0ake6Hm=2xmLkasBUaWzUHJ5U1EmOxtQ3NEayQujtxUVkgYat1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVtQUBk5Wa
2iob3gRLvabM0QEMtgYMUxoe6Hm=2xmLkasBUaWzUHJ5U1EmOxEayQujtxUVkgYat1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVttQ3NQUBk5Wa
2iob3gRLvabM0QEMtgYMUxoe6Hm=2xmLkasBUaWzUHJ5U1EmOxEayQujtxUVkgYat1o5kxEckjwZOdwZkxwZUzJywtQ3NdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVtQUBk5Wa

2) перебираем и поочередно сравниваем пары строк... выбираем все не совпадающие символы... в отдельный массив... получим некий массив строк, все из которых содержат мусор...

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

T0aktQ3N1o5xEckjOdkxwZUzJywtbQd7F6Ym7ygyOT1lQZowPSJ52xWMNJRQYL3cwZ05FmUSzB0ayRv
UU5G1o5kxEcjwZOdkxUzJywdtbQ7F6Ym7ygyOT1olQZwPSJ52xWM3NJRQYLcwZ05FmUSzB0ayRvtQ3N
EayQujtxUVkgYattQ3N
tQ3NEayQujtxUVkgYat
T0aktQ3N1o5xEckjOdkxwZUzJywtbQd7F6Ym7ygyOT1lQZowPSJ52xWMNJRQYL3cwZ05FmUSzB0ayRvQnVt
YUxo1o5kxEcjwZOdkxUzJywdtbQ7F6Ym7ygyOT1olQZwPSJ52xWM3NJRQYLcwZ05FmUSzB0ayRvQnVttQ3N
T0aktQ3N1o5xEckjOdkxwZUzJyw
YUxo1o5kxEcjwZOdkxUzJywtQ3N
UU5GEayQujtxUVkgYat1o5kxEcjwZOdkxUzJywdtbQ7F6Ym7ygyOT1olQZwPSJ52xWM3NJRQYLcwZ05FmUSzB0ayRvtQ3N
T0aktQ3NEayQujtxUVkgYat1o5xEckjOdkxwZUzJywtbQd7F6Ym7ygyOT1lQZowPSJ52xWMNJRQYL3cwZ05FmUSzB0ayRv
U5GtQ3NQnVt
YxoQnVttQ3N
U5GdtbQ7F6Ym7ygyOT1olQZwPSJ52xWM3NJRQYLcwZ05FmUSzB0ayRvtQ3N
YxotQ3NtbQd7F6Ym7ygyOT1lQZowPSJ52xWMNJRQYL3cwZ05FmUSzB0ayRv
T0aktQ3NEayQujtxUVkgYat1o5xEckjOdkxwZUzJywtbQd7F6Ym7ygyOT1lQZowPSJ52xWMNJRQYL3cwZ05FmUSzB0ayRvQnVt
YUxoEayQujtxUVkgYat1o5kxEcjwZOdkxUzJywdtbQ7F6Ym7ygyOT1olQZwPSJ52xWM3NJRQYLcwZ05FmUSzB0ayRvQnVttQ3N
T0aktQ3NEayQujtxUVkgYat1o5xEckjOdkxwZUzJyw
YUxoEayQujtxUVkgYat1o5kxEcjwZOdkxUzJywtQ3N
dtbQ7F6Ym7ygyOT1olQZwPSJ52xWM3NJRQYLcwZ05FmUSzB0ayRvQnVttQ3N
tQ3NtbQd7F6Ym7ygyOT1lQZowPSJ52xWMNJRQYL3cwZ05FmUSzB0ayRvQnVt

3) находим самую короткую строку (любую из самых коротких)...

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

U5GtQ3NQnVt [length=11]

4) теперь из каждой строки, содержащей мусор, берём начало и конец равные по длине самой короткой строке...

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

U5GtQ3NQnVt
T0aktQ3N1o5
FmUSzB0ayRv
UU5G1o5kxEc
zB0ayRvtQ3N
EayQujtxUVk
UVkgYattQ3N
tQ3NEayQujt
ujtxUVkgYat
zB0ayRvQnVt
YUxo1o5kxEc
yRvQnVttQ3N
OdkxwZUzJyw
kxUzJywtQ3N
UU5GEayQujt
T0aktQ3NEay
YxoQnVttQ3N
U5GdtbQ7F6Y
YxotQ3NtbQd
YUxoEayQujt
dtbQ7F6Ym7y
tQ3NtbQd7F6

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

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

U5GtQ3NQnVt ? U5GtQ3NQnV 1
T0aktQ3N1o5 ? U5GtQ3NQnV 1
FmUSzB0ayRv ? U5GtQ3NQnV 1
UU5G1o5kxEc ? U5GtQ3NQnV 1
zB0ayRvtQ3N ? U5GtQ3NQnV 1
EayQujtxUVk ? U5GtQ3NQnV 1
UVkgYattQ3N ? U5GtQ3NQnV 1
tQ3NEayQujt ? U5GtQ3NQnV 1
ujtxUVkgYat ? U5GtQ3NQnV 1
zB0ayRvQnVt ? U5GtQ3NQnV 1
YUxo1o5kxEc ? U5GtQ3NQnV 1
yRvQnVttQ3N ? U5GtQ3NQnV 1
OdkxwZUzJyw ? U5GtQ3NQnV 1
kxUzJywtQ3N ? U5GtQ3NQnV 1
UU5GEayQujt ? U5GtQ3NQnV 1
T0aktQ3NEay ? U5GtQ3NQnV 1
YxoQnVttQ3N ? U5GtQ3NQnV 1
U5GdtbQ7F6Y ? U5GtQ3NQnV 1
YxotQ3NtbQd ? U5GtQ3NQnV 1
YUxoEayQujt ? U5GtQ3NQnV 1
dtbQ7F6Ym7y ? U5GtQ3NQnV 1
tQ3NtbQd7F6 ? U5GtQ3NQnV 1
U5GtQ3NQnVt ? U5GtQ3NQn 1
T0aktQ3N1o5 ? U5GtQ3NQn 1
FmUSzB0ayRv ? U5GtQ3NQn 1
UU5G1o5kxEc ? U5GtQ3NQn 1
zB0ayRvtQ3N ? U5GtQ3NQn 1
EayQujtxUVk ? U5GtQ3NQn 1
UVkgYattQ3N ? U5GtQ3NQn 1
tQ3NEayQujt ? U5GtQ3NQn 1
ujtxUVkgYat ? U5GtQ3NQn 1
zB0ayRvQnVt ? U5GtQ3NQn 1
YUxo1o5kxEc ? U5GtQ3NQn 1
yRvQnVttQ3N ? U5GtQ3NQn 1
OdkxwZUzJyw ? U5GtQ3NQn 1
kxUzJywtQ3N ? U5GtQ3NQn 1
UU5GEayQujt ? U5GtQ3NQn 1
T0aktQ3NEay ? U5GtQ3NQn 1
YxoQnVttQ3N ? U5GtQ3NQn 1
U5GdtbQ7F6Y ? U5GtQ3NQn 1
YxotQ3NtbQd ? U5GtQ3NQn 1
YUxoEayQujt ? U5GtQ3NQn 1
dtbQ7F6Ym7y ? U5GtQ3NQn 1
tQ3NtbQd7F6 ? U5GtQ3NQn 1
U5GtQ3NQnVt ? 5GtQ3NQnV 1
T0aktQ3N1o5 ? 5GtQ3NQnV 1
FmUSzB0ayRv ? 5GtQ3NQnV 1
UU5G1o5kxEc ? 5GtQ3NQnV 1
zB0ayRvtQ3N ? 5GtQ3NQnV 1
EayQujtxUVk ? 5GtQ3NQnV 1
UVkgYattQ3N ? 5GtQ3NQnV 1
tQ3NEayQujt ? 5GtQ3NQnV 1
ujtxUVkgYat ? 5GtQ3NQnV 1
zB0ayRvQnVt ? 5GtQ3NQnV 1
YUxo1o5kxEc ? 5GtQ3NQnV 1
yRvQnVttQ3N ? 5GtQ3NQnV 1
OdkxwZUzJyw ? 5GtQ3NQnV 1
kxUzJywtQ3N ? 5GtQ3NQnV 1
UU5GEayQujt ? 5GtQ3NQnV 1
T0aktQ3NEay ? 5GtQ3NQnV 1
YxoQnVttQ3N ? 5GtQ3NQnV 1
U5GdtbQ7F6Y ? 5GtQ3NQnV 1
YxotQ3NtbQd ? 5GtQ3NQnV 1
YUxoEayQujt ? 5GtQ3NQnV 1
dtbQ7F6Ym7y ? 5GtQ3NQnV 1
tQ3NtbQd7F6 ? 5GtQ3NQnV 1
U5GtQ3NQnVt ? U5GtQ3NQ 1
T0aktQ3N1o5 ? U5GtQ3NQ 1
FmUSzB0ayRv ? U5GtQ3NQ 1
UU5G1o5kxEc ? U5GtQ3NQ 1
zB0ayRvtQ3N ? U5GtQ3NQ 1
EayQujtxUVk ? U5GtQ3NQ 1
UVkgYattQ3N ? U5GtQ3NQ 1
tQ3NEayQujt ? U5GtQ3NQ 1
ujtxUVkgYat ? U5GtQ3NQ 1
zB0ayRvQnVt ? U5GtQ3NQ 1
YUxo1o5kxEc ? U5GtQ3NQ 1
yRvQnVttQ3N ? U5GtQ3NQ 1
OdkxwZUzJyw ? U5GtQ3NQ 1
kxUzJywtQ3N ? U5GtQ3NQ 1
UU5GEayQujt ? U5GtQ3NQ 1
T0aktQ3NEay ? U5GtQ3NQ 1
YxoQnVttQ3N ? U5GtQ3NQ 1
U5GdtbQ7F6Y ? U5GtQ3NQ 1
YxotQ3NtbQd ? U5GtQ3NQ 1
YUxoEayQujt ? U5GtQ3NQ 1
dtbQ7F6Ym7y ? U5GtQ3NQ 1
tQ3NtbQd7F6 ? U5GtQ3NQ 1
U5GtQ3NQnVt ? 5GtQ3NQn 1
T0aktQ3N1o5 ? 5GtQ3NQn 1
FmUSzB0ayRv ? 5GtQ3NQn 1
UU5G1o5kxEc ? 5GtQ3NQn 1
zB0ayRvtQ3N ? 5GtQ3NQn 1
EayQujtxUVk ? 5GtQ3NQn 1
UVkgYattQ3N ? 5GtQ3NQn 1
tQ3NEayQujt ? 5GtQ3NQn 1
ujtxUVkgYat ? 5GtQ3NQn 1
zB0ayRvQnVt ? 5GtQ3NQn 1
YUxo1o5kxEc ? 5GtQ3NQn 1
yRvQnVttQ3N ? 5GtQ3NQn 1
OdkxwZUzJyw ? 5GtQ3NQn 1
kxUzJywtQ3N ? 5GtQ3NQn 1
UU5GEayQujt ? 5GtQ3NQn 1
T0aktQ3NEay ? 5GtQ3NQn 1
YxoQnVttQ3N ? 5GtQ3NQn 1
U5GdtbQ7F6Y ? 5GtQ3NQn 1
YxotQ3NtbQd ? 5GtQ3NQn 1
YUxoEayQujt ? 5GtQ3NQn 1
dtbQ7F6Ym7y ? 5GtQ3NQn 1
tQ3NtbQd7F6 ? 5GtQ3NQn 1
U5GtQ3NQnVt ? GtQ3NQnV 1
T0aktQ3N1o5 ? GtQ3NQnV 1
FmUSzB0ayRv ? GtQ3NQnV 1
UU5G1o5kxEc ? GtQ3NQnV 1
zB0ayRvtQ3N ? GtQ3NQnV 1
EayQujtxUVk ? GtQ3NQnV 1
UVkgYattQ3N ? GtQ3NQnV 1
tQ3NEayQujt ? GtQ3NQnV 1
ujtxUVkgYat ? GtQ3NQnV 1
zB0ayRvQnVt ? GtQ3NQnV 1
YUxo1o5kxEc ? GtQ3NQnV 1
yRvQnVttQ3N ? GtQ3NQnV 1
OdkxwZUzJyw ? GtQ3NQnV 1
kxUzJywtQ3N ? GtQ3NQnV 1
UU5GEayQujt ? GtQ3NQnV 1
T0aktQ3NEay ? GtQ3NQnV 1
YxoQnVttQ3N ? GtQ3NQnV 1
U5GdtbQ7F6Y ? GtQ3NQnV 1
YxotQ3NtbQd ? GtQ3NQnV 1
YUxoEayQujt ? GtQ3NQnV 1
dtbQ7F6Ym7y ? GtQ3NQnV 1
tQ3NtbQd7F6 ? GtQ3NQnV 1
U5GtQ3NQnVt ? U5GtQ3N 1
T0aktQ3N1o5 ? U5GtQ3N 1
FmUSzB0ayRv ? U5GtQ3N 1
UU5G1o5kxEc ? U5GtQ3N 1
zB0ayRvtQ3N ? U5GtQ3N 1
EayQujtxUVk ? U5GtQ3N 1
UVkgYattQ3N ? U5GtQ3N 1
tQ3NEayQujt ? U5GtQ3N 1
ujtxUVkgYat ? U5GtQ3N 1
zB0ayRvQnVt ? U5GtQ3N 1
YUxo1o5kxEc ? U5GtQ3N 1
yRvQnVttQ3N ? U5GtQ3N 1
OdkxwZUzJyw ? U5GtQ3N 1
kxUzJywtQ3N ? U5GtQ3N 1
UU5GEayQujt ? U5GtQ3N 1
T0aktQ3NEay ? U5GtQ3N 1
YxoQnVttQ3N ? U5GtQ3N 1
U5GdtbQ7F6Y ? U5GtQ3N 1
YxotQ3NtbQd ? U5GtQ3N 1
YUxoEayQujt ? U5GtQ3N 1
dtbQ7F6Ym7y ? U5GtQ3N 1
tQ3NtbQd7F6 ? U5GtQ3N 1
U5GtQ3NQnVt ? 5GtQ3NQ 1
T0aktQ3N1o5 ? 5GtQ3NQ 1
FmUSzB0ayRv ? 5GtQ3NQ 1
UU5G1o5kxEc ? 5GtQ3NQ 1
zB0ayRvtQ3N ? 5GtQ3NQ 1
EayQujtxUVk ? 5GtQ3NQ 1
UVkgYattQ3N ? 5GtQ3NQ 1
tQ3NEayQujt ? 5GtQ3NQ 1
ujtxUVkgYat ? 5GtQ3NQ 1
zB0ayRvQnVt ? 5GtQ3NQ 1
YUxo1o5kxEc ? 5GtQ3NQ 1
yRvQnVttQ3N ? 5GtQ3NQ 1
OdkxwZUzJyw ? 5GtQ3NQ 1
kxUzJywtQ3N ? 5GtQ3NQ 1
UU5GEayQujt ? 5GtQ3NQ 1
T0aktQ3NEay ? 5GtQ3NQ 1
YxoQnVttQ3N ? 5GtQ3NQ 1
U5GdtbQ7F6Y ? 5GtQ3NQ 1
YxotQ3NtbQd ? 5GtQ3NQ 1
YUxoEayQujt ? 5GtQ3NQ 1
dtbQ7F6Ym7y ? 5GtQ3NQ 1
tQ3NtbQd7F6 ? 5GtQ3NQ 1
U5GtQ3NQnVt ? GtQ3NQn 1
T0aktQ3N1o5 ? GtQ3NQn 1
FmUSzB0ayRv ? GtQ3NQn 1
UU5G1o5kxEc ? GtQ3NQn 1
zB0ayRvtQ3N ? GtQ3NQn 1
EayQujtxUVk ? GtQ3NQn 1
UVkgYattQ3N ? GtQ3NQn 1
tQ3NEayQujt ? GtQ3NQn 1
ujtxUVkgYat ? GtQ3NQn 1
zB0ayRvQnVt ? GtQ3NQn 1
YUxo1o5kxEc ? GtQ3NQn 1
yRvQnVttQ3N ? GtQ3NQn 1
OdkxwZUzJyw ? GtQ3NQn 1
kxUzJywtQ3N ? GtQ3NQn 1
UU5GEayQujt ? GtQ3NQn 1
T0aktQ3NEay ? GtQ3NQn 1
YxoQnVttQ3N ? GtQ3NQn 1
U5GdtbQ7F6Y ? GtQ3NQn 1
YxotQ3NtbQd ? GtQ3NQn 1
YUxoEayQujt ? GtQ3NQn 1
dtbQ7F6Ym7y ? GtQ3NQn 1
tQ3NtbQd7F6 ? GtQ3NQn 1
U5GtQ3NQnVt ? tQ3NQnV 1
T0aktQ3N1o5 ? tQ3NQnV 1
FmUSzB0ayRv ? tQ3NQnV 1
UU5G1o5kxEc ? tQ3NQnV 1
zB0ayRvtQ3N ? tQ3NQnV 1
EayQujtxUVk ? tQ3NQnV 1
UVkgYattQ3N ? tQ3NQnV 1
tQ3NEayQujt ? tQ3NQnV 1
ujtxUVkgYat ? tQ3NQnV 1
zB0ayRvQnVt ? tQ3NQnV 1
YUxo1o5kxEc ? tQ3NQnV 1
yRvQnVttQ3N ? tQ3NQnV 1
OdkxwZUzJyw ? tQ3NQnV 1
kxUzJywtQ3N ? tQ3NQnV 1
UU5GEayQujt ? tQ3NQnV 1
T0aktQ3NEay ? tQ3NQnV 1
YxoQnVttQ3N ? tQ3NQnV 1
U5GdtbQ7F6Y ? tQ3NQnV 1
YxotQ3NtbQd ? tQ3NQnV 1
YUxoEayQujt ? tQ3NQnV 1
dtbQ7F6Ym7y ? tQ3NQnV 1
tQ3NtbQd7F6 ? tQ3NQnV 1
U5GtQ3NQnVt ? U5GtQ3 1
T0aktQ3N1o5 ? U5GtQ3 1
FmUSzB0ayRv ? U5GtQ3 1
UU5G1o5kxEc ? U5GtQ3 1
zB0ayRvtQ3N ? U5GtQ3 1
EayQujtxUVk ? U5GtQ3 1
UVkgYattQ3N ? U5GtQ3 1
tQ3NEayQujt ? U5GtQ3 1
ujtxUVkgYat ? U5GtQ3 1
zB0ayRvQnVt ? U5GtQ3 1
YUxo1o5kxEc ? U5GtQ3 1
yRvQnVttQ3N ? U5GtQ3 1
OdkxwZUzJyw ? U5GtQ3 1
kxUzJywtQ3N ? U5GtQ3 1
UU5GEayQujt ? U5GtQ3 1
T0aktQ3NEay ? U5GtQ3 1
YxoQnVttQ3N ? U5GtQ3 1
U5GdtbQ7F6Y ? U5GtQ3 1
YxotQ3NtbQd ? U5GtQ3 1
YUxoEayQujt ? U5GtQ3 1
dtbQ7F6Ym7y ? U5GtQ3 1
tQ3NtbQd7F6 ? U5GtQ3 1
U5GtQ3NQnVt ? 5GtQ3N 1
T0aktQ3N1o5 ? 5GtQ3N 1
FmUSzB0ayRv ? 5GtQ3N 1
UU5G1o5kxEc ? 5GtQ3N 1
zB0ayRvtQ3N ? 5GtQ3N 1
EayQujtxUVk ? 5GtQ3N 1
UVkgYattQ3N ? 5GtQ3N 1
tQ3NEayQujt ? 5GtQ3N 1
ujtxUVkgYat ? 5GtQ3N 1
zB0ayRvQnVt ? 5GtQ3N 1
YUxo1o5kxEc ? 5GtQ3N 1
yRvQnVttQ3N ? 5GtQ3N 1
OdkxwZUzJyw ? 5GtQ3N 1
kxUzJywtQ3N ? 5GtQ3N 1
UU5GEayQujt ? 5GtQ3N 1
T0aktQ3NEay ? 5GtQ3N 1
YxoQnVttQ3N ? 5GtQ3N 1
U5GdtbQ7F6Y ? 5GtQ3N 1
YxotQ3NtbQd ? 5GtQ3N 1
YUxoEayQujt ? 5GtQ3N 1
dtbQ7F6Ym7y ? 5GtQ3N 1
tQ3NtbQd7F6 ? 5GtQ3N 1
U5GtQ3NQnVt ? GtQ3NQ 1
T0aktQ3N1o5 ? GtQ3NQ 1
FmUSzB0ayRv ? GtQ3NQ 1
UU5G1o5kxEc ? GtQ3NQ 1
zB0ayRvtQ3N ? GtQ3NQ 1
EayQujtxUVk ? GtQ3NQ 1
UVkgYattQ3N ? GtQ3NQ 1
tQ3NEayQujt ? GtQ3NQ 1
ujtxUVkgYat ? GtQ3NQ 1
zB0ayRvQnVt ? GtQ3NQ 1
YUxo1o5kxEc ? GtQ3NQ 1
yRvQnVttQ3N ? GtQ3NQ 1
OdkxwZUzJyw ? GtQ3NQ 1
kxUzJywtQ3N ? GtQ3NQ 1
UU5GEayQujt ? GtQ3NQ 1
T0aktQ3NEay ? GtQ3NQ 1
YxoQnVttQ3N ? GtQ3NQ 1
U5GdtbQ7F6Y ? GtQ3NQ 1
YxotQ3NtbQd ? GtQ3NQ 1
YUxoEayQujt ? GtQ3NQ 1
dtbQ7F6Ym7y ? GtQ3NQ 1
tQ3NtbQd7F6 ? GtQ3NQ 1
U5GtQ3NQnVt ? tQ3NQn 1
T0aktQ3N1o5 ? tQ3NQn 1
FmUSzB0ayRv ? tQ3NQn 1
UU5G1o5kxEc ? tQ3NQn 1
zB0ayRvtQ3N ? tQ3NQn 1
EayQujtxUVk ? tQ3NQn 1
UVkgYattQ3N ? tQ3NQn 1
tQ3NEayQujt ? tQ3NQn 1
ujtxUVkgYat ? tQ3NQn 1
zB0ayRvQnVt ? tQ3NQn 1
YUxo1o5kxEc ? tQ3NQn 1
yRvQnVttQ3N ? tQ3NQn 1
OdkxwZUzJyw ? tQ3NQn 1
kxUzJywtQ3N ? tQ3NQn 1
UU5GEayQujt ? tQ3NQn 1
T0aktQ3NEay ? tQ3NQn 1
YxoQnVttQ3N ? tQ3NQn 1
U5GdtbQ7F6Y ? tQ3NQn 1
YxotQ3NtbQd ? tQ3NQn 1
YUxoEayQujt ? tQ3NQn 1
dtbQ7F6Ym7y ? tQ3NQn 1
tQ3NtbQd7F6 ? tQ3NQn 1
U5GtQ3NQnVt ? Q3NQnV 1
T0aktQ3N1o5 ? Q3NQnV 1
FmUSzB0ayRv ? Q3NQnV 1
UU5G1o5kxEc ? Q3NQnV 1
zB0ayRvtQ3N ? Q3NQnV 1
EayQujtxUVk ? Q3NQnV 1
UVkgYattQ3N ? Q3NQnV 1
tQ3NEayQujt ? Q3NQnV 1
ujtxUVkgYat ? Q3NQnV 1
zB0ayRvQnVt ? Q3NQnV 1
YUxo1o5kxEc ? Q3NQnV 1
yRvQnVttQ3N ? Q3NQnV 1
OdkxwZUzJyw ? Q3NQnV 1
kxUzJywtQ3N ? Q3NQnV 1
UU5GEayQujt ? Q3NQnV 1
T0aktQ3NEay ? Q3NQnV 1
YxoQnVttQ3N ? Q3NQnV 1
U5GdtbQ7F6Y ? Q3NQnV 1
YxotQ3NtbQd ? Q3NQnV 1
YUxoEayQujt ? Q3NQnV 1
dtbQ7F6Ym7y ? Q3NQnV 1
tQ3NtbQd7F6 ? Q3NQnV 1
U5GtQ3NQnVt ? U5GtQ 1
T0aktQ3N1o5 ? U5GtQ 1
FmUSzB0ayRv ? U5GtQ 1
UU5G1o5kxEc ? U5GtQ 1
zB0ayRvtQ3N ? U5GtQ 1
EayQujtxUVk ? U5GtQ 1
UVkgYattQ3N ? U5GtQ 1
tQ3NEayQujt ? U5GtQ 1
ujtxUVkgYat ? U5GtQ 1
zB0ayRvQnVt ? U5GtQ 1
YUxo1o5kxEc ? U5GtQ 1
yRvQnVttQ3N ? U5GtQ 1
OdkxwZUzJyw ? U5GtQ 1
kxUzJywtQ3N ? U5GtQ 1
UU5GEayQujt ? U5GtQ 1
T0aktQ3NEay ? U5GtQ 1
YxoQnVttQ3N ? U5GtQ 1
U5GdtbQ7F6Y ? U5GtQ 1
YxotQ3NtbQd ? U5GtQ 1
YUxoEayQujt ? U5GtQ 1
dtbQ7F6Ym7y ? U5GtQ 1
tQ3NtbQd7F6 ? U5GtQ 1
U5GtQ3NQnVt ? 5GtQ3 1
T0aktQ3N1o5 ? 5GtQ3 1
FmUSzB0ayRv ? 5GtQ3 1
UU5G1o5kxEc ? 5GtQ3 1
zB0ayRvtQ3N ? 5GtQ3 1
EayQujtxUVk ? 5GtQ3 1
UVkgYattQ3N ? 5GtQ3 1
tQ3NEayQujt ? 5GtQ3 1
ujtxUVkgYat ? 5GtQ3 1
zB0ayRvQnVt ? 5GtQ3 1
YUxo1o5kxEc ? 5GtQ3 1
yRvQnVttQ3N ? 5GtQ3 1
OdkxwZUzJyw ? 5GtQ3 1
kxUzJywtQ3N ? 5GtQ3 1
UU5GEayQujt ? 5GtQ3 1
T0aktQ3NEay ? 5GtQ3 1
YxoQnVttQ3N ? 5GtQ3 1
U5GdtbQ7F6Y ? 5GtQ3 1
YxotQ3NtbQd ? 5GtQ3 1
YUxoEayQujt ? 5GtQ3 1
dtbQ7F6Ym7y ? 5GtQ3 1
tQ3NtbQd7F6 ? 5GtQ3 1
U5GtQ3NQnVt ? GtQ3N 1
T0aktQ3N1o5 ? GtQ3N 1
FmUSzB0ayRv ? GtQ3N 1
UU5G1o5kxEc ? GtQ3N 1
zB0ayRvtQ3N ? GtQ3N 1
EayQujtxUVk ? GtQ3N 1
UVkgYattQ3N ? GtQ3N 1
tQ3NEayQujt ? GtQ3N 1
ujtxUVkgYat ? GtQ3N 1
zB0ayRvQnVt ? GtQ3N 1
YUxo1o5kxEc ? GtQ3N 1
yRvQnVttQ3N ? GtQ3N 1
OdkxwZUzJyw ? GtQ3N 1
kxUzJywtQ3N ? GtQ3N 1
UU5GEayQujt ? GtQ3N 1
T0aktQ3NEay ? GtQ3N 1
YxoQnVttQ3N ? GtQ3N 1
U5GdtbQ7F6Y ? GtQ3N 1
YxotQ3NtbQd ? GtQ3N 1
YUxoEayQujt ? GtQ3N 1
dtbQ7F6Ym7y ? GtQ3N 1
tQ3NtbQd7F6 ? GtQ3N 1
U5GtQ3NQnVt ? tQ3NQ 1
T0aktQ3N1o5 ? tQ3NQ 1
FmUSzB0ayRv ? tQ3NQ 1
UU5G1o5kxEc ? tQ3NQ 1
zB0ayRvtQ3N ? tQ3NQ 1
EayQujtxUVk ? tQ3NQ 1
UVkgYattQ3N ? tQ3NQ 1
tQ3NEayQujt ? tQ3NQ 1
ujtxUVkgYat ? tQ3NQ 1
zB0ayRvQnVt ? tQ3NQ 1
YUxo1o5kxEc ? tQ3NQ 1
yRvQnVttQ3N ? tQ3NQ 1
OdkxwZUzJyw ? tQ3NQ 1
kxUzJywtQ3N ? tQ3NQ 1
UU5GEayQujt ? tQ3NQ 1
T0aktQ3NEay ? tQ3NQ 1
YxoQnVttQ3N ? tQ3NQ 1
U5GdtbQ7F6Y ? tQ3NQ 1
YxotQ3NtbQd ? tQ3NQ 1
YUxoEayQujt ? tQ3NQ 1
dtbQ7F6Ym7y ? tQ3NQ 1
tQ3NtbQd7F6 ? tQ3NQ 1
U5GtQ3NQnVt ? Q3NQn 1
T0aktQ3N1o5 ? Q3NQn 1
FmUSzB0ayRv ? Q3NQn 1
UU5G1o5kxEc ? Q3NQn 1
zB0ayRvtQ3N ? Q3NQn 1
EayQujtxUVk ? Q3NQn 1
UVkgYattQ3N ? Q3NQn 1
tQ3NEayQujt ? Q3NQn 1
ujtxUVkgYat ? Q3NQn 1
zB0ayRvQnVt ? Q3NQn 1
YUxo1o5kxEc ? Q3NQn 1
yRvQnVttQ3N ? Q3NQn 1
OdkxwZUzJyw ? Q3NQn 1
kxUzJywtQ3N ? Q3NQn 1
UU5GEayQujt ? Q3NQn 1
T0aktQ3NEay ? Q3NQn 1
YxoQnVttQ3N ? Q3NQn 1
U5GdtbQ7F6Y ? Q3NQn 1
YxotQ3NtbQd ? Q3NQn 1
YUxoEayQujt ? Q3NQn 1
dtbQ7F6Ym7y ? Q3NQn 1
tQ3NtbQd7F6 ? Q3NQn 1
U5GtQ3NQnVt ? 3NQnV 1
T0aktQ3N1o5 ? 3NQnV 1
FmUSzB0ayRv ? 3NQnV 1
UU5G1o5kxEc ? 3NQnV 1
zB0ayRvtQ3N ? 3NQnV 1
EayQujtxUVk ? 3NQnV 1
UVkgYattQ3N ? 3NQnV 1
tQ3NEayQujt ? 3NQnV 1
ujtxUVkgYat ? 3NQnV 1
zB0ayRvQnVt ? 3NQnV 1
YUxo1o5kxEc ? 3NQnV 1
yRvQnVttQ3N ? 3NQnV 1
OdkxwZUzJyw ? 3NQnV 1
kxUzJywtQ3N ? 3NQnV 1
UU5GEayQujt ? 3NQnV 1
T0aktQ3NEay ? 3NQnV 1
YxoQnVttQ3N ? 3NQnV 1
U5GdtbQ7F6Y ? 3NQnV 1
YxotQ3NtbQd ? 3NQnV 1
YUxoEayQujt ? 3NQnV 1
dtbQ7F6Ym7y ? 3NQnV 1
tQ3NtbQd7F6 ? 3NQnV 1
U5GtQ3NQnVt ? U5Gt 1
T0aktQ3N1o5 ? U5Gt 1
FmUSzB0ayRv ? U5Gt 1
UU5G1o5kxEc ? U5Gt 1
zB0ayRvtQ3N ? U5Gt 1
EayQujtxUVk ? U5Gt 1
UVkgYattQ3N ? U5Gt 1
tQ3NEayQujt ? U5Gt 1
ujtxUVkgYat ? U5Gt 1
zB0ayRvQnVt ? U5Gt 1
YUxo1o5kxEc ? U5Gt 1
yRvQnVttQ3N ? U5Gt 1
OdkxwZUzJyw ? U5Gt 1
kxUzJywtQ3N ? U5Gt 1
UU5GEayQujt ? U5Gt 1
T0aktQ3NEay ? U5Gt 1
YxoQnVttQ3N ? U5Gt 1
U5GdtbQ7F6Y ? U5Gt 1
YxotQ3NtbQd ? U5Gt 1
YUxoEayQujt ? U5Gt 1
dtbQ7F6Ym7y ? U5Gt 1
tQ3NtbQd7F6 ? U5Gt 1
U5GtQ3NQnVt ? 5GtQ 1
T0aktQ3N1o5 ? 5GtQ 1
FmUSzB0ayRv ? 5GtQ 1
UU5G1o5kxEc ? 5GtQ 1
zB0ayRvtQ3N ? 5GtQ 1
EayQujtxUVk ? 5GtQ 1
UVkgYattQ3N ? 5GtQ 1
tQ3NEayQujt ? 5GtQ 1
ujtxUVkgYat ? 5GtQ 1
zB0ayRvQnVt ? 5GtQ 1
YUxo1o5kxEc ? 5GtQ 1
yRvQnVttQ3N ? 5GtQ 1
OdkxwZUzJyw ? 5GtQ 1
kxUzJywtQ3N ? 5GtQ 1
UU5GEayQujt ? 5GtQ 1
T0aktQ3NEay ? 5GtQ 1
YxoQnVttQ3N ? 5GtQ 1
U5GdtbQ7F6Y ? 5GtQ 1
YxotQ3NtbQd ? 5GtQ 1
YUxoEayQujt ? 5GtQ 1
dtbQ7F6Ym7y ? 5GtQ 1
tQ3NtbQd7F6 ? 5GtQ 1
U5GtQ3NQnVt ? GtQ3 1
T0aktQ3N1o5 ? GtQ3 1
FmUSzB0ayRv ? GtQ3 1
UU5G1o5kxEc ? GtQ3 1
zB0ayRvtQ3N ? GtQ3 1
EayQujtxUVk ? GtQ3 1
UVkgYattQ3N ? GtQ3 1
tQ3NEayQujt ? GtQ3 1
ujtxUVkgYat ? GtQ3 1
zB0ayRvQnVt ? GtQ3 1
YUxo1o5kxEc ? GtQ3 1
yRvQnVttQ3N ? GtQ3 1
OdkxwZUzJyw ? GtQ3 1
kxUzJywtQ3N ? GtQ3 1
UU5GEayQujt ? GtQ3 1
T0aktQ3NEay ? GtQ3 1
YxoQnVttQ3N ? GtQ3 1
U5GdtbQ7F6Y ? GtQ3 1
YxotQ3NtbQd ? GtQ3 1
YUxoEayQujt ? GtQ3 1
dtbQ7F6Ym7y ? GtQ3 1
tQ3NtbQd7F6 ? GtQ3 1
U5GtQ3NQnVt ? tQ3N 1
T0aktQ3N1o5 ? tQ3N 2
FmUSzB0ayRv ? tQ3N 2
UU5G1o5kxEc ? tQ3N 2
zB0ayRvtQ3N ? tQ3N 3
EayQujtxUVk ? tQ3N 3
UVkgYattQ3N ? tQ3N 4
tQ3NEayQujt ? tQ3N 5
ujtxUVkgYat ? tQ3N 5
zB0ayRvQnVt ? tQ3N 5
YUxo1o5kxEc ? tQ3N 5
yRvQnVttQ3N ? tQ3N 6
OdkxwZUzJyw ? tQ3N 6
kxUzJywtQ3N ? tQ3N 7
UU5GEayQujt ? tQ3N 7
T0aktQ3NEay ? tQ3N 8
YxoQnVttQ3N ? tQ3N 9
U5GdtbQ7F6Y ? tQ3N 9
YxotQ3NtbQd ? tQ3N 10
YUxoEayQujt ? tQ3N 10
dtbQ7F6Ym7y ? tQ3N 10
tQ3NtbQd7F6 ? tQ3N 11

U5GtQ3NQnVt ? Q3NQ 1
T0aktQ3N1o5 ? Q3NQ 1
FmUSzB0ayRv ? Q3NQ 1
UU5G1o5kxEc ? Q3NQ 1
zB0ayRvtQ3N ? Q3NQ 1
EayQujtxUVk ? Q3NQ 1
UVkgYattQ3N ? Q3NQ 1
tQ3NEayQujt ? Q3NQ 1
ujtxUVkgYat ? Q3NQ 1
zB0ayRvQnVt ? Q3NQ 1
YUxo1o5kxEc ? Q3NQ 1
yRvQnVttQ3N ? Q3NQ 1
OdkxwZUzJyw ? Q3NQ 1
kxUzJywtQ3N ? Q3NQ 1
UU5GEayQujt ? Q3NQ 1
T0aktQ3NEay ? Q3NQ 1
YxoQnVttQ3N ? Q3NQ 1
U5GdtbQ7F6Y ? Q3NQ 1
YxotQ3NtbQd ? Q3NQ 1
YUxoEayQujt ? Q3NQ 1
dtbQ7F6Ym7y ? Q3NQ 1
tQ3NtbQd7F6 ? Q3NQ 1
U5GtQ3NQnVt ? 3NQn 1
T0aktQ3N1o5 ? 3NQn 1
FmUSzB0ayRv ? 3NQn 1
UU5G1o5kxEc ? 3NQn 1
zB0ayRvtQ3N ? 3NQn 1
EayQujtxUVk ? 3NQn 1
UVkgYattQ3N ? 3NQn 1
tQ3NEayQujt ? 3NQn 1
ujtxUVkgYat ? 3NQn 1
zB0ayRvQnVt ? 3NQn 1
YUxo1o5kxEc ? 3NQn 1
yRvQnVttQ3N ? 3NQn 1
OdkxwZUzJyw ? 3NQn 1
kxUzJywtQ3N ? 3NQn 1
UU5GEayQujt ? 3NQn 1
T0aktQ3NEay ? 3NQn 1
YxoQnVttQ3N ? 3NQn 1
U5GdtbQ7F6Y ? 3NQn 1
YxotQ3NtbQd ? 3NQn 1
YUxoEayQujt ? 3NQn 1
dtbQ7F6Ym7y ? 3NQn 1
tQ3NtbQd7F6 ? 3NQn 1
U5GtQ3NQnVt ? NQnV 1
T0aktQ3N1o5 ? NQnV 1
FmUSzB0ayRv ? NQnV 1
UU5G1o5kxEc ? NQnV 1
zB0ayRvtQ3N ? NQnV 1
EayQujtxUVk ? NQnV 1
UVkgYattQ3N ? NQnV 1
tQ3NEayQujt ? NQnV 1
ujtxUVkgYat ? NQnV 1
zB0ayRvQnVt ? NQnV 1
YUxo1o5kxEc ? NQnV 1
yRvQnVttQ3N ? NQnV 1
OdkxwZUzJyw ? NQnV 1
kxUzJywtQ3N ? NQnV 1
UU5GEayQujt ? NQnV 1
T0aktQ3NEay ? NQnV 1
YxoQnVttQ3N ? NQnV 1
U5GdtbQ7F6Y ? NQnV 1
YxotQ3NtbQd ? NQnV 1
YUxoEayQujt ? NQnV 1
dtbQ7F6Ym7y ? NQnV 1
tQ3NtbQd7F6 ? NQnV 1

6) в итоге имеем точное определение мусора... tQ3N 11...

#############################################################

например на php можно вот так реализовать...

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


$a[].='2iob3gRLvabM0QEMtgTM0ake6Hm=2xmLkasBUaWzUHJ5U1EmOxEayQujtxUVkgYattQ3N1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVtQUBk5Wa';
$a[].='2iob3gRLvabM0QEMtgUMU5Ge6Hm=2xmLkasBUaWzUHJ5U1EmOxEayQujtxUVkgYat1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvtQ3NQnVtQUBk5Wa';
$a[].='2iob3gRLvabM0QEMtgTM0ake6Hm=2xmLkasBUaWzUHJ5U1EmOxtQ3NEayQujtxUVkgYat1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVtQUBk5Wa';
$a[].='2iob3gRLvabM0QEMtgYMUxoe6Hm=2xmLkasBUaWzUHJ5U1EmOxEayQujtxUVkgYat1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVttQ3NQUBk5Wa';
$a[].='2iob3gRLvabM0QEMtgYMUxoe6Hm=2xmLkasBUaWzUHJ5U1EmOxEayQujtxUVkgYat1o5kxEckjwZOdwZkxwZUzJywtQ3NdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVtQUBk5Wa';


for ($i=0; $i<count($a); $i++) 
    for ($j=0; $j<count($a); $j++) 

        if ($i!=$j) {

            $a1=$a[$i]; $a2=$a[$j];
            $temp1=''; $temp2='';

                for ($k=0; $k<strlen($a1); $k++)  if ($a1[$k]!=$a2[$k])  { 
                                                            $temp1.=$a1[$k]; 
                                                            $temp2.=$a2[$k]; 
                                                            }

                if (!$b) $b[].=$temp1; else 
                                     if ($temp1!='') if (!in_array($temp1, $b)) $b[].=$temp1;  

                                    if ($temp2!='') if (!in_array($temp2, $b)) $b[].=$temp2; 
                }




        $min=0;

        #write $b & find min in $b
        for ($i=0; $i<count($b); $i++) {
                                    echo '<br>'.$b[$i]; 
                                    if (strlen($b[$i])<strlen($b[$min])) $min=$i;
                                   }


        $str = $b[$min];
        echo '<br><br>'.$b[$min].' [length='.strlen($b[$min]).']<br>';


            for ($i=0; $i<count($b); $i++) 
        if ($i!=$min) {
                    $s1=substr($b[$i],0,strlen($b[$min]));
                    $s2=substr($b[$i],strlen($b[$i])-strlen($b[$min]),strlen($b[$min]));

        if (!$c) $c[].=$s1; else if (!in_array($s1, $c)) $c[].=$s1;  

        if (strlen($b[$min])<strlen($b[$i])) if (!in_array($s2, $c)) $c[].=$s2;  
                   }


        #write $c
        for ($i=0; $i<count($c); $i++) echo '<br>'.$c[$i]; 


        #find in $c
        for ($n=strlen($str); $n>3; $n--) 
            for ($i=0; $i<strlen($str)-$n; $i++) {
                                        $t=0;
                            $str1=substr($str,$i, $n);

            for ($j=0; $j<count($c); $j++)  if (strpos($c[$j],$str1)!==false) $t++;

           #write find value
           if ($t>count($a)) echo '<br><br>'.$str1.' '.$t;
                                         }



?>

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

но результат есть...

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

http://rgho.st/6JYGgYj77/image.png

Прикреплённые файлы сообщения

flowplayer-3.2.11.swf 415.43 kb, скачивалось 411 раз, начиная с 2016.09.30

uppod-baskino-club.swf 391.29 kb, скачивалось 442 раза, начиная с 2016.09.30

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

98

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

По поводу нахождения мусора, также дополню. Не помню, где-то я вроде писал тут, как это делал я - ручным способом.

1) Получаем зашифрованную ссылку на фильм;
2) Нажимаем F5 в браузере (обновляем страницу с фильмом);
3) И получаем на этот же фильм зашифрованную ссылку снова.

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

И делаем вот что:
Допустим, у нас две зашифрованные ссылки одного и того же фильма получились такие:

1) 2iob3gRLvabM0QEMtgTM0ake6Hm=2xmLkasBUaWzUHJ5U1EmOxEayQujtxUVkgYattQ3N1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVtQUBk5Wa
2) 2iob3gRLvabM0QEMtgTM0ake6Hm=2xmtQ3NLkasBUaWzUHJ5U1EmOxEayQujtxUVkgYat1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVtQUBk5Wa

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

2iob3gRLvabM0QEMtgTM0ake6Hm=2xm    LkasBUaWzUHJ5U1EmOxEayQujtxUVkgYattQ3N1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVtQUBk5Wa
2iob3gRLvabM0QEMtgTM0ake6Hm=2xmtQ3NLkasBUaWzUHJ5U1EmOxEayQujtxUVkgYat1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVtQUBk5Wa

Идём дальше и при нахождении опять различий сдвигаем уже вторую строку:

2iob3gRLvabM0QEMtgTM0ake6Hm=2xm    LkasBUaWzUHJ5U1EmOxEayQujtxUVkgYattQ3N1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVtQUBk5Wa
2iob3gRLvabM0QEMtgTM0ake6Hm=2xmtQ3NLkasBUaWzUHJ5U1EmOxEayQujtxUVkgYat    1o5kxEckjwZOdwZkxwZUzJywdtbQd7F6Ym7ygyOT1olQZowPSJ52xWM3NJR3QYL3cwZ05FmUSzB0ayRvQnVtQUBk5Wa

Мусор виден становится визуально.

Единственное нужное условие - получать две зашифрованные ссылки одного фильма нужно с коротким промежутком по времени, чтобы хеш временной части ссылки был одним и тем-же.
(Я вот про эту часть:
h ttp://wx14.poiuytrew.pw/s/b12224df772dbcf411ce90c647d07f61/720/blabla.mp4)

Sony Bravia KDL-32CX523

99

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

WendyH пишет:

ручным способом

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

всегда лучше когда машина за тебя делает работу... какую бы то ни было...

WendyH пишет:

Только мусор в них будет, как правило, в разных местах (ибо он вставляется random в разные места каждый раз).

что в разных то понятно, но ещё и начало ссылки может изменятся...

WendyH пишет:

Вставляем их в редактор с monospace шрифтом и сравниваем их глазами побуквенно.

долго и муторно... и опять же начало ссылки может меняться...

WendyH пишет:

Мусор виден становится визуально.

когда строка длинная и начало строки изменено, то не так явно и видно...

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

100

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

Хотел расписать как именно получить код swf файла, если он не получается с помощью программ декомпилирования, но инструкция получилась маленькая.

Нашёл старый пост аж 2013 года, где я объяснял как в таких случаях поступать. Но та информация немного устарела (ссылка на SWF Decrypt уже не работает), да и нашёлся более простой способ.

А твои примеры файлов flowplayer-3.2.11.swf и uppod-baskino-club.swf - что-то я с ними проблем не нашёл с ходу. В смысле у них не белиберда, а вполне себе код исходный можно посмотреть каким-нибудь "Sothink SWF Decompiler".

В случае с flowplayer - там нет codec_a, codec_b и hash. Потому как это не Uppod плеер. А вполне себе Flowplayer. И у него другая защита.
Беглым взглядом увидел только то, что в функции decode у него декодируется token, который, как я понял, передаётся в настройках флеш-плеера на странице (или как параметр в ссылке).

+ Функция декодирования в плеере в com.meychi.ascrypt класс ТЕА
public static function decrypt(param1:String, param2:String) : String
        {
            var _loc_6:Number = NaN;
            var _loc_10:Number = NaN;
            var _loc_11:Number = NaN;
            var _loc_3:* = charsToLongs(hexToChars(param1));
            var _loc_4:* = charsToLongs(strToChars(param2));
            var _loc_5:* = _loc_3.length;
            if (_loc_3.length == 0)
            {
                return "";
            }
            var _loc_7:* = _loc_3[(_loc_5 - 1)];
            var _loc_8:* = _loc_3[0];
            var _loc_9:Number = 2654435769;
            var _loc_12:* = Math.floor(6 + 52 / _loc_5);
            var _loc_13:* = Math.floor(6 + 52 / _loc_5) * _loc_9;
            while (_loc_13 != 0)
            {
                
                _loc_11 = _loc_13 >>> 2 & 3;
                _loc_6 = _loc_5 - 1;
                while (_loc_6 > 0)
                {
                    
                    _loc_7 = _loc_3[(_loc_6 - 1)];
                    _loc_10 = (_loc_7 >>> 5 ^ _loc_8 << 2) + (_loc_8 >>> 3 ^ _loc_7 << 4) ^ (_loc_13 ^ _loc_8) + (_loc_4[_loc_6 & 3 ^ _loc_11] ^ _loc_7);
                    var _loc_14:* = _loc_3[_loc_6] - _loc_10;
                    _loc_3[_loc_6] = _loc_3[_loc_6] - _loc_10;
                    _loc_8 = _loc_14;
                    _loc_6 = _loc_6 - 1;
                }
                _loc_7 = _loc_3[(_loc_5 - 1)];
                _loc_10 = (_loc_7 >>> 5 ^ _loc_8 << 2) + (_loc_8 >>> 3 ^ _loc_7 << 4) ^ (_loc_13 ^ _loc_8) + (_loc_4[_loc_6 & 3 ^ _loc_11] ^ _loc_7);
                var _loc_14:* = _loc_3[0] - _loc_10;
                _loc_3[0] = _loc_3[0] - _loc_10;
                _loc_8 = _loc_14;
                _loc_13 = _loc_13 - _loc_9;
            }
            return charsToStr(longsToChars(_loc_3));
        }// end function

На входе которой передаётся зашифрованный secureToken и token из настроек.
А структуру ссылки на файл можно примерно получить из функций:

+ открыть спойлер
        private function buildClipUrl(_arg1:String, _arg2:Clip):String{
            var _local3:int;
            var _local4:Array;
            if (!_arg1){
                return (null);
            };
            this.log.debug(("main resolver is " + this._mainResolver));
            if (URLUtil.isCompleteURLWithProtocol(_arg2.getPreviousResolvedUrl(this._mainResolver))){
                _local3 = (_arg2.url.lastIndexOf("/files/") + 6);
                _local4 = [_arg2.url.substring(0, _local3), _arg2.url.substring((_local3 + 1))];
                return (URLUtil.appendToPath(URLUtil.appendToPath(_local4[0], this.generateProtection(_arg1, _local4[1])), _local4[1]));
            };
            return (URLUtil.appendToPath(this.generateProtection(_arg1, _arg2.getPreviousResolvedUrl(this._mainResolver)), _arg2.url));
        }
        private function generateProtection(_arg1:String, _arg2:String):String{
            var _local3:String = this._config.token;
            return (((MD5.hash((((_local3 + "/") + _arg2) + _arg1)) + "/") + _arg1));
        }

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

В случае с uppod-baskino-club.swf - так там с первого взгляда вроде всё норм. Скриншот получения codec_a прилагаю.
Но если со значениями codec_a и codec_b не получается и на выходе белиберда. То можно попробовать методом hash, как будто мы вообще этих codec_a не нашли.

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

https://hms.lostcut.net/misc.php?action=pun_attachment&amp;item=1300

Прикреплённые файлы сообщения

uppod_baskino_club.png 76.73 kb, скачивалось 289 раз, начиная с 2016.10.13

Sony Bravia KDL-32CX523

101

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

baat пишет:

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

Понравилась. Я тоже за автоматизацию. Но реализовать её и проверить у меня сейчас нет времени. Может быть когда-нибудь.
По поводу ручного - на сколько я знаю, мусор на сайте всегда один и тот же. И его найдя один раз вручную, можно использовать для всего ресурса прям в коде расшифровки ссылок. Он не меняется (не разу не видел, чтобы он для сайта менялся).

Sony Bravia KDL-32CX523

102

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

Если получить исходный код скриптов плеера не удалось

  • 1) Самый простой и надёжный способ - http://www.showmycode.com/ (умеет снимать некоторые защиты с swf файлов).

  • 2) RABCDAsm
    Примеры:
    (распаковать запакованный swf)
    swfextract.exe flowplayer-3.2.11.swf

    (экспортировать из файлов код и bin участки, в которых может содержаться код в файлы .abc)
    abcexport.exe flowplayer-3.2.11.swf

    (дизасемблирование abc файла - создаётся папка со структурой классов и исходным кодом)
    rabcdasm.exe flowplayer-3.2.11-0.abc

Если ни codec_a, ни hash в исходном коде не найден
То, скорее всего, данный флеш-плеер не Uppod и у него другой алгоритм защиты.

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

Sony Bravia KDL-32CX523

103

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

baat, не, твоё применение комбинаторики как науки для получения таблиц замен (codec_a и проч) и нахождения мусора - это великолепно!
Хоть в UppodExperiment и есть тоже реализация нахождения автоматически мусора, но твоя вторая формула чисто для его нахождения по нескольким зашифрованным ссылкам - это тоже супер и нужно реализовать на сайте.
Только вот пока меня интересует каков будет результат, если в зашифрованных ссылках вообще не используется мусор. Он может его найти там, где его нет (по найденным совпадениям одинаковых участков). Т.е. ложные срабатывания... Хотя, это я размышляю чисто теоретически, нужно проверять.

Sony Bravia KDL-32CX523

104

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

baat, в общем, постарался по-бырому накатать на html + javascript твой алгоритм.
https://hms.lostcut.net/experiment/uppodtrash.php

Но не сильно тестировал зашифрованные ссылки с разных сайтов. Требуется проверка.

Sony Bravia KDL-32CX523

105

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

Можно совсем как для маленьких по поводу flowplayer-3.2.11.swf. Ситуация:

Имеем видеохостинг namba.kz который использует данный плеер.
Возьмем например плеер со страницы http://namba.kz/#!/video/11098871/
Конфиг для этого видео тут http://video.namba.kz/flashvars-3.2.11. … 11098871_1
Сгенерированная ссылка (просмотр/скачивание) сервисом, полученная с помощью сниффера download.files.namba.net/files/6f963ad8e4cf52a3c48f2dffb943f60e/5829beda/84843771/video.flv

Какой-то хэш/timestamp/уникальный id ролика/ (как мне кажется). Из конфига/ссылки конфига можно получить ID ролика и timestamp или самому сгенерировать. А вот из чего состоит этот хэш? Я смотрел декомпилированный исходник на ActionScript, с моими скудными знаниями так и не сообразил.

private function buildClipUrl(_arg1:String, _arg2:Clip):String{
            var _local3:int;
            var _local4:Array;
            if (!_arg1){
                return (null);
            };
            this.log.debug(("main resolver is " + this._mainResolver));
            if (URLUtil.isCompleteURLWithProtocol(_arg2.getPreviousResolvedUrl(this._mainResolver))){
                _local3 = (_arg2.url.lastIndexOf("/files/") + 6);
                _local4 = [_arg2.url.substring(0, _local3), _arg2.url.substring((_local3 + 1))];
                return (URLUtil.appendToPath(URLUtil.appendToPath(_local4[0], this.generateProtection(_arg1, _local4[1])), _local4[1]));
            };
            return (URLUtil.appendToPath(this.generateProtection(_arg1, _arg2.getPreviousResolvedUrl(this._mainResolver)), _arg2.url));
        }
        private function generateProtection(_arg1:String, _arg2:String):String{
            var _local3:String = this._config.token;
            return (((MD5.hash((((_local3 + "/") + _arg2) + _arg1)) + "/") + _arg1));
        }

Мне бы пример на php. Из примера выше на ActionScript, так и не понял какие входные параметры функции. И как md5 тут работает. Зачем миллион скобок, если получить md5 хэш нужно строки, как я понял, ибо есть символы "/", а не сложения каких-то чисел. Зачем много этих скобок, ведь очередности сложения суммы нет, есть склеивание строки. Ну это все ладно, мне бы примерчик рабочий как свою ссылку генерировать, а дальше надеюсь сам соображу. Заранее спасибо.

106

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

Johny пишет:

Можно совсем как для маленьких по поводу flowplayer-3.2.11.swf. Ситуация:

Имеем видеохостинг namba.kz который использует данный плеер.
Возьмем например плеер со страницы http://namba.kz/#!/video/11098871/
Конфиг для этого видео тут http://video.namba.kz/flashvars-3.2.11. … 11098871_1
Сгенерированная ссылка (просмотр/скачивание) сервисом, полученная с помощью сниффера download.files.namba.net/files/6f963ad8e4cf52a3c48f2dffb943f60e/5829beda/84843771/video.flv

Какой-то хэш/timestamp/уникальный id ролика/ (как мне кажется). Из конфига/ссылки конфига можно получить ID ролика и timestamp или самому сгенерировать. А вот из чего состоит этот хэш? Я смотрел декомпилированный исходник на ActionScript, с моими скудными знаниями так и не сообразил.

private function buildClipUrl(_arg1:String, _arg2:Clip):String{
            var _local3:int;
            var _local4:Array;
            if (!_arg1){
                return (null);
            };
            this.log.debug(("main resolver is " + this._mainResolver));
            if (URLUtil.isCompleteURLWithProtocol(_arg2.getPreviousResolvedUrl(this._mainResolver))){
                _local3 = (_arg2.url.lastIndexOf("/files/") + 6);
                _local4 = [_arg2.url.substring(0, _local3), _arg2.url.substring((_local3 + 1))];
                return (URLUtil.appendToPath(URLUtil.appendToPath(_local4[0], this.generateProtection(_arg1, _local4[1])), _local4[1]));
            };
            return (URLUtil.appendToPath(this.generateProtection(_arg1, _arg2.getPreviousResolvedUrl(this._mainResolver)), _arg2.url));
        }
        private function generateProtection(_arg1:String, _arg2:String):String{
            var _local3:String = this._config.token;
            return (((MD5.hash((((_local3 + "/") + _arg2) + _arg1)) + "/") + _arg1));
        }

Мне бы пример на php. Из примера выше на ActionScript, так и не понял какие входные параметры функции. И как md5 тут работает. Зачем миллион скобок, если получить md5 хэш нужно строки, как я понял, ибо есть символы "/", а не сложения каких-то чисел. Зачем много этих скобок, ведь очередности сложения суммы нет, есть склеивание строки. Ну это все ладно, мне бы примерчик рабочий как свою ссылку генерировать, а дальше надеюсь сам соображу. Заранее спасибо.

пример на php то не проблема, но но там ссылка к ip привязана... через php плохой вариант...

107

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

baat пишет:

пример на php то не проблема, но но там ссылка к ip привязана... через php плохой вариант...

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

108

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

Johny пишет:

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

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

Johny пишет:

Мне бы пример на php. Из примера выше на ActionScript, так и не понял какие входные параметры функции. И как md5 тут работает. Зачем миллион скобок, если получить md5 хэш нужно строки, как я понял, ибо есть символы "/", а не сложения каких-то чисел. Зачем много этих скобок, ведь очередности сложения суммы нет, есть склеивание строки. Ну это все ладно, мне бы примерчик рабочий как свою ссылку генерировать, а дальше надеюсь сам соображу. Заранее спасибо.

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

...
$config='http://video.namba.kz/flashvars-3.2.11.php?i=84843771_84843741__11098871_1';
$file_config = file_get_contents($config);
$timestamp = explode('"',explode('"timestamp":"',$file_config)[1])[0];
$token = explode('"',explode('token":"',$file_config)[1])[0];
...
function buildClipUrl($_arg1, $_arg2) {
     if (isCompleteURLWithProtocol(getPreviousResolvedUrl($_arg2, $_mainResolver))) {
                $_local3 = strrpos($_arg2['url'], "/files/") + 6;
                $_local4[] .= substr($_arg2['url'], 0, $_local3); 
        $_local4[] .= substr($_arg2['url'], $_local3 + 1);
                return (appendToPath(appendToPath($_local4[0], generateProtection($_arg1, $_local4[1])), $_local4[1]));
                                                                                           }
            return (appendToPath(generateProtection($_arg1, getPreviousResolvedUrl($_arg2, $_mainResolver)), $_arg2['url']));
        }


function generateProtection($_arg1, $_arg2) { 
 return (md5(((($token."/").$_arg2).$_arg1))."/").$_arg1;
 }
...

109

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

Большое спасибо WendyH и baat за создание удобного сервиса по дешифровке.
Я столкнулся с проблемой - никак не получается выцепить декодированную ссылку на видео, смотрю и делаю, как показано в примере на гифках, но все ссылки, появляющиеся в окне Network имеют подобный вид:

https://mc.yandex.ru/watch/16850899?page-url=http%3A%2F%2Fwww.tvway.ru%2Findex.php%3Ffile%3D12148&browser-info=s%3A1920x1080x24%3Ask%3A1%3Aadb%3A2%3Af%3A23.0.0%3Afpr%3A41973293901%3Acn%3A1%3Aw%3A1244x974%3Az%3A180%3Ai%3A20161122221023%3Aet%3A1479841824%3Aen%3Awindows-1251%3Av%3A738%3Ac%3A1%3Ala%3Aru%3Aar%3A1%3Anb%3A1%3Acl%3A331%3Als%3A258420478503%3Arqn%3A12%3Arn%3A1062363682%3Ahid%3A596300774%3Ads%3A%2C%2C%2C%2C%2C%2C%2C%2C%2C6383%2C6383%2C3%2C%3Arqnl%3A1%3Ast%3A1479841824%3Au%3A1479841225739708994

Я так понимаю это относится к Яндекс.Метрике, но а почему же тогда не появляется ссылка на видео, когда я включаю плеер?
Пример рассматриваемой страницы:

tvway.ru/index.php?file=12148

110

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

vsefilmi пишет:

Я столкнулся с проблемой - никак не получается выцепить декодированную ссылку на видео, смотрю и делаю, как показано в примере

а кто говорил что будет легко?

vsefilmi пишет:

но все ссылки, появляющиеся в окне Network имеют подобный вид:

https://mc.yandex.ru/watch/16850899?page-url=http%3A%2F%2Fwww.tvway.ru%2Findex.php%3Ffile%3D12148&browser-info=s%3A1920x1080x24%3Ask%3A1%3Aadb%3A2%3Af%3A23.0.0%3Afpr%3A41973293901%3Acn%3A1%3Aw%3A1244x974%3Az%3A180%3Ai%3A20161122221023%3Aet%3A1479841824%3Aen%3Awindows-1251%3Av%3A738%3Ac%3A1%3Ala%3Aru%3Aar%3A1%3Anb%3A1%3Acl%3A331%3Als%3A258420478503%3Arqn%3A12%3Arn%3A1062363682%3Ahid%3A596300774%3Ads%3A%2C%2C%2C%2C%2C%2C%2C%2C%2C6383%2C6383%2C3%2C%3Arqnl%3A1%3Ast%3A1479841824%3Au%3A1479841225739708994

не все, и эти ссылки в видео отношения не имеют...

vsefilmi пишет:

Я так понимаю это относится к Яндекс.Метрике, но а почему же тогда не появляется ссылка на видео, когда я включаю плеер?
Пример рассматриваемой страницы:

tvway.ru/index.php?file=12148

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

вот подсказка...

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

http://rgho.st/7qhlkSXYf/image.png

111 (2016.11.23 01:15:11 отредактировано Johny)

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

baat пишет:
...
$config='http://video.namba.kz/flashvars-3.2.11.php?i=84843771_84843741__11098871_1';
$file_config = file_get_contents($config);
$timestamp = explode('"',explode('"timestamp":"',$file_config)[1])[0];
$token = explode('"',explode('token":"',$file_config)[1])[0];
...
function buildClipUrl($_arg1, $_arg2) {
     if (isCompleteURLWithProtocol(getPreviousResolvedUrl($_arg2, $_mainResolver))) {
                $_local3 = strrpos($_arg2['url'], "/files/") + 6;
                $_local4[] .= substr($_arg2['url'], 0, $_local3); 
        $_local4[] .= substr($_arg2['url'], $_local3 + 1);
                return (appendToPath(appendToPath($_local4[0], generateProtection($_arg1, $_local4[1])), $_local4[1]));
                                                                                           }
            return (appendToPath(generateProtection($_arg1, getPreviousResolvedUrl($_arg2, $_mainResolver)), $_arg2['url']));
        }


function generateProtection($_arg1, $_arg2) { 
 return (md5(((($token."/").$_arg2).$_arg1))."/").$_arg1;
 }
...

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

$json_string = file_get_contents('http://video.namba.kz/flashvars-3.2.11.php?i=84843771_84843741__11098871_1');
$obj=json_decode($json_string);
$token = $obj->token ; // Токен
$_arg1 = $obj->plugins->secure->timestamp; // считают что _arg1 есть timestamp
$_arg2_url = $obj->playlist[1]->url; // считаю что _arg2 есть конфиг, а _arg2['url'] из конфига значение с ключом url
$_local3 = strrpos($_arg2_url, "/files/") + 6;
$_local4[] .= substr($_arg2_url, 0, $_local3); 
$_local4[] .= substr($_arg2_url, $_local3 + 1);
// Дальше распишу почему генерирую ссылку именно так, и почему считаю что _arg1 - timestamp, _arg2['url'] - ключ url из конфига
$ssilka2 = $_local4[0] ."/". (md5(((($token."/").$_local4[1]).$_arg1))."/").$_arg1 . "/" . $_local4[1];
echo $ssilka2; // ашттп://download.files.namba.net/files/59fe2e0c51e34d6f06bb4dd3fbb478f7/5834ba8d/84843771/video.flv

По логике мы имеем token, timestamp. Но не знаем  _arg1 и _arg2. Однако видно, что в манипуляциях с переменными _local3 и _local4 вытекают из _arg2['url']. Значит это возможно массив в котором есть ключ url, в конфиге есть url который кажется используется в генерации ссылки. Получаю url так $obj->playlist[1]->url, остается timestamp который фигурирует в прямых ссылках тоже.
download.files.namba.net/files/6f963ad8e4cf52a3c48f2dffb943f60e/5829beda/84843771/video.flv - вот он 5829beda сидит, после него отрывок из урл _local4[1], Так же _local4[1] передается в функцию генерации ссылки generateProtection($_arg1, $_local4[1]). За _arg1 по идеи сидит - timestamp который еще нигде не использовался, тем более в return (md5(((($token."/").$_arg2).$_arg1))."/").$_arg1; он _arg1 идет уже за функцией md5, то есть просто как текст присоседился результат_md5/$_arg1. По ссылке прямой из примера видно, что после хэша идет timestamp - 5829beda. Из сделанных выводов, я генерирую ссылку, ну там видно $ssilka2, ориентируясь на это return (appendToPath(appendToPath($_local4[0], generateProtection($_arg1, $_local4[1])), $_local4[1])); Только ставлю слэши между _local4[0] результатом генерации хэша  (md5(((($token."/").$_local4[1]).$_arg1))."/").$_arg1 и _local4[1] (что видимо делается в другом месте в appendToPath). В итоге получаю на вид красивую правильную ссылку, как в примере вначале _local4[0] = download.files.namba.net/files потом результат генерации хэша, _local4[1] - уникальный id ролика как я понимаю - 84843771/video.flv и обращение к нему /video.flv. Пример сгенерированной ссылки тем что я наваял: download.files.namba.net/files/59fe2e0c51e34d6f06bb4dd3fbb478f7/5834ba8d/84843771/video.flv но переходя по ней сервис namba выдает файл с айди 59 удален, или в других случаях 500 ошибку (когда еще сгенерирую ссылку). Вот и понимаю, что накосячил где-то, или не те параметры подставил, но где не знаю.

112

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

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

113 (2016.11.23 14:09:26 отредактировано Johny)

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

baat пишет:

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

Я бы не был так категоричен, зашел на сайт, запустил видео, получил ссылку сниффером, кинул ее в тор браузер файл качается. То есть нет привязки ip.

        public static function appendToPath(_arg1:String, _arg2:String):String{
            if (StringUtils.endsWith(_arg1, "/")){
                return ((_arg1 + _arg2));
            };
            return (((_arg1 + "/") + _arg2));
        }

Прикладываю ссылку на исходный код плеера, если кому-то будет интересно и желание помочь, то вот http://dropmefiles.com/Jiran

114

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

Johny пишет:

Я бы не был так категоричен, зашел на сайт, запустил видео, получил ссылку сниффером, кинул ее в тор браузер файл качается. То есть нет привязки ip.

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

115

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

Johny пишет:

если кому-то будет интересно и желание помочь, то вот http://dropmefiles.com/Jiran

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

116

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

добрый день
вроде должно получаться - ан нет
что то недопонял
если не трудно - подскажите
ресурс - http://zerx.co/69980-tri-bogatyrya-i-mo … -2017.html
казалось просто
нашел плеер
получил массивы клиентские
в этом случае :
$a = array("9", "Z", "W", "D", "s", "i", "o", "1", "X", "w", "B", "u", "2", "L", "J", "Q", "b", "d", "v", "6", "c", "l", "U", "4", "I", "=");
$b = array("H", "N", "T", "a", "y", "R", "p", "t", "M", "G", "5", "e", "x", "g", "0", "8", "n", "V", "f", "m", "Y", "k", "z", "3", "7", "j");

далее:

for ($i=0; $i<count($a); $i++) {
$data = str_replace($b[$i], "__"  , $data);
$data = str_replace($a[$i], $b[$i], $data);
$data = str_replace("__"  , $a[$i], $data);
}
ищем на сайте зашифрованный файл-
в этом случае , я так думаю, это находится в - st=http://zerx.co/uppod-video-secs.txt
и... ничего не получается

117

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

foma пишет:

ищем на сайте зашифрованный файл-
в этом случае , я так думаю, это находится в - st=http://zerx.co/uppod-video-secs.txt
и... ничего не получается

Неа, это не та ссылка. Ибо она всегда одинакова для всех видео, если посмотреть.
Для Uppod, как правило, в параметрах передаются ссылки на конкретное видео после file=, а для плейлистов (сериалы) - pl=.
Для приведённого выше примера, интересующая ссылка там такая:

http%3A%2F%2F78.129.186.196%2Fmrdr.php%3Ffileid%3Da88275aa2308a655928064a710aa915e%26key%3D7250ca44014c47c57dd30eaf2d4cb41d

Которая превращается после UrlDecode в:

http://78.129.186.196/mrdr.php?fileid=a88275aa2308a655928064a710aa915e&key=7250ca44014c47c57dd30eaf2d4cb41d

И вроде ничего шифрованного там нет. И такое бывает.

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

118

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

я понял
СПАСИБО

119 (2016.12.26 11:01:55 отредактировано foma)

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

поторопился
прямая ссылка такая
h t t p://109.169.55.79/video/2ce297b467cc0c850cd83abc0fb04e39/a88275aa2308a655928064a710aa915e.mp4
не совсем понял как

120

Re: Если вы на сайте встретили флеш-плеер Uppod и зашифрованные ссылки

foma пишет:

прямая ссылка такая
h t t p://109.169.55.79/video/2ce297b467cc0c850cd83abc0fb04e39/a88275aa2308a655928064a710aa915e.mp4
не совсем понял как

При запросе:
ht tp://78.129.186.196/mrdr.php?fileid=...
Ответ - это редирект на непосредственно файл mp4.
Ответ c результатом 301 и http заголовками:

HTTP/1.1 301 Moved Permanently
Server: nginx/1.10.2
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Location: http://109.169.55.79/video/7250ca44014c47c57dd30eaf2d4cb41d/a88275aa2308a655928064a710aa915e.mp4

Браузер редиректит. Если плеер не умеет, то нужно анализировать ответ и оттуда брать ссылку на файл.

Вообще, есть такие программки, как снифферы, которые показывают запросы и ответы в удобном виде. Например Charles, в которых более наглядно видно, как происходят запросы и ответы.
Хотя и в инструментах разработчика в браузере тоже всё можно посмотреть. Смотрите http заголовки запросов и ответов.

Sony Bravia KDL-32CX523