151

Re: moonwalk

все так же висит ошибк Warning: file_get_contents(http://moonwalk.cc/vs)

152 (2018.07.05 00:30:47 отредактировано Spell)

Re: moonwalk

foks5050 пишет:

все так же висит ошибк Warning: file_get_contents(http://moonwalk.cc/vs)

какую регулярку заменил?
правильная вот эта.

$iv = GetRegexValue($data,'#},[a-z]="([^"]+)",#');

у меня работает

Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: foks50501

153

Re: moonwalk

Все заработало! Спасибо огромное!

154 (2018.07.07 10:56:34 отредактировано foks5050)

Re: moonwalk

А не подскажите! Беру сериал, распарсил по сериям и по сезонам. По сериям все идет нормально а вот сезон всегда последний.

Все разобрался! Спасибо spell за помощь!

155

Re: moonwalk

moonwalk опять помер - пишет Not found json data in getVideoManifests function.

156 (2018.07.28 11:54:51 отредактировано Spell)

Re: moonwalk

требуется изменить регулярные выражение в

// Получаем параметры POST запроса из js-скрипта
$data = GetRegexValue($jsData, "#getVideoManifests.*?\{(.*?\}\);)#is");
if (!$data) die("Function getVideoManifests not found in loaded js.");
$JSONParams = GetRegexValue($data, "#t\s*=\s*({.*?})#is");
if (!$JSONParams) die("Not found json data in getVideoManifests function.");

Нужно изменить на

// Получаем параметры POST запроса из js-скрипта
$data = GetRegexValue($jsData, "#getVideoManifests.*?(\{.*?\})#is");
if (!$data) die("Function getVideoManifests not found in loaded js.");
$JSONParams = GetRegexValue($data, "#\D=(\{.*\})#is");
//echo '<pre>'.print_r($JSONParams,1);
if (!$JSONParams) die("Not found json data in getVideoManifests function.");

Дальше идем

//$iv  = GetRegexValue($data, "#\br=['\"](.*?)['\"]#"); // Эту строку закоментировать
$key = GetRegexValue($data, "#\be=['\"](.*?)['\"]#");

меняем значения  или дописываем на эти

$key = GetRegexValue($data, '#\bn="([^"]+)"#');
$iv = 'bab53281266c72142774ec6313521b49'; 
$key ='7316d0c4'.$key;

и обновляем здесь

$crypted = openssl_encrypt($data4Encrypt, 'AES-256-CBC', hex2bin($key), 0, hex2bin($iv));
Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: bond1

157

Re: moonwalk

spell пишет:

требуется изменить регулярные выражение в

Что-то все-равно не хочет...

158

Re: moonwalk

igores пишет:

Что-то все-равно не хочет...

что то неправильно сделали покажите код

159

Re: moonwalk

bond пишет:

что то неправильно сделали покажите код

Вот:

+ открыть спойлер
<?php
ini_set("log_errors", 1); ini_set("error_log", $_SERVER['SCRIPT_FILENAME'].".log"); ini_set('error_reporting', E_ALL); ini_set("display_errors", 1);
$urlBase = "[url]http://moonwalk.cc[/url]";
// Получение ссылки на видео c moonwalk в переданных параметрах, а также тип получаемого потока.
$url     = isset($_REQUEST['url'    ]) ? $_REQUEST['url' ] : ""    ; // moonwalk.cc iframe url
$type    = isset($_REQUEST['type'   ]) ? $_REQUEST['type'] : "m3u8"; // tyle of link (m3u8, mp4)
$urlonly = isset($_REQUEST['urlonly']); // Флаг, сигнализирующий отдавать ссылку на плейлист, а не само его содержимое
$attacha = isset($_REQUEST['at'     ]); // Флаг, сигнализирующий отдавать плейлист как прикреплённый файл с расширением
if (!$url) die("No moonwalk iframe url in the parameters.");
$cookies = array();
$userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36";
// Установка HTTP заголовков
$headers = "Accept-Encoding: gzip, deflate\r\n" .
           "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n" .
           "Referer: " . $url . "\r\n" .
           "User-Agent: $userAgent\r\n";
// Загружаем страницу iframe c moonwalk
$page = LoadPage($url, "GET", $headers);
// Добавляем HTTP заголовки для POST запроса
$headers .= "X-Requested-With: XMLHttpRequest\r\n" .
            "Origin: $urlBase\r\n";
// Поиск дополнительных HTTP заголовков, которые нужно установить
$data = GetRegexValue($page, "#VideoBalancer\((.*?)\);#is");
if (!$data) die("No VideoBalancer info in the loaded iframe.");
$options = JSDecode($data);
// Получение ссылки на js-скрипт, где есть список параметров POST запроса
$jsUrl = GetRegexValue($page, '#src="(.*?)"#');
if (!$jsUrl)  die("Not found js url in the loaded iframe.");
$jsData = LoadPage($urlBase . $jsUrl, "GET", $headers);
// Получаем параметры POST запроса из js-скрипта
$data = GetRegexValue($jsData, "#getVideoManifests.*?(\{.*?\})#is");
if (!$data) die("Function getVideoManifests not found in loaded js.");
$JSONParams = GetRegexValue($data, "#\D=(\{.*\})#is");
//echo '<pre>'.print_r($JSONParams,1);
if (!$JSONParams) die("Not found json data in getVideoManifests function.");
// Приводим к одному виду ссылки на переменные, присвоенные объетку window
// window["7268338cb2fefca17ebbd2be216fd1de"] -> window.7268338cb2fefca17ebbd2be216fd1de
// чтобы отработала правильно функция JSDecode 
$JSONParams = preg_replace_callback("#window\[['\"](.*?)['\"]\]#", function($m) { return "window.".$m[1]; }, $JSONParams);
// Формируем данные для POST
$postData = JSDecode($JSONParams); $data4Encrypt = "{";
// В цикле перебираем все ключи и значения и формируем json строку
// заменяя все переменные на их значения
foreach ($postData as $name => $value) {
  $val = $value;
  if ($val=="navigator.userAgent")    $val = $userAgent;
  else if (strpos($val, "_mw_adb")>0) $val = "false";
  else if (preg_match("#this.options.(\w+)#", $val, $m)) $val = $options[$m[1]];
  else if (preg_match("#window.(\w+)#", $val, $m)) {
    // Если указана переменная со ссылкой на объект window - пытаемся найти значение в загрузенном html
      if (preg_match("#window\[['\"]".$m[1]."['\"]]\s*=\s*['\"](.*?)['\"]#", $page  , $matches)) $val = $matches[1];
      if (preg_match("#window\.".$m[1]."\s*=\s*['\"](.*?)['\"]#"           , $page  , $matches)) $val = $matches[1];
      if (preg_match("#['\"]".$m[1]."['\"]]\s*=\s*['\"](.*?)['\"]#"        , $jsData, $matches)) $val = $matches[1]; // Если нашли в js, то берём оттуда
  }
  if (!is_numeric($val) && $val!="true" && $val!="false") $val = '"'.$val.'"'; // Если значение не число - обрамляем кавычками
  if ($data4Encrypt != "{") $data4Encrypt .= ","; // Если это не первая пара - добавляем запятую
  $data4Encrypt .= '"'.$name.'":'.$val;           // Добавляем пару "имя":значение
}
$data4Encrypt .= "}"; // Закончили формировать json данные для шифрования
#$iv  = GetRegexValue($data, "#\br=['\"](.*?)['\"]#"); // snx 2 spell
$key = GetRegexValue($data, "#\be=['\"](.*?)['\"]#");
$key = GetRegexValue($data, '#\bn="([^"]+)"#');
$iv = 'bab53281266c72142774ec6313521b49'; 
$key ='7316d0c4'.$key;
// Шифруем AES cbc PKCS7 Padding
$crypted = openssl_encrypt($data4Encrypt, 'AES-256-CBC', hex2bin("7316d0c4".$key), 0, hex2bin($iv));
// Делаем POST запрос и получаем список ссылок на потоки
$data = LoadPage($urlBase . "/vs", "POST", $headers, "q=".urlencode($crypted));
if ($type=="json") die($data);
// Делаем из полученных json данных ассоциативный массив PHP
$answerObject = json_decode($data, TRUE);
// Получаем значение ссылки нужного типа потока (по-умолчанию: m3u8)
$link = "";
if (isset($answerObject["mp4" ]) && $type=="mp4") $link = $answerObject["mp4" ];
if (isset($answerObject["m3u8"]) && $link==""   ) $link = $answerObject["m3u8"];
// Если ссылка с таким типом есть, получаем содержимое плейлиста/манифеста
if ($link) {
    if ($urlonly) 
        $data = $link;
    else {
//        if      ($type=="m3u8") header("Content-Type: application/vnd.apple.mpegurl");
//        else if ($type=="f4m" ) header("Content-Type: application/xml");
        $data = LoadPage($link, "GET", $headers);
        if ($attacha) {
            header("Content-Length: ".strlen($data));
            header("Content-Disposition: attachment; filename=play.$type");
        }
    }
} 
// Отдаём полученное
echo $data;
///////////////////////////////////////////////////////////////////////////////
// Получение страницы с указанными методом и заголовками
function LoadPage($url, $method, $headers, $data='') {
    global $cookies;
    // Если есть кукисы - добавляем их значения в HTTP заголовки
    $coo = "";
    foreach($cookies as $key => $val) $coo .= $key."=".urlencode($val)."; ";
    if ($coo) $headers .= "Cookie: $coo\r\n";
    $options = array();
    $options['http'] = array('method' => $method ,
                             'header' => $headers,
                             'content'=> $data   );
    $context = stream_context_create($options);
    $page    = file_get_contents($url, false, $context);
    // Перебираем HTTP заголовки ответа, чтобы установить кукис
    foreach($http_response_header as $c => $h) {
        if (stristr($h, 'content-encoding') and stristr($h, 'gzip')) {
            $page = gzdecode($page);
        } else if (preg_match('#^Set-Cookie:\s*([^;]+)#', $h, $matches)) {
            parse_str($matches[1], $tmp);
            $cookies += $tmp;
        }
    }
    return $page;
}
///////////////////////////////////////////////////////////////////////////////
// Функция получения значения по указанному регулярному выражению
function GetRegexValue($text, $pattern, $group=1) {
    if (preg_match($pattern, $text, $matches))
        return $matches[$group];
    return "";
}
///////////////////////////////////////////////////////////////////////////////
// Функция получения массива из JS кода вместо json_decode
function JSDecode($data) {
  $data = str_replace("encodeURIComponent(", "", $data); // Убираем левые js команды
  $data = str_replace("'),", "',", $data);
  $data = str_replace("'", "\""  , $data); // Заменяем одинарные кавычки на экранированные обычные
  $data = str_replace(["\n","\r"], "", $data);                    // Убираем переносы строк
  $data = preg_replace('/([^\w"\.])(\w+)\s*:/','$1"$2":', $data); // Берём в кавычки имена
  $data = preg_replace('/("\w+")\s*:\s*([\w\.]+)/' ,'$1:"$2"', $data); // Берём в кавычки все значения
  $data = preg_replace('/(,\s*)(})/','$2', $data);                     // Убираем лишние пробелы
  $json = json_decode($data, true);
  return $json;
}

160

Re: moonwalk

igores пишет:

Что-то все-равно не хочет...

Какая ошибка? Что пишет?

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

161 (2018.07.28 11:53:31 отредактировано Spell)

Re: moonwalk

igores пишет:

Вот:

Пробуйте так

+ открыть спойлер
<?php
ini_set("log_errors", 1); ini_set("error_log", $_SERVER['SCRIPT_FILENAME'].".log"); ini_set('error_reporting', E_ALL); ini_set("display_errors", 1);
$urlBase = "[url]http://moonwalk.cc[/url]";
// Получение ссылки на видео c moonwalk в переданных параметрах, а также тип получаемого потока.
$url     = isset($_REQUEST['url'    ]) ? $_REQUEST['url' ] : ""    ; // moonwalk.cc iframe url
$type    = isset($_REQUEST['type'   ]) ? $_REQUEST['type'] : "m3u8"; // tyle of link (m3u8, mp4)
$urlonly = isset($_REQUEST['urlonly']); // Флаг, сигнализирующий отдавать ссылку на плейлист, а не само его содержимое
$attacha = isset($_REQUEST['at'     ]); // Флаг, сигнализирующий отдавать плейлист как прикреплённый файл с расширением
if (!$url) die("No moonwalk iframe url in the parameters.");
$cookies = array();
$userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36";
// Установка HTTP заголовков
$headers = "Accept-Encoding: gzip, deflate\r\n" .
           "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n" .
           "Referer: " . $url . "\r\n" .
           "User-Agent: $userAgent\r\n";
// Загружаем страницу iframe c moonwalk
$page = LoadPage($url, "GET", $headers);
// Добавляем HTTP заголовки для POST запроса
$headers .= "X-Requested-With: XMLHttpRequest\r\n" .
            "Origin: $urlBase\r\n";
// Поиск дополнительных HTTP заголовков, которые нужно установить
$data = GetRegexValue($page, "#VideoBalancer\((.*?)\);#is");
if (!$data) die("No VideoBalancer info in the loaded iframe.");
$options = JSDecode($data);
// Получение ссылки на js-скрипт, где есть список параметров POST запроса
$jsUrl = GetRegexValue($page, '#src="(.*?)"#');
if (!$jsUrl)  die("Not found js url in the loaded iframe.");
$jsData = LoadPage($urlBase . $jsUrl, "GET", $headers);
// Получаем параметры POST запроса из js-скрипта
$data = GetRegexValue($jsData, "#getVideoManifests.*?(\{.*?\})#is");
if (!$data) die("Function getVideoManifests not found in loaded js.");
$JSONParams = GetRegexValue($data, "#\D=(\{.*\})#is");
//echo '<pre>'.print_r($JSONParams,1);
if (!$JSONParams) die("Not found json data in getVideoManifests function.");
// Приводим к одному виду ссылки на переменные, присвоенные объетку window
// window["7268338cb2fefca17ebbd2be216fd1de"] -> window.7268338cb2fefca17ebbd2be216fd1de
// чтобы отработала правильно функция JSDecode 
$JSONParams = preg_replace_callback("#window\[['\"](.*?)['\"]\]#", function($m) { return "window.".$m[1]; }, $JSONParams);
// Формируем данные для POST
$postData = JSDecode($JSONParams); $data4Encrypt = "{";
// В цикле перебираем все ключи и значения и формируем json строку
// заменяя все переменные на их значения
foreach ($postData as $name => $value) {
  $val = $value;
  if ($val=="navigator.userAgent")    $val = $userAgent;
  else if (strpos($val, "_mw_adb")>0) $val = "false";
  else if (preg_match("#this.options.(\w+)#", $val, $m)) $val = $options[$m[1]];
  else if (preg_match("#window.(\w+)#", $val, $m)) {
    // Если указана переменная со ссылкой на объект window - пытаемся найти значение в загрузенном html
      if (preg_match("#window\[['\"]".$m[1]."['\"]]\s*=\s*['\"](.*?)['\"]#", $page  , $matches)) $val = $matches[1];
      if (preg_match("#window\.".$m[1]."\s*=\s*['\"](.*?)['\"]#"           , $page  , $matches)) $val = $matches[1];
      if (preg_match("#['\"]".$m[1]."['\"]]\s*=\s*['\"](.*?)['\"]#"        , $jsData, $matches)) $val = $matches[1]; // Если нашли в js, то берём оттуда
  }
  if (!is_numeric($val) && $val!="true" && $val!="false") $val = '"'.$val.'"'; // Если значение не число - обрамляем кавычками
  if ($data4Encrypt != "{") $data4Encrypt .= ","; // Если это не первая пара - добавляем запятую
  $data4Encrypt .= '"'.$name.'":'.$val;           // Добавляем пару "имя":значение
}
$data4Encrypt .= "}"; // Закончили формировать json данные для шифрования
//$iv  = GetRegexValue($data, "#\br=['\"](.*?)['\"]#"); // snx 2 spell
//$key = GetRegexValue($data, "#\be=['\"](.*?)['\"]#");
$key = GetRegexValue($data, '#\bn="([^"]+)"#');
$iv = 'bab53281266c72142774ec6313521b49'; 
$key ='7316d0c4'.$key;
// Шифруем AES cbc PKCS7 Padding
$crypted = openssl_encrypt($data4Encrypt, 'AES-256-CBC', hex2bin($key), 0, hex2bin($iv));
// Делаем POST запрос и получаем список ссылок на потоки
$data = LoadPage($urlBase . "/vs", "POST", $headers, "q=".urlencode($crypted));
if ($type=="json") die($data);
// Делаем из полученных json данных ассоциативный массив PHP
$answerObject = json_decode($data, TRUE);
// Получаем значение ссылки нужного типа потока (по-умолчанию: m3u8)
$link = "";
if (isset($answerObject["mp4" ]) && $type=="mp4") $link = $answerObject["mp4" ];
if (isset($answerObject["m3u8"]) && $link==""   ) $link = $answerObject["m3u8"];
// Если ссылка с таким типом есть, получаем содержимое плейлиста/манифеста
if ($link) {
    if ($urlonly) 
        $data = $link;
    else {
//        if      ($type=="m3u8") header("Content-Type: application/vnd.apple.mpegurl");
//        else if ($type=="f4m" ) header("Content-Type: application/xml");
        $data = LoadPage($link, "GET", $headers);
        if ($attacha) {
            header("Content-Length: ".strlen($data));
            header("Content-Disposition: attachment; filename=play.$type");
        }
    }
} 
// Отдаём полученное
echo $data;
///////////////////////////////////////////////////////////////////////////////
// Получение страницы с указанными методом и заголовками
function LoadPage($url, $method, $headers, $data='') {
    global $cookies;
    // Если есть кукисы - добавляем их значения в HTTP заголовки
    $coo = "";
    foreach($cookies as $key => $val) $coo .= $key."=".urlencode($val)."; ";
    if ($coo) $headers .= "Cookie: $coo\r\n";
    $options = array();
    $options['http'] = array('method' => $method ,
                             'header' => $headers,
                             'content'=> $data   );
    $context = stream_context_create($options);
    $page    = file_get_contents($url, false, $context);
    // Перебираем HTTP заголовки ответа, чтобы установить кукис
    foreach($http_response_header as $c => $h) {
        if (stristr($h, 'content-encoding') and stristr($h, 'gzip')) {
            $page = gzdecode($page);
        } else if (preg_match('#^Set-Cookie:\s*([^;]+)#', $h, $matches)) {
            parse_str($matches[1], $tmp);
            $cookies += $tmp;
        }
    }
    return $page;
}
///////////////////////////////////////////////////////////////////////////////
// Функция получения значения по указанному регулярному выражению
function GetRegexValue($text, $pattern, $group=1) {
    if (preg_match($pattern, $text, $matches))
        return $matches[$group];
    return "";
}
///////////////////////////////////////////////////////////////////////////////
// Функция получения массива из JS кода вместо json_decode
function JSDecode($data) {
  $data = str_replace("encodeURIComponent(", "", $data); // Убираем левые js команды
  $data = str_replace("'),", "',", $data);
  $data = str_replace("'", "\""  , $data); // Заменяем одинарные кавычки на экранированные обычные
  $data = str_replace(["\n","\r"], "", $data);                    // Убираем переносы строк
  $data = preg_replace('/([^\w"\.])(\w+)\s*:/','$1"$2":', $data); // Берём в кавычки имена
  $data = preg_replace('/("\w+")\s*:\s*([\w\.]+)/' ,'$1:"$2"', $data); // Берём в кавычки все значения
  $data = preg_replace('/(,\s*)(})/','$2', $data);                     // Убираем лишние пробелы
  $json = json_decode($data, true);
  return $json;
}
Отладка кода — это как охота. Только охота, на баги.

162

Re: moonwalk

spell пишет:

Какая ошибка? Что пишет?

Это. Сайты на компе работают.

Warning: file_get_contents(http://moonwalk.cc/vs): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in ....... on line 105

163

Re: moonwalk

spell пишет:

Пробуйте так

+ открыть спойлер
<?php
ini_set("log_errors", 1); ini_set("error_log", $_SERVER['SCRIPT_FILENAME'].".log"); ini_set('error_reporting', E_ALL); ini_set("display_errors", 1);
$urlBase = "[url]http://moonwalk.cc[/url]";
// Получение ссылки на видео c moonwalk в переданных параметрах, а также тип получаемого потока.
$url     = isset($_REQUEST['url'    ]) ? $_REQUEST['url' ] : ""    ; // moonwalk.cc iframe url
$type    = isset($_REQUEST['type'   ]) ? $_REQUEST['type'] : "m3u8"; // tyle of link (m3u8, mp4)
$urlonly = isset($_REQUEST['urlonly']); // Флаг, сигнализирующий отдавать ссылку на плейлист, а не само его содержимое
$attacha = isset($_REQUEST['at'     ]); // Флаг, сигнализирующий отдавать плейлист как прикреплённый файл с расширением
if (!$url) die("No moonwalk iframe url in the parameters.");
$cookies = array();
$userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36";
// Установка HTTP заголовков
$headers = "Accept-Encoding: gzip, deflate\r\n" .
           "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n" .
           "Referer: " . $url . "\r\n" .
           "User-Agent: $userAgent\r\n";
// Загружаем страницу iframe c moonwalk
$page = LoadPage($url, "GET", $headers);
// Добавляем HTTP заголовки для POST запроса
$headers .= "X-Requested-With: XMLHttpRequest\r\n" .
            "Origin: $urlBase\r\n";
// Поиск дополнительных HTTP заголовков, которые нужно установить
$data = GetRegexValue($page, "#VideoBalancer\((.*?)\);#is");
if (!$data) die("No VideoBalancer info in the loaded iframe.");
$options = JSDecode($data);
// Получение ссылки на js-скрипт, где есть список параметров POST запроса
$jsUrl = GetRegexValue($page, '#src="(.*?)"#');
if (!$jsUrl)  die("Not found js url in the loaded iframe.");
$jsData = LoadPage($urlBase . $jsUrl, "GET", $headers);
// Получаем параметры POST запроса из js-скрипта
$data = GetRegexValue($jsData, "#getVideoManifests.*?(\{.*?\})#is");
if (!$data) die("Function getVideoManifests not found in loaded js.");
$JSONParams = GetRegexValue($data, "#\D=(\{.*\})#is");
//echo '<pre>'.print_r($JSONParams,1);
if (!$JSONParams) die("Not found json data in getVideoManifests function.");
// Приводим к одному виду ссылки на переменные, присвоенные объетку window
// window["7268338cb2fefca17ebbd2be216fd1de"] -> window.7268338cb2fefca17ebbd2be216fd1de
// чтобы отработала правильно функция JSDecode 
$JSONParams = preg_replace_callback("#window\[['\"](.*?)['\"]\]#", function($m) { return "window.".$m[1]; }, $JSONParams);
// Формируем данные для POST
$postData = JSDecode($JSONParams); $data4Encrypt = "{";
// В цикле перебираем все ключи и значения и формируем json строку
// заменяя все переменные на их значения
foreach ($postData as $name => $value) {
  $val = $value;
  if ($val=="navigator.userAgent")    $val = $userAgent;
  else if (strpos($val, "_mw_adb")>0) $val = "false";
  else if (preg_match("#this.options.(\w+)#", $val, $m)) $val = $options[$m[1]];
  else if (preg_match("#window.(\w+)#", $val, $m)) {
    // Если указана переменная со ссылкой на объект window - пытаемся найти значение в загрузенном html
      if (preg_match("#window\[['\"]".$m[1]."['\"]]\s*=\s*['\"](.*?)['\"]#", $page  , $matches)) $val = $matches[1];
      if (preg_match("#window\.".$m[1]."\s*=\s*['\"](.*?)['\"]#"           , $page  , $matches)) $val = $matches[1];
      if (preg_match("#['\"]".$m[1]."['\"]]\s*=\s*['\"](.*?)['\"]#"        , $jsData, $matches)) $val = $matches[1]; // Если нашли в js, то берём оттуда
  }
  if (!is_numeric($val) && $val!="true" && $val!="false") $val = '"'.$val.'"'; // Если значение не число - обрамляем кавычками
  if ($data4Encrypt != "{") $data4Encrypt .= ","; // Если это не первая пара - добавляем запятую
  $data4Encrypt .= '"'.$name.'":'.$val;           // Добавляем пару "имя":значение
}
$data4Encrypt .= "}"; // Закончили формировать json данные для шифрования
//$iv  = GetRegexValue($data, "#\br=['\"](.*?)['\"]#"); // snx 2 spell
//$key = GetRegexValue($data, "#\be=['\"](.*?)['\"]#");
$key = GetRegexValue($data, '#\bn="([^"]+)"#');
$iv = 'bab53281266c72142774ec6313521b49'; 
$key ='7316d0c4'.$key;
// Шифруем AES cbc PKCS7 Padding
$crypted = openssl_encrypt($data4Encrypt, 'AES-256-CBC', hex2bin($key), 0, hex2bin($iv));
// Делаем POST запрос и получаем список ссылок на потоки
$data = LoadPage($urlBase . "/vs", "POST", $headers, "q=".urlencode($crypted));
if ($type=="json") die($data);
// Делаем из полученных json данных ассоциативный массив PHP
$answerObject = json_decode($data, TRUE);
// Получаем значение ссылки нужного типа потока (по-умолчанию: m3u8)
$link = "";
if (isset($answerObject["mp4" ]) && $type=="mp4") $link = $answerObject["mp4" ];
if (isset($answerObject["m3u8"]) && $link==""   ) $link = $answerObject["m3u8"];
// Если ссылка с таким типом есть, получаем содержимое плейлиста/манифеста
if ($link) {
    if ($urlonly) 
        $data = $link;
    else {
//        if      ($type=="m3u8") header("Content-Type: application/vnd.apple.mpegurl");
//        else if ($type=="f4m" ) header("Content-Type: application/xml");
        $data = LoadPage($link, "GET", $headers);
        if ($attacha) {
            header("Content-Length: ".strlen($data));
            header("Content-Disposition: attachment; filename=play.$type");
        }
    }
} 
// Отдаём полученное
echo $data;
///////////////////////////////////////////////////////////////////////////////
// Получение страницы с указанными методом и заголовками
function LoadPage($url, $method, $headers, $data='') {
    global $cookies;
    // Если есть кукисы - добавляем их значения в HTTP заголовки
    $coo = "";
    foreach($cookies as $key => $val) $coo .= $key."=".urlencode($val)."; ";
    if ($coo) $headers .= "Cookie: $coo\r\n";
    $options = array();
    $options['http'] = array('method' => $method ,
                             'header' => $headers,
                             'content'=> $data   );
    $context = stream_context_create($options);
    $page    = file_get_contents($url, false, $context);
    // Перебираем HTTP заголовки ответа, чтобы установить кукис
    foreach($http_response_header as $c => $h) {
        if (stristr($h, 'content-encoding') and stristr($h, 'gzip')) {
            $page = gzdecode($page);
        } else if (preg_match('#^Set-Cookie:\s*([^;]+)#', $h, $matches)) {
            parse_str($matches[1], $tmp);
            $cookies += $tmp;
        }
    }
    return $page;
}
///////////////////////////////////////////////////////////////////////////////
// Функция получения значения по указанному регулярному выражению
function GetRegexValue($text, $pattern, $group=1) {
    if (preg_match($pattern, $text, $matches))
        return $matches[$group];
    return "";
}
///////////////////////////////////////////////////////////////////////////////
// Функция получения массива из JS кода вместо json_decode
function JSDecode($data) {
  $data = str_replace("encodeURIComponent(", "", $data); // Убираем левые js команды
  $data = str_replace("'),", "',", $data);
  $data = str_replace("'", "\""  , $data); // Заменяем одинарные кавычки на экранированные обычные
  $data = str_replace(["\n","\r"], "", $data);                    // Убираем переносы строк
  $data = preg_replace('/([^\w"\.])(\w+)\s*:/','$1"$2":', $data); // Берём в кавычки имена
  $data = preg_replace('/("\w+")\s*:\s*([\w\.]+)/' ,'$1:"$2"', $data); // Берём в кавычки все значения
  $data = preg_replace('/(,\s*)(})/','$2', $data);                     // Убираем лишние пробелы
  $json = json_decode($data, true);
  return $json;
}

Попробовал.
Правда строку

$urlBase = "[url]http://moonwalk.cc[/url]";

поправил.
Ошибка та же.

164

Re: moonwalk

igores пишет:

Это. Сайты на компе работают.

Warning: file_get_contents(http://moonwalk.cc/vs): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in ....... on line 105

ошибка возникала

//$key = GetRegexValue($data, "#\be=['\"](.*?)['\"]#");

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

$crypted = openssl_encrypt($data4Encrypt, 'AES-256-CBC', hex2bin("7316d0c4".$key), 0, hex2bin($iv));

а надо  вот так

$crypted = openssl_encrypt($data4Encrypt, 'AES-256-CBC', hex2bin($key), 0, hex2bin($iv));
Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: igores1

165 (2018.07.28 12:05:42 отредактировано Spell)

Re: moonwalk

igores пишет:

Попробовал.
Правда строку

$urlBase = "http://moonwalk.cc";

поправил.
Ошибка та же.

скопируйте код еще раз там повтор в значении был при шифровании
Только увидел

+ открыть спойлер
<?php
ini_set("log_errors", 1); ini_set("error_log", $_SERVER['SCRIPT_FILENAME'].".log"); ini_set('error_reporting', E_ALL); ini_set("display_errors", 1);
$urlBase = "http://moonwalk.cc";
// Получение ссылки на видео c moonwalk в переданных параметрах, а также тип получаемого потока.
$url     = isset($_REQUEST['url'    ]) ? $_REQUEST['url' ] : ""    ; // moonwalk.cc iframe url
$type    = isset($_REQUEST['type'   ]) ? $_REQUEST['type'] : "m3u8"; // tyle of link (m3u8, mp4)
$urlonly = isset($_REQUEST['urlonly']); // Флаг, сигнализирующий отдавать ссылку на плейлист, а не само его содержимое
$attacha = isset($_REQUEST['at'     ]); // Флаг, сигнализирующий отдавать плейлист как прикреплённый файл с расширением
if (!$url) die("No moonwalk iframe url in the parameters.");
$cookies = array();
$userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36";
// Установка HTTP заголовков
$headers = "Accept-Encoding: gzip, deflate\r\n" .
           "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n" .
           "Referer: " . $url . "\r\n" .
           "User-Agent: $userAgent\r\n";
// Загружаем страницу iframe c moonwalk
$page = LoadPage($url, "GET", $headers);
// Добавляем HTTP заголовки для POST запроса
$headers .= "X-Requested-With: XMLHttpRequest\r\n" .
            "Origin: $urlBase\r\n";
// Поиск дополнительных HTTP заголовков, которые нужно установить
$data = GetRegexValue($page, "#VideoBalancer\((.*?)\);#is");
if (!$data) die("No VideoBalancer info in the loaded iframe.");
$options = JSDecode($data);
// Получение ссылки на js-скрипт, где есть список параметров POST запроса
$jsUrl = GetRegexValue($page, '#src="(.*?)"#');
if (!$jsUrl)  die("Not found js url in the loaded iframe.");
$jsData = LoadPage($urlBase . $jsUrl, "GET", $headers);
// Получаем параметры POST запроса из js-скрипта
$data = GetRegexValue($jsData, "#getVideoManifests.*?(\{.*?\})#is");
if (!$data) die("Function getVideoManifests not found in loaded js.");
$JSONParams = GetRegexValue($data, "#\D=(\{.*\})#is");
//echo '<pre>'.print_r($JSONParams,1);
if (!$JSONParams) die("Not found json data in getVideoManifests function.");
// Приводим к одному виду ссылки на переменные, присвоенные объетку window
// window["7268338cb2fefca17ebbd2be216fd1de"] -> window.7268338cb2fefca17ebbd2be216fd1de
// чтобы отработала правильно функция JSDecode 
$JSONParams = preg_replace_callback("#window\[['\"](.*?)['\"]\]#", function($m) { return "window.".$m[1]; }, $JSONParams);
// Формируем данные для POST
$postData = JSDecode($JSONParams); $data4Encrypt = "{";
// В цикле перебираем все ключи и значения и формируем json строку
// заменяя все переменные на их значения
foreach ($postData as $name => $value) {
  $val = $value;
  if ($val=="navigator.userAgent")    $val = $userAgent;
  else if (strpos($val, "_mw_adb")>0) $val = "false";
  else if (preg_match("#this.options.(\w+)#", $val, $m)) $val = $options[$m[1]];
  else if (preg_match("#window.(\w+)#", $val, $m)) {
    // Если указана переменная со ссылкой на объект window - пытаемся найти значение в загрузенном html
      if (preg_match("#window\[['\"]".$m[1]."['\"]]\s*=\s*['\"](.*?)['\"]#", $page  , $matches)) $val = $matches[1];
      if (preg_match("#window\.".$m[1]."\s*=\s*['\"](.*?)['\"]#"           , $page  , $matches)) $val = $matches[1];
      if (preg_match("#['\"]".$m[1]."['\"]]\s*=\s*['\"](.*?)['\"]#"        , $jsData, $matches)) $val = $matches[1]; // Если нашли в js, то берём оттуда
  }
  if (!is_numeric($val) && $val!="true" && $val!="false") $val = '"'.$val.'"'; // Если значение не число - обрамляем кавычками
  if ($data4Encrypt != "{") $data4Encrypt .= ","; // Если это не первая пара - добавляем запятую
  $data4Encrypt .= '"'.$name.'":'.$val;           // Добавляем пару "имя":значение
}
$data4Encrypt .= "}"; // Закончили формировать json данные для шифрования
//$iv  = GetRegexValue($data, "#\br=['\"](.*?)['\"]#"); // snx 2 spell
//$key = GetRegexValue($data, "#\be=['\"](.*?)['\"]#");
$key = GetRegexValue($data, '#\bn="([^"]+)"#');
$iv = 'bab53281266c72142774ec6313521b49'; 
$key ='7316d0c4'.$key;
// Шифруем AES cbc PKCS7 Padding
$crypted = openssl_encrypt($data4Encrypt, 'AES-256-CBC', hex2bin($key), 0, hex2bin($iv));
// Делаем POST запрос и получаем список ссылок на потоки
$data = LoadPage($urlBase . "/vs", "POST", $headers, "q=".urlencode($crypted));
if ($type=="json") die($data);
// Делаем из полученных json данных ассоциативный массив PHP
$answerObject = json_decode($data, TRUE);
// Получаем значение ссылки нужного типа потока (по-умолчанию: m3u8)
$link = "";
if (isset($answerObject["mp4" ]) && $type=="mp4") $link = $answerObject["mp4" ];
if (isset($answerObject["m3u8"]) && $link==""   ) $link = $answerObject["m3u8"];
// Если ссылка с таким типом есть, получаем содержимое плейлиста/манифеста
if ($link) {
    if ($urlonly) 
        $data = $link;
    else {
//        if      ($type=="m3u8") header("Content-Type: application/vnd.apple.mpegurl");
//        else if ($type=="f4m" ) header("Content-Type: application/xml");
        $data = LoadPage($link, "GET", $headers);
        if ($attacha) {
            header("Content-Length: ".strlen($data));
            header("Content-Disposition: attachment; filename=play.$type");
        }
    }
} 
// Отдаём полученное
echo $data;
///////////////////////////////////////////////////////////////////////////////
// Получение страницы с указанными методом и заголовками
function LoadPage($url, $method, $headers, $data='') {
    global $cookies;
    // Если есть кукисы - добавляем их значения в HTTP заголовки
    $coo = "";
    foreach($cookies as $key => $val) $coo .= $key."=".urlencode($val)."; ";
    if ($coo) $headers .= "Cookie: $coo\r\n";
    $options = array();
    $options['http'] = array('method' => $method ,
                             'header' => $headers,
                             'content'=> $data   );
    $context = stream_context_create($options);
    $page    = file_get_contents($url, false, $context);
    // Перебираем HTTP заголовки ответа, чтобы установить кукис
    foreach($http_response_header as $c => $h) {
        if (stristr($h, 'content-encoding') and stristr($h, 'gzip')) {
            $page = gzdecode($page);
        } else if (preg_match('#^Set-Cookie:\s*([^;]+)#', $h, $matches)) {
            parse_str($matches[1], $tmp);
            $cookies += $tmp;
        }
    }
    return $page;
}
///////////////////////////////////////////////////////////////////////////////
// Функция получения значения по указанному регулярному выражению
function GetRegexValue($text, $pattern, $group=1) {
    if (preg_match($pattern, $text, $matches))
        return $matches[$group];
    return "";
}
///////////////////////////////////////////////////////////////////////////////
// Функция получения массива из JS кода вместо json_decode
function JSDecode($data) {
  $data = str_replace("encodeURIComponent(", "", $data); // Убираем левые js команды
  $data = str_replace("'),", "',", $data);
  $data = str_replace("'", "\""  , $data); // Заменяем одинарные кавычки на экранированные обычные
  $data = str_replace(["\n","\r"], "", $data);                    // Убираем переносы строк
  $data = preg_replace('/([^\w"\.])(\w+)\s*:/','$1"$2":', $data); // Берём в кавычки имена
  $data = preg_replace('/("\w+")\s*:\s*([\w\.]+)/' ,'$1:"$2"', $data); // Берём в кавычки все значения
  $data = preg_replace('/(,\s*)(})/','$2', $data);                     // Убираем лишние пробелы
  $json = json_decode($data, true);
  return $json;
}
Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: igores, smsbox3, vitnet3

166

Re: moonwalk

spell пишет:

скопируйте код еще раз там повтор в значении был при шифровании

Спасибо Вам!!!
Заработало!!
Удачи!!

167

Re: moonwalk

опять сломалось :(

168

Re: moonwalk

smsbox3 пишет:

опять сломалось :(

Вроде починил, или как?  :-X

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

169

Re: moonwalk

Вот решение,не знаю как долго проработает!

+ открыть спойлер
<?php
ini_set("log_errors", 1); ini_set("error_log", $_SERVER['SCRIPT_FILENAME'].".log"); ini_set('error_reporting', E_ALL); ini_set("display_errors", 1);
$urlBase = "http://moonwalk.cc";
// Получение ссылки на видео c moonwalk в переданных параметрах, а также тип получаемого потока.
$url     = isset($_REQUEST['url'    ]) ? $_REQUEST['url' ] : ""    ; // moonwalk.cc iframe url
$type    = isset($_REQUEST['type'   ]) ? $_REQUEST['type'] : "m3u8"; // tyle of link (m3u8, mp4)
$urlonly = isset($_REQUEST['urlonly']); // Флаг, сигнализирующий отдавать ссылку на плейлист, а не само его содержимое
$attacha = isset($_REQUEST['at'     ]); // Флаг, сигнализирующий отдавать плейлист как прикреплённый файл с расширением
if (!$url) die("No moonwalk iframe url in the parameters.");
$cookies = array();
$userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36";
// Установка HTTP заголовков
$headers = "Accept-Encoding: gzip, deflate\r\n" .
           "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n" .
           "Referer: " . $url . "\r\n" .
           "User-Agent: $userAgent\r\n";
// Загружаем страницу iframe c moonwalk
$page = LoadPage($url, "GET", $headers);
// Добавляем HTTP заголовки для POST запроса
$headers .= "X-Requested-With: XMLHttpRequest\r\n" .
            "Origin: $urlBase\r\n";
// Поиск дополнительных HTTP заголовков, которые нужно установить
$data = GetRegexValue($page, "#VideoBalancer\((.*?)\);#is");
if (!$data) die("No VideoBalancer info in the loaded iframe.");
$options = JSDecode($data);
// Получение ссылки на js-скрипт, где есть список параметров POST запроса
$jsUrl = GetRegexValue($page, '#src="(.*?)"#');
if (!$jsUrl)  die("Not found js url in the loaded iframe.");
$jsData = LoadPage($urlBase . $jsUrl, "GET", $headers);
// Получаем параметры POST запроса из js-скрипта
$data = GetRegexValue($jsData, "#getVideoManifests.*?(\{.*?\})#is");
if (!$data) die("Function getVideoManifests not found in loaded js.");
$JSONParams = GetRegexValue($data, "#\D=(\{.*\})#is");
//echo '<pre>'.print_r($JSONParams,1);
if (!$JSONParams) die("Not found json data in getVideoManifests function.");
// Приводим к одному виду ссылки на переменные, присвоенные объетку window
// window["7268338cb2fefca17ebbd2be216fd1de"] -> window.7268338cb2fefca17ebbd2be216fd1de
// чтобы отработала правильно функция JSDecode 
$JSONParams = preg_replace_callback("#window\[['\"](.*?)['\"]\]#", function($m) { return "window.".$m[1]; }, $JSONParams);
// Формируем данные для POST
$postData = JSDecode($JSONParams); $data4Encrypt = "{";
// В цикле перебираем все ключи и значения и формируем json строку
// заменяя все переменные на их значения
foreach ($postData as $name => $value) {
  $val = $value;
  if ($val=="navigator.userAgent")    $val = $userAgent;
  else if (strpos($val, "_mw_adb")>0) $val = "false";
  else if (preg_match("#this.options.(\w+)#", $val, $m)) $val = $options[$m[1]];
  else if (preg_match("#window.(\w+)#", $val, $m)) {
    // Если указана переменная со ссылкой на объект window - пытаемся найти значение в загрузенном html
      if (preg_match("#window\[['\"]".$m[1]."['\"]]\s*=\s*['\"](.*?)['\"]#", $page  , $matches)) $val = $matches[1];
      if (preg_match("#window\.".$m[1]."\s*=\s*['\"](.*?)['\"]#"           , $page  , $matches)) $val = $matches[1];
      if (preg_match("#['\"]".$m[1]."['\"]]\s*=\s*['\"](.*?)['\"]#"        , $jsData, $matches)) $val = $matches[1]; // Если нашли в js, то берём оттуда
  }
  if (!is_numeric($val) && $val!="true" && $val!="false") $val = '"'.$val.'"'; // Если значение не число - обрамляем кавычками
  if ($data4Encrypt != "{") $data4Encrypt .= ","; // Если это не первая пара - добавляем запятую
  $data4Encrypt .= '"'.$name.'":'.$val;           // Добавляем пару "имя":значение
}
$data4Encrypt .= "}"; // Закончили формировать json данные для шифрования
$iv = GetRegexValue($jsData, '#\bo="([^"]+)",#');
$keys  = GetRegexValue($jsData,'#\br=\["(.+)"\];#');
preg_match('#"([^"]+){16}"#',$keys,$num_keys);
$num_keys[0] = str_replace('"','',$num_keys[0]);
$key = base64_decode($num_keys[0]);
// Шифруем AES cbc PKCS7 Padding
$crypted = openssl_encrypt($data4Encrypt, 'AES-256-CBC', hex2bin($key), 0, hex2bin($iv));
// Делаем POST запрос и получаем список ссылок на потоки
$data = LoadPage($urlBase . "/vs", "POST", $headers, "q=".urlencode($crypted));
if ($type=="json") die($data);
// Делаем из полученных json данных ассоциативный массив PHP
$answerObject = json_decode($data, TRUE);
// Получаем значение ссылки нужного типа потока (по-умолчанию: m3u8)
$link = "";
if (isset($answerObject["mp4" ]) && $type=="mp4") $link = $answerObject["mp4" ];
if (isset($answerObject["m3u8"]) && $link==""   ) $link = $answerObject["m3u8"];
// Если ссылка с таким типом есть, получаем содержимое плейлиста/манифеста
if ($link) {
    if ($urlonly) 
        $data = $link;
    else {
//        if      ($type=="m3u8") header("Content-Type: application/vnd.apple.mpegurl");
//        else if ($type=="f4m" ) header("Content-Type: application/xml");
        $data = LoadPage($link, "GET", $headers);
        if ($attacha) {
            header("Content-Length: ".strlen($data));
            header("Content-Disposition: attachment; filename=play.$type");
        }
    }
} 
// Отдаём полученное
echo $data;
///////////////////////////////////////////////////////////////////////////////
// Получение страницы с указанными методом и заголовками
function LoadPage($url, $method, $headers, $data='') {
    global $cookies;
    // Если есть кукисы - добавляем их значения в HTTP заголовки
    $coo = "";
    foreach($cookies as $key => $val) $coo .= $key."=".urlencode($val)."; ";
    if ($coo) $headers .= "Cookie: $coo\r\n";
    $options = array();
    $options['http'] = array('method' => $method ,
                             'header' => $headers,
                             'content'=> $data   );
    $context = stream_context_create($options);
    $page    = file_get_contents($url, false, $context);
    // Перебираем HTTP заголовки ответа, чтобы установить кукис
    foreach($http_response_header as $c => $h) {
        if (stristr($h, 'content-encoding') and stristr($h, 'gzip')) {
            $page = gzdecode($page);
        } else if (preg_match('#^Set-Cookie:\s*([^;]+)#', $h, $matches)) {
            parse_str($matches[1], $tmp);
            $cookies += $tmp;
        }
    }
    return $page;
}
///////////////////////////////////////////////////////////////////////////////
// Функция получения значения по указанному регулярному выражению
function GetRegexValue($text, $pattern, $group=1) {
    if (preg_match($pattern, $text, $matches))
        return $matches[$group];
    return "";
}
///////////////////////////////////////////////////////////////////////////////
// Функция получения массива из JS кода вместо json_decode
function JSDecode($data) {
  $data = str_replace("encodeURIComponent(", "", $data); // Убираем левые js команды
  $data = str_replace("'),", "',", $data);
  $data = str_replace("'", "\""  , $data); // Заменяем одинарные кавычки на экранированные обычные
  $data = str_replace(["\n","\r"], "", $data);                    // Убираем переносы строк
  $data = preg_replace('/([^\w"\.])(\w+)\s*:/','$1"$2":', $data); // Берём в кавычки имена
  $data = preg_replace('/("\w+")\s*:\s*([\w\.]+)/' ,'$1:"$2"', $data); // Берём в кавычки все значения
  $data = preg_replace('/(,\s*)(})/','$2', $data);                     // Убираем лишние пробелы
  $json = json_decode($data, true);
  return $json;
}
Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: vitnet, igores, KoBa43

170

Re: moonwalk

У кого работает?

Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: smsbox3, foks50502

171

Re: moonwalk

spell пишет:

У кого работает?

Заработало.
Спасибо!

172

Re: moonwalk

Скрипт снова перестал работать.

173

Re: moonwalk

Вместо

$iv = GetRegexValue($jsData, '#\bo="([^"]+)",#');
$keys  = GetRegexValue($jsData,'#\br=\["(.+)"\];#');
preg_match('#"([^"]+){16}"#',$keys,$num_keys);
$num_keys[0] = str_replace('"','',$num_keys[0]);
$key = base64_decode($num_keys[0]);

Попробуйте

$iv = GetRegexValue($jsData, '#\bi="([^"]+)",.{2}JSON#');
$e = GetRegexValue($jsData, '#\br=e."([^"]+)".,#');
$e = GetRegexValue($jsData,'#\be\["'.$e.'"\]=([a-z0-9\.+]{1,});#');

$sums = explode('+', $e); 

$key = '';

foreach($sums as $value){
    $find = substr($value,2);
    $key .= GetRegexValue($jsData,'#\be\.'.$find.'="([a-z0-9\.+]{1,})"#');
}

Если что - не пинайте за стиль кода и регулярных выражений...

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

174 (2018.08.01 19:10:57 отредактировано Spell)

Re: moonwalk

Вместо

$iv = GetRegexValue($jsData, '#\bo="([^"]+)",#');
$keys  = GetRegexValue($jsData,'#\br=\["(.+)"\];#');
preg_match('#"([^"]+){16}"#',$keys,$num_keys);
$num_keys[0] = str_replace('"','',$num_keys[0]);
$key = base64_decode($num_keys[0]);

все просто

+ открыть спойлер
$iv = GetRegexValue($jsData, '#,i="([^"]+)",#');
preg_match_all('#\be\.[a-z0-9]{9}+="([^"]+)",#',$jsData,$keys);
$key =  implode('',$keys[1]);
Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: GSHK, n326mo, vitnet3

175

Re: moonwalk

spell пишет:

Вместо

$iv = GetRegexValue($jsData, '#\bo="([^"]+)",#');
$keys  = GetRegexValue($jsData,'#\br=\["(.+)"\];#');
preg_match('#"([^"]+){16}"#',$keys,$num_keys);
$num_keys[0] = str_replace('"','',$num_keys[0]);
$key = base64_decode($num_keys[0]);

все просто

+ открыть спойлер
$iv = GetRegexValue($jsData, '#,i="([^"]+)",#');
preg_match_all('#\be\.[a-z0-9]{9}+="([^"]+)",#',$jsData,$keys);
$key =  implode('',$keys[1]);

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

176 (2018.08.01 19:27:17 отредактировано Spell)

Re: moonwalk

GSHK пишет:

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

В данном случае нет, и если возникнет потребность переписать не проблема в $keys[1] у меня массив и переустанавливай как хочешь

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

177

Re: moonwalk

заменили название переменной,
замените

$iv = GetRegexValue($jsData, '#,i="([^"]+)",#i');

на

$iv = GetRegexValue($jsData, '#,\br="([^"]+)",#i');
Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: vitnet, foks50502

178

Re: moonwalk

У меня опять помер мунвалк

Warning: file_get_contents(http://moonwalk.cc/vs): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden  on line 113

179 (2018.08.11 14:40:47 отредактировано Spell)

Re: moonwalk

smsbox3 пишет:

У меня опять помер мунвалк

Warning: file_get_contents(http://moonwalk.cc/vs): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden  on line 113

Заработал

Отладка кода — это как охота. Только охота, на баги.
Спасибо сказали: smsbox31

180

Re: moonwalk

тоже не работает