找回密码
 注册需人工审核(节假日除外)
搜索
查看: 210|回复: 4

虎牙PHP源码,貌似已失效,待修复

[复制链接]

签到天数: 54 天

[LV.5]略有小成

发表于 前天 10:42 | 显示全部楼层 |阅读模式
  1. <?php
  2. date_default_timezone_set("Asia/Shanghai");
  3. $type = empty($_GET['type']) ? "nodisplay" : trim($_GET['type']);
  4. $id = empty($_GET['id']) ? "11342412" : trim($_GET['id']);
  5. $cdn = empty($_GET['cdn']) ? "hwcdn" : trim($_GET['cdn']);
  6. $media = empty($_GET['media']) ? "flv" : trim($_GET['media']);
  7. $roomurl = "https://mp.huya.com/cache.php?m=Live&do=profileRoom&roomid=" . $id;


  8. function get_content($apiurl, $flag)
  9. {
  10.     if ($flag == "mobile") {
  11.         $headers = array(
  12.             'Content-Type: application/x-www-form-urlencoded',
  13.             'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 16_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Mobile/15E148 Safari/604.1'
  14.         );
  15.     } else {
  16.         $arr = [
  17.             "appId" => 5002,
  18.             "byPass" => 3,
  19.             "context" => "",
  20.             "version" => "2.4",
  21.             "data" => new stdClass(),
  22.         ];
  23.         $postData = json_encode($arr);
  24.         $headers = array(
  25.             'Content-Type: application/json',
  26.             'Content-Length: ' . strlen($postData),
  27.             'upgrade-insecure-requests: 1',
  28.             'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
  29.         );
  30.     }
  31.     $ch = curl_init();
  32.     curl_setopt($ch, CURLOPT_URL, $apiurl);
  33.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  34.     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  35.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  36.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  37.     if ($flag == "uid") {
  38.         curl_setopt($ch, CURLOPT_POST, 1);
  39.         curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
  40.     }
  41.     $data = curl_exec($ch);
  42.     curl_close($ch);
  43.     return $data;
  44. }

  45. $jsonStr = json_decode(get_content($roomurl, "mobile"), true);
  46. $realdata = $jsonStr["data"];
  47. $uid = json_decode(get_content("https://udblgn.huya.com/web/anonymousLogin", "uid"), true)["data"]["uid"];

  48. function aes_decrypt($ciphertext, $key, $iv)
  49. {
  50.     return openssl_decrypt($ciphertext, 'AES-256-CBC', $key, 0, $iv);
  51. }

  52. $key = "abcdefghijklmnopqrstuvwxyz123456";
  53. $iv = "1234567890123456";
  54. $mediaurl = aes_decrypt("fIuPMpBI1RpRnM2JhbYHzvwCvwhHBF7Q+8k14m9h3N5ZfubHcDCEk08TnLwHoMI/SG7bxpqT6Rh+gZunSpYHf1JM/RmEC/S1SjRYWw6rwc3gGo3Rrsl3sojPujI2aZsb", $key, $iv);


  55. function get_uuid()
  56. {
  57.     $now = intval(microtime(true) * 1000);
  58.     $rand = rand(0, 1000) | 0;
  59.     return intval(($now % 10000000000 * 1000 + $rand) % 4294967295);
  60. }

  61. function process_anticode($anticode, $uid, $streamname)
  62. {
  63.     parse_str($anticode, $q);
  64.     $q["t"] = '102';
  65.     $q["ctype"] = 'tars_mp';
  66.     $q["wsTime"] = dechex(time() + 21600);
  67.     $q["ver"] = "1";
  68.     $q["sv"] = date('YmdH');
  69.     $q["seqid"] = strval(intval($uid) + intval(microtime(true) * 1000));
  70.     $q["uid"] = strval($uid);
  71.     $q["uuid"] = strval(get_uuid());
  72.     $ss = md5("{$q["seqid"]}|{$q["ctype"]}|{$q["t"]}");
  73.     $q["fm"] = base64_decode($q["fm"]);
  74.     $q["fm"] = str_replace(["$0", "$1", "$2", "$3"], [$q["uid"], $streamname, $ss, $q["wsTime"]], $q["fm"]);
  75.     $q["wsSecret"] = md5($q["fm"]);
  76.     unset($q["fm"]);
  77.     if (array_key_exists("txyp", $q)) {
  78.         unset($q["txyp"]);
  79.     }
  80.     return http_build_query($q);
  81. }

  82. function format($realdata, $uid)
  83. {
  84.     $stream_info = ['flv' => [], 'hls' => []];
  85.     $cdn_type = ['HY' => 'hycdn', 'TX' => 'txcdn', 'HW' => 'hwcdn', 'HS' => 'hscdn', 'WS' => 'wscdn'];
  86.     foreach ($realdata["stream"]["baseSteamInfoList"] as $s) {
  87.         if ($s["sFlvUrl"]) {
  88.             $stream_info["flv"][$cdn_type[$s["sCdnType"]]] = $s["sFlvUrl"] . '/' . $s["sStreamName"] . '.' . $s["sFlvUrlSuffix"] . '?' . process_anticode($s["sFlvAntiCode"], $uid, $s["sStreamName"]);
  89.         }
  90.         if ($s["sHlsUrl"]) {
  91.             $stream_info["hls"][$cdn_type[$s["sCdnType"]]] = $s["sHlsUrl"] . '/' . $s["sStreamName"] . '.' . $s["sHlsUrlSuffix"] . '?' . process_anticode($s["sHlsAntiCode"], $uid, $s["sStreamName"]);
  92.         }
  93.     }
  94.     return $stream_info;
  95. }

  96. if ($jsonStr["status"] == 200) {
  97.     $realurl = format($realdata, $uid);
  98.     if ($type == "display") {
  99.         print_r($realurl);
  100.         exit();
  101.     }
  102.     if ($media == "flv") {
  103.         switch ($cdn) {
  104.             case $cdn:
  105.                 $mediaurl = str_replace("http://", "https://", $realurl["flv"][$cdn]);
  106.                 break;
  107.             default:
  108.                 $mediaurl = str_replace("http://", "https://", $realurl["flv"]["hwcdn"]);
  109.                 break;
  110.         }
  111.     }
  112.     if ($media == "hls") {
  113.         switch ($cdn) {
  114.             case $cdn:
  115.                 $mediaurl = str_replace("http://", "https://", $realurl["hls"][$cdn]);
  116.                 break;
  117.             default:
  118.                 $mediaurl = str_replace("http://", "https://", $realurl["hls"]["hwcdn"]);
  119.                 break;
  120.         }
  121.     }
  122.     header('location:' . $mediaurl);
  123.     exit();
  124. } else {
  125.     header('location:' . $mediaurl);
  126.     exit();
  127. }
复制代码


点评

该源码可以局域网转发,但不能走服务器  发表于 前天 11:00

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 2 天

[LV.1]初学乍练

发表于 昨天 09:18 | 显示全部楼层

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

签到天数: 93 天

[LV.6]渐入佳境

发表于 昨天 15:18 | 显示全部楼层
人生没有彩排,每天都是直播

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

该用户从未签到

发表于 昨天 16:40 来自手机 | 显示全部楼层
静态的不是一直很正常看吗

人生没有彩排,每天都是直播。

Welcome to iptv.cc !

回复

使用道具 举报

本版积分规则

Archiver|手机版|小黑屋|IPTV论坛 | 管理员邮箱:a@8494.net

本站以兴趣爱好为宗旨,非经营性质,不以任何形式收取任何费用。IPTV论坛没有任何官方Q群,V群,T群,禁止留任何联系方式,请配合。

免责声明:本站上述内容来自网络,不得用于商业或非法用途,您必须在下载后24小时内,从设备中删除,否则后果自负。如内容侵犯您的版权、著作权,请联系我,第一时间处理。

GMT+8, 2025-4-4 08:23 , Processed in 0.111337 second(s), 19 queries .

IPTV论坛 创建于 2023年5月1日