Тема: Расшифровка ссылок с ustore балансера (ustore.bz, u-cdn.top)
Может кому пригодится.
UstoreDecode для зашифрованных ссылок с балансера ustore.
Пример дешифровки на PHP:
<?php
$link = isset($_GET["url"]) ? $_GET["url"] : ""; if (!$link) die("No url!");
// Для запросов на этот русурс нужны в заголовках Referer и Origin
$referer = isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : $link;
$origin = preg_match('#^(http.*?//[^/]+)#', $link, $m) ? $m[1] : "";
// Притворяемся браузером, передаём куки, подменяем Referer'а
$opts = Array('http'=>Array(
'method'=>"GET",
'header'=>"Referer: $referer\r\n" .
"Origin: $origin\r\n" .
"User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36\r\n"));
// Скачиваем html страницу
$html = file_get_contents($link, false, stream_context_create($opts));
// Получаем значения hash и id
$hash = preg_match('#"hash"\s*:\s*"(.*?)"#s', $html, $m) ? $m[1] : "";
$id = preg_match( '#"id"\s*:\s*"(.*?)"#s', $html, $m) ? $m[1] : "";
// Делаем запрос для получения JSON данных о ссылках или плейлисте
$data = file_get_contents("https://ustore.bz/getContentJson.php?hash=$hash&id=$id", false, stream_context_create($opts));
$json = json_decode($data, TRUE);
if (!isset($json["url"])) die($data);
// Теперь можем перебрать все полученные ссылки на файлы, декодируя их
$decodedArray = array();
foreach($json["url"] as $url) {
$decodedArray[] = str_replace(":hls:manifest.m3u8", "", UstoreDecode($url));
}
// Вставляем массив декодированных ссылок на место
$json["url"] = $decodedArray;
// Выводим JSON со ссылками
header('Content-Type: application/json');
echo json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
exit();
///////////////////////////////////////////////////////////////////////////////
// Раскодирование ссылки с сайта ustore.bz
function UstoreDecode($data) {
if (!$data) return "";
if ($data[0]=="=") {
$data = substr($data, 1, strlen($data)-1);
$s1 = "qsefthzxQSEFTHZX01234";
$s2 = "plijymknPLIJYMKN98765";
for ($i=0; $i < strlen($s1); $i++) {
$data = str_replace($s1[$i], "__", $data);
$data = str_replace($s2[$i], $s1[$i], $data);
$data = str_replace( "__", $s2[$i], $data);
}
$data = urldecode(base64_decode($data));
}
return $data;
}
Тест: http://wonky.lostcut.net/ustore.php?url … 5425e16ffb
Для HMS:
///////////////////////////////////////////////////////////////////////////////
// Получение ссылки с балансера ustore
void GetLink_Ustrore(string sLink) {
string html, data, sVal, sServ, hash, id;
HmsRegExMatch("^(http.*?//[^/]+)", sLink, sServ);
html = HmsDownloadURL(sLink, 'Referer: '+mpFilePath+'\r\nOrigin: '+sServ);
HmsRegExMatch('"hash"\\s*:\\s*"(.*?)"', html, hash);
HmsRegExMatch( '"id"\\s*:\\s*"(.*?)"', html, id );
data = HmsUtf8Decode(HmsDownloadURL("https://ustore.bz/getContentJson.php?hash="+hash+"&id="+id, 'Referer: '+mpFilePath+'\r\nOrigin: '+sServ));
HmsRegExMatch('"url"\\s*:\\s*\\[[^\\]]*"(.*?)"', data, sVal, 1, PCRE_SINGLELINE);
MediaResourceLink = UstoreDecode(sVal);
HmsRegExMatch('^(.*?\\.mp4):hls:manifest.m3u8', MediaResourceLink, MediaResourceLink);
}
///////////////////////////////////////////////////////////////////////////////
// Декодирование ссылок с ресурса ustore.bz (u-cdn.top)
string UstoreDecode(string data) {
if (data=="") return "";
if (data[1]=="=") {
data = Copy(data, 2, Length(data)-1);
string s1 = "qsefthzxQSEFTHZX01234";
string s2 = "plijymknPLIJYMKN98765";
for (int i=1; i <= Length(s1); i++) {
data = ReplaceStr(data, s1[i], "__");
data = ReplaceStr(data, s2[i], s1[i]);
data = ReplaceStr(data, "__", s2[i]);
}
data = HmsHttpDecode(HmsBase64Decode(data));
}
return data;
}