优酷m3u8动态地址破解

废话不多说直接上代码

(function(){
  window.BuildVideoInfo = {
    encodeid:"XMTY3NjA4MTAzNg==",
    _type:"m3u8",
    _url:"http://play.youku.com/play/get.json?vid=419020259&ct=12&callback=BuildVideoInfo.response",
    _vid:"419020259",
  };
  // encodeid:"XMTU4MzI3Mzc1Ng==",
  // _type:"m3u8",
  // _url:"http://play.youku.com/play/get.json?vid=395818439&ct=12&callback=BuildVideoInfo.response",
  // _vid:"395818439",
  BuildVideoInfo.response = function(a) {
      this.init(a);
      //var b = a.data, c = b.stream;
      //this.playlistError || (this.playlistOK=!0, this.reportPlayListUep(), YK.v = a, a && b && (!c || "default" === c[0].drm_type && "http" === c[0].transfer_mode) ? this.init(a) : this.error(1, a, b, c))
  };
  BuildVideoInfo.m3u8src = function(a) {
      return YK.password = this._password, YK.m3u8src_v2(this.encodeid, a)
  };
  BuildVideoInfo.init = function(a) {
        console.log(a);
        this._v = a;
        var b = a.data, c = b.stream;
        if (this.encodeid = b.video.encodeid, !b.security ||!b.security.encrypt_string ||!b.security.ip)
            return YKP.sendErrorReport(2004), void YKP.showError(null, "数据解析错误");
        if (!c&&!b.error)
            return void YKP.showError(null, "该视频暂不能播放");
        var d = [19, 1, 4, 7, 30, 14, 28, 8, 24, 17, 6, 35, 34, 16, 9, 10, 13, 22, 32, 29, 31, 21, 18, 3, 2, 23, 25, 27, 11, 20, 5, 15, 12, 0, 33, 26], e = rc4(translate(YK.mk.a3 + "o0b" + YKP.userCache.a1, d).toString(), decode64(b.security.encrypt_string)), f = e.split("_");
        YKP.userCache.sid = e.split("_")[0];
        YKP.userCache.token = e.split("_")[1];
        YK.v = a;
        var url = YK.m3u8src_v2(BuildVideoInfo.encodeid,"mp4");
        $("#media").attr("src",url)
        // var string = '<video id="media" src="'+url+'" width="0px" height="0px" preload controls ></video>';
        // $(".page-content").append(string);
        console.log(url);
        //$("#media").attr("src",url);
    };
  var YK = {}, YKU = {}, YKP = {
          playerType: "",
          userCache: {
              a1: "4",
              a2: "1"
          },
          playerState: {
              PLAYER_STATE_INIT: "PLAYER_STATE_INIT",
              PLAYER_STATE_READY: "PLAYER_STATE_READY",
              PLAYER_STATE_AD: "PLAYER_STATE_AD",
              PLAYER_STATE_PLAYING: "PLAYER_STATE_PLAYING",
              PLAYER_STATE_END: "PLAYER_STATE_END",
              PLAYER_STATE_ERROR: "PLAYER_STATE_ERROR"
          },
          playerCurrentState: "PLAYER_STATE_INIT"
      };
  YK.m3u8src = function(a, b) {
        var c = "http://v.youku.com/player/getM3U8/vid/" + a + "/type/" + b + "/ts/" + parseInt((new Date).getTime() / 1e3);
        return  (c += "/useKeyFrame/0"), c += "/v.m3u8"
    };
  YK.m3u8src_v2 = function(a, b) {
      var c = {
          vid: a,
          type: b,
          ts: parseInt((new Date).getTime() / 1e3),
          keyframe: YKP.isIPHONE ? 0: 1
      };
      YK.password && (c.password = YK.password), YK.password && YK.initConfig.client_id && YK.config.partner_config && 1 == YK.config.partner_config.status && 1 == YK.config.partner_config.passless && (c.client_id = YK.initConfig.client_id);
      var d = [19, 1, 4, 7, 30, 14, 28, 8, 24, 17, 6, 35, 34, 16, 9, 10, 13, 22, 32, 29, 31, 21, 18, 3, 2, 23, 25, 27, 11, 20, 5, 15, 12, 0, 33, 26], e = encodeURIComponent(encode64(rc4(translate(YK.mk.a4 + "poz" + YKP.userCache.a2, d).toString(), YKP.userCache.sid + "_" + a + "_" + YKP.userCache.token)));
      c.ep = e, c.sid = YKP.userCache.sid, c.token = YKP.userCache.token, c.ctype = "12", c.ev = "1", c.oip = YK.v.data.security.ip;
      var f = "http://pl.youku.com/playlist/m3u8?" + urlParameter(c);
      return f;
  };
  YK.mk = {}, YK.mk.a3 = "b4et", void(YK.mk.a4 = "boa4")
  function decode64(a) {
      if (!a)
          return "";
      a = a.toString();
      var b, c, d, e, f, g, h, i = new Array( - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 62, - 1, - 1, - 1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 1, - 1, - 1, - 1, - 1, - 1, - 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 1, - 1, - 1, - 1, - 1, - 1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 1, - 1, - 1, - 1, - 1);
      for (g = a.length, f = 0, h = ""; g > f;) {
          do
              b = i[255 & a.charCodeAt(f++)];
          while (g > f&&-1 == b);
          if ( - 1 == b)
              break;
          do
              c = i[255 & a.charCodeAt(f++)];
          while (g > f&&-1 == c);
          if ( - 1 == c)
              break;
          h += String.fromCharCode(b<<2 | (48 & c)>>4);
          do {
              if (d = 255 & a.charCodeAt(f++), 61 == d)
                  return h;
              d = i[d]
          }
          while (g > f&&-1 == d);
          if ( - 1 == d)
              break;
          h += String.fromCharCode((15 & c)<<4 | (60 & d)>>2);
          do {
              if (e = 255 & a.charCodeAt(f++), 61 == e)
                  return h;
              e = i[e]
          }
          while (g > f&&-1 == e);
          if ( - 1 == e)
              break;
          h += String.fromCharCode((3 & d)<<6 | e)
      }
      return h
  }
  function rc4(a, b) {
          for (var c, d = [], e = 0, f = "", g = 0; 256 > g; g++)
              d[g] = g;
          for (g = 0; 256 > g; g++)
              e = (e + d[g] + a.charCodeAt(g%a.length))%256, c = d[g], d[g] = d[e], d[e] = c;
          g = 0, e = 0;
          for (var h = 0; h < b.length; h++)
              g = (g + 1)%256, e = (e + d[g])%256, c = d[g], d[g] = d[e], d[e] = c, f += String.fromCharCode(b.charCodeAt(h)^d[(d[g] + d[e])%256]);
          return f
      }
  function translate(a, b) {
      for (var c = [], d = 0; d < a.length; d++) {
          var e = 0;
          e = a[d] >= "a" && a[d] <= "z" ? a[d].charCodeAt(0) - "a".charCodeAt(0) : a[d] - "0" + 26;
          for (var f = 0; 36 > f; f++)
              if (b[f] == e) {
                  e = f;
                  break
              }
          e > 25 ? c[d] = e - 26 : c[d] = String.fromCharCode(e + 97)
      }
      return c.join("")
  }
  // var d = [19, 1, 4, 7, 30, 14, 28, 8, 24, 17, 6, 35, 34, 16, 9, 10, 13, 22, 32, 29, 31, 21, 18, 3, 2, 23, 25, 27, 11, 20, 5, 15, 12, 0, 33, 26], e = rc4(translate(YK.mk.a3 + "o0b" + YKP.userCache.a1, d).toString(), decode64(b.security.encrypt_string)), f = e.split("_");
  // YKP.userCache.sid = e.split("_")[0];
  // YKP.userCache.token = e.split("_")[1];
  $.ajax(
    {
        type:'get',
        url : BuildVideoInfo._url,
        dataType : 'jsonp',
        jsonp:"jsoncallback",
        success  : function(data) {
            alert(data);
        },
        error : function(e) {
            //alert("fail");
        }
    }
  );

  var encode64 = function(a) {
        if (!a)
            return "";
        a = a.toString();
        var b, c, d, e, f, g, h = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
        for (d = a.length, c = 0, b = ""; d > c;) {
            if (e = 255 & a.charCodeAt(c++), c == d) {
                b += h.charAt(e>>2), b += h.charAt((3 & e)<<4), b += "==";
                break
            }
            if (f = a.charCodeAt(c++), c == d) {
                b += h.charAt(e>>2), b += h.charAt((3 & e)<<4 | (240 & f)>>4), b += h.charAt((15 & f)<<2), b += "=";
                break
            }
            g = a.charCodeAt(c++), b += h.charAt(e>>2), b += h.charAt((3 & e)<<4 | (240 & f)>>4), b += h.charAt((15 & f)<<2 | (192 & g)>>6), b += h.charAt(63 & g)
        }
        return b
    }
    var urlParameter = function(a) {
        var b = [];
        for (var c in a)
            b.push(c + "=" + a[c]);
        return b.join("&")
    }
})(window)

只要配置好前面的encodeid、_url以及_vid就能正确输出优酷m3u8正确的原始地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,579评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,364评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,010评论 4 62
  • 近几天被《我的前半生》吸引,很久没有看过电视剧的我也忍不住追的停不下来。 喜欢上自己闺蜜的男朋友,这在大多数人看来...
    轻风style阅读 458评论 6 1