吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 4490|回复: 88
上一主题 下一主题
收起左侧

[Python] 逆向某个vip视频解析,获取m3u8播放源,纯技术分享、研究

  [复制链接]
跳转到指定楼层
楼主
yanshiqi 发表于 2022-4-19 13:49 回帖奖励
前言:
        如果小伙伴们仅需要解析VIP视频观看,相信大家可以百度出一大把的网站,所以就不需要这些代码了。分享代码仅供技术研究,请悉知!
视频中的广告,请勿相信!!!

使用效果:
   

拿到m3u8地址后,直接在浏览器可以播放。



源码分享:
[Python] 纯文本查看 复制代码
import execjs, re, requests, json
from urllib import parse


def page_parse(video_url):
    url = 'https://jx.xihujx.com/index.php?url=' + video_url
    headers = {
        "Host": "jx.xihujx.com",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        "Referer": "https://yparse.jn1.cc/",
        "Accept-Language": "zh-CN,zh;q=0.9"
    }
    res = requests.get(url=url, headers=headers)
    r = re.compile('eval\((.*?)\);')
    data = r.findall(res.text)
    key = eval(data[0])[-6:-2]
    encode_data = eval(data[1])[16:-4]
    return key, encode_data


def api_php(other, key, url_, time):
    url = 'https://jx.xihujx.com/api.php'
    headers = {
        "Host": "jx.xihujx.com",
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36",
        "Origin": "https://jx.xihujx.com",
        "Accept-Language": "zh-CN,zh;q=0.9"
    }
    data = f'referer={parse.quote_plus(other)}&time={time}&key={parse.quote_plus(key)}&url={parse.quote_plus(url_)}&type=0&up=0'
    res = requests.post(url=url, headers=headers, data=data)
    sign = json.loads(res.text)["sign"]
    return sign


def xihujx_M3u8Url(video_url):
    key, encode_data = page_parse(video_url)
    data = '''var md5_;function encode(a){'use strict';var c=String.fromCharCode(a.charCodeAt(0)+a.length);for(var i=1;i<a.length;i++){c+=String.fromCharCode(a.charCodeAt(i)+a.charCodeAt(i-1))}
    return escape(c)}
    function decode(a){'use strict';a=unescape(a);var c=String.fromCharCode(a.charCodeAt(0)-a.length);for(var i=1;i<a.length;i++){c+=String.fromCharCode(a.charCodeAt(i)-a.charCodeAt(i-1))}
    return c}
    function dateFormat(a,b){var o={"M+":a.getMonth()+1,"d+":a.getDate(),"h+":a.getHours(),"m+":a.getMinutes(),"s+":a.getSeconds(),"q+":Math.floor((a.getMonth()+3)/3),"S":a.getMilliseconds()};if(/(y+)/.test(b)){b=b.replace(RegExp.$1,(a.getFullYear()+"").substr(4-RegExp.$1.length))}
    for(var k in o){if(new RegExp("("+k+")").test(b)){b=b.replace(RegExp.$1,(RegExp.$1.length==1)?(o[k]):(("00"+o[k]).substr((""+o[k]).length)))}}
    return b};(function($){'use strict';function safeAdd(x,y){var a=(x&0xffff)+(y&0xffff);var b=(x>>16)+(y>>16)+(a>>16);return(b<<16)|(a&0xffff)}
    function bitRotateLeft(a,b){return(a<<b)|(a>>>(32-b))}
    function md5cmn(q,a,b,x,s,t){return safeAdd(bitRotateLeft(safeAdd(safeAdd(a,q),safeAdd(x,t)),s),b)}
    function md5ff(a,b,c,d,x,s,t){return md5cmn((b&c)|(~b&d),a,b,x,s,t)}
    function md5gg(a,b,c,d,x,s,t){return md5cmn((b&d)|(c&~d),a,b,x,s,t)}
    function md5hh(a,b,c,d,x,s,t){return md5cmn(b^c^d,a,b,x,s,t)}
    function md5ii(a,b,c,d,x,s,t){return md5cmn(c^(b|~d),a,b,x,s,t)}
    function binlMD5(x,e){x[e>>5]|=0x80<<(e%32);x[((e+64)>>>9<<4)+14]=e;var i;var f;var g;var h;var j;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(i=0;i<x.length;i+=16){f=a;g=b;h=c;j=d;a=md5ff(a,b,c,d,x[i],7,-680876936);d=md5ff(d,a,b,c,x[i+1],12,-389564586);c=md5ff(c,d,a,b,x[i+2],17,606105819);b=md5ff(b,c,d,a,x[i+3],22,-1044525330);a=md5ff(a,b,c,d,x[i+4],7,-176418897);d=md5ff(d,a,b,c,x[i+5],12,1200080426);c=md5ff(c,d,a,b,x[i+6],17,-1473231341);b=md5ff(b,c,d,a,x[i+7],22,-45705983);a=md5ff(a,b,c,d,x[i+8],7,1770035416);d=md5ff(d,a,b,c,x[i+9],12,-1958414417);c=md5ff(c,d,a,b,x[i+10],17,-42063);b=md5ff(b,c,d,a,x[i+11],22,-1990404162);a=md5ff(a,b,c,d,x[i+12],7,1804603682);d=md5ff(d,a,b,c,x[i+13],12,-40341101);c=md5ff(c,d,a,b,x[i+14],17,-1502002290);b=md5ff(b,c,d,a,x[i+15],22,1236535329);a=md5gg(a,b,c,d,x[i+1],5,-165796510);d=md5gg(d,a,b,c,x[i+6],9,-1069501632);c=md5gg(c,d,a,b,x[i+11],14,643717713);b=md5gg(b,c,d,a,x[i],20,-373897302);a=md5gg(a,b,c,d,x[i+5],5,-701558691);d=md5gg(d,a,b,c,x[i+10],9,38016083);c=md5gg(c,d,a,b,x[i+15],14,-660478335);b=md5gg(b,c,d,a,x[i+4],20,-405537848);a=md5gg(a,b,c,d,x[i+9],5,568446438);d=md5gg(d,a,b,c,x[i+14],9,-1019803690);c=md5gg(c,d,a,b,x[i+3],14,-187363961);b=md5gg(b,c,d,a,x[i+8],20,1163531501);a=md5gg(a,b,c,d,x[i+13],5,-1444681467);d=md5gg(d,a,b,c,x[i+2],9,-51403784);c=md5gg(c,d,a,b,x[i+7],14,1735328473);b=md5gg(b,c,d,a,x[i+12],20,-1926607734);a=md5hh(a,b,c,d,x[i+5],4,-378558);d=md5hh(d,a,b,c,x[i+8],11,-2022574463);c=md5hh(c,d,a,b,x[i+11],16,1839030562);b=md5hh(b,c,d,a,x[i+14],23,-35309556);a=md5hh(a,b,c,d,x[i+1],4,-1530992060);d=md5hh(d,a,b,c,x[i+4],11,1272893353);c=md5hh(c,d,a,b,x[i+7],16,-155497632);b=md5hh(b,c,d,a,x[i+10],23,-1094730640);a=md5hh(a,b,c,d,x[i+13],4,681279174);d=md5hh(d,a,b,c,x[i],11,-358537222);c=md5hh(c,d,a,b,x[i+3],16,-722521979);b=md5hh(b,c,d,a,x[i+6],23,76029189);a=md5hh(a,b,c,d,x[i+9],4,-640364487);d=md5hh(d,a,b,c,x[i+12],11,-421815835);c=md5hh(c,d,a,b,x[i+15],16,530742520);b=md5hh(b,c,d,a,x[i+2],23,-995338651);a=md5ii(a,b,c,d,x[i],6,-198630844);d=md5ii(d,a,b,c,x[i+7],10,1126891415);c=md5ii(c,d,a,b,x[i+14],15,-1416354905);b=md5ii(b,c,d,a,x[i+5],21,-57434055);a=md5ii(a,b,c,d,x[i+12],6,1700485571);d=md5ii(d,a,b,c,x[i+3],10,-1894986606);c=md5ii(c,d,a,b,x[i+10],15,-1051523);b=md5ii(b,c,d,a,x[i+1],21,-2054922799);a=md5ii(a,b,c,d,x[i+8],6,1873313359);d=md5ii(d,a,b,c,x[i+15],10,-30611744);c=md5ii(c,d,a,b,x[i+6],15,-1560198380);b=md5ii(b,c,d,a,x[i+13],21,1309151649);a=md5ii(a,b,c,d,x[i+4],6,-145523070);d=md5ii(d,a,b,c,x[i+11],10,-1120210379);c=md5ii(c,d,a,b,x[i+2],15,718787259);b=md5ii(b,c,d,a,x[i+9],21,-343485551);a=safeAdd(a,f);b=safeAdd(b,g);c=safeAdd(c,h);d=safeAdd(d,j)}
    return[a,b,c,d]}
    function binl2rstr(a){var i;var b='';var c=a.length*32;for(i=0;i<c;i+=8){b+=String.fromCharCode((a[i>>5]>>>(i%32))&0xff)}
    return b}
    function rstr2binl(a){var i;var b=[];b[(a.length>>2)-1]=undefined;for(i=0;i<b.length;i+=1){b[i]=0}
    var c=a.length*8;for(i=0;i<c;i+=8){b[i>>5]|=(a.charCodeAt(i/8)&0xff)<<(i%32)}
    return b}
    function rstrMD5(s){return binl2rstr(binlMD5(rstr2binl(s),s.length*8))}
    function rstrHMACMD5(a,b){var i;var c=rstr2binl(a);var d=[];var e=[];var f;d[15]=e[15]=undefined;if(c.length>16){c=binlMD5(c,a.length*8)}
    for(i=0;i<16;i+=1){d[i]=c[i]^0x36363636;e[i]=c[i]^0x5c5c5c5c}
    f=binlMD5(d.concat(rstr2binl(b)),512+b.length*8);return binl2rstr(binlMD5(e.concat(f),512+128))}
    function rstr2hex(a){var b='0123456789abcdef';var c='';var x;var i;for(i=0;i<a.length;i+=1){x=a.charCodeAt(i);c+=b.charAt((x>>>4)&0x0f)+b.charAt(x&0x0f)}
    return c}
    function str2rstrUTF8(a){return unescape(encodeURIComponent(a))}
    function rawMD5(s){return rstrMD5(str2rstrUTF8(s))}
    function hexMD5(s){return rstr2hex(rawMD5(s))}
    function rawHMACMD5(k,d){return rstrHMACMD5(str2rstrUTF8(k),str2rstrUTF8(d))}
    function hexHMACMD5(k,d){return rstr2hex(rawHMACMD5(k,d))}
    function md5(a,b,c){if(!b){if(!c){return hexMD5(a)}
    return rawMD5(a)}
    if(!c){return hexHMACMD5(b,a)}
    return rawHMACMD5(b,a)}
    md5_=md5;if(typeof define==='function'&&define.amd){define(function(){return md5})}else if(typeof module==='object'&&module.exports){module.exports=md5}else{$.md5=md5}})(this);var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}
    t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}
    return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9+/=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}
    if(a!=64){t=t+String.fromCharCode(i)}}
    t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/rn/g,"n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}
    return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}
    return t}}
    var CryptoJS=CryptoJS||function(u,p){var d={},l=d.lib={},s=function(){},t=l.Base={extend:function(a){s.prototype=this;var c=new s;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)
    a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},r=l.WordArray=t.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=p?c:4*a.length},toString:function(a){return(a||v).stringify(this)},concat:function(a){var c=this.words,e=a.words,j=this.sigBytes;a=a.sigBytes;this.clamp();if(j%4)
    for(var k=0;k<a;k++)
    c[j+k>>>2]|=(e[k>>>2]>>>24-8*(k%4)&255)<<24-8*((j+k)%4);else if(65535<e.length)
    for(k=0;k<a;k+=4)
    c[j+k>>>2]=e[k>>>2];else
    c.push.apply(c,e);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<32-8*(c%4);a.length=u.ceil(c/4)},clone:function(){var a=t.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],e=0;e<a;e+=4)
    c.push(4294967296*u.random()|0);return new r.init(c,a)}}),w=d.enc={},v=w.Hex={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;j<a;j++){var k=c[j>>>2]>>>24-8*(j%4)&255;e.push((k>>>4).toString(16));e.push((k&15).toString(16))}
    return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;j<c;j+=2)
    e[j>>>3]|=parseInt(a.substr(j,2),16)<<24-4*(j%8);return new r.init(e,c/2)}},b=w.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;j<a;j++)
    e.push(String.fromCharCode(c[j>>>2]>>>24-8*(j%4)&255));return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;j<c;j++)
    e[j>>>2]|=(a.charCodeAt(j)&255)<<24-8*(j%4);return new r.init(e,c)}},x=w.Utf8={stringify:function(a){try{return decodeURIComponent(escape(b.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return b.parse(unescape(encodeURIComponent(a)))}},q=l.BufferedBlockAlgorithm=t.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=x.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,e=c.words,j=c.sigBytes,k=this.blockSize,b=j/(4*k),b=a?u.ceil(b):u.max((b|0)-this._minBufferSize,0);a=b*k;j=u.min(4*a,j);if(a){for(var q=0;q<a;q+=k)
    this._doProcessBlock(e,q);q=e.splice(0,a);c.sigBytes-=j}
    return new r.init(q,j)},clone:function(){var a=t.clone.call(this);a._data=this._data.clone();return a},_minBufferSize:0});l.Hasher=q.extend({cfg:t.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){q.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,e){return(new a.init(e)).finalize(b)}},_createHmacHelper:function(a){return function(b,e){return(new n.HMAC.init(a,e)).finalize(b)}}});var n=d.algo={};return d}(Math);(function(){var u=CryptoJS,p=u.lib.WordArray;u.enc.Base64={stringify:function(d){var l=d.words,p=d.sigBytes,t=this._map;d.clamp();d=[];for(var r=0;r<p;r+=3)
    for(var w=(l[r>>>2]>>>24-8*(r%4)&255)<<16|(l[r+1>>>2]>>>24-8*((r+1)%4)&255)<<8|l[r+2>>>2]>>>24-8*((r+2)%4)&255,v=0;4>v&&r+0.75*v<p;v++)
    d.push(t.charAt(w>>>6*(3-v)&63));if(l=t.charAt(64))
    for(;d.length%4;)
    d.push(l);return d.join("")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w<l;w++)
    if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}
    return p.create(t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();(function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b<<j|b>>>32-j)+n}
    function d(b,n,a,c,e,j,k){b=b+(n&c|a&~c)+e+k;return(b<<j|b>>>32-j)+n}
    function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(b<<j|b>>>32-j)+n}
    function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(b<<j|b>>>32-j)+n}
    for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64>x;x++)
    b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(q,n){for(var a=0;16>a;a++){var c=n+a,e=q[c];q[c]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360}
    var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]),f=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f,m,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m,E,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c>>>5]|=128<<24-c%32;var e=u.floor(a/4294967296);n[(c+64>>>9<<4)+15]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360;n[(c+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4>a;a++)
    c=n[a],n[a]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math);(function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.length<q;){n&&s.update(n);var n=s.update(d).finalize(r);s.reset();for(var a=1;a<p;a++)
    n=s.finalize(n),s.reset();b.concat(n)}
    b.sigBytes=4*q;return b}});u.EvpKDF=function(d,l,p){return s.create(p).compute(d,l)}})();CryptoJS.lib.Cipher||function(u){var p=CryptoJS,d=p.lib,l=d.Base,s=d.WordArray,t=d.BufferedBlockAlgorithm,r=p.enc.Base64,w=p.algo.EvpKDF,v=d.Cipher=t.extend({cfg:l.extend(),createEncryptor:function(e,a){return this.create(this._ENC_XFORM_MODE,e,a)},createDecryptor:function(e,a){return this.create(this._DEC_XFORM_MODE,e,a)},init:function(e,a,b){this.cfg=this.cfg.extend(b);this._xformMode=e;this._key=a;this.reset()},reset:function(){t.reset.call(this);this._doReset()},process:function(e){this._append(e);return this._process()},finalize:function(e){e&&this._append(e);return this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(b,k,d){return("string"==typeof k?c:a).encrypt(e,b,k,d)},decrypt:function(b,k,d){return("string"==typeof k?c:a).decrypt(e,b,k,d)}}}});d.StreamCipher=v.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var b=p.mode={},x=function(e,a,b){var c=this._iv;c?this._iv=u:c=this._prevBlock;for(var d=0;d<b;d++)
    e[a+d]^=c[d]},q=(d.BlockCipherMode=l.extend({createEncryptor:function(e,a){return this.Encryptor.create(e,a)},createDecryptor:function(e,a){return this.Decryptor.create(e,a)},init:function(e,a){this._cipher=e;this._iv=a}})).extend();q.Encryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize;x.call(this,e,a,c);b.encryptBlock(e,a);this._prevBlock=e.slice(a,a+c)}});q.Decryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize,d=e.slice(a,a+c);b.decryptBlock(e,a);x.call(this,e,a,c);this._prevBlock=d}});b=b.CBC=q;q=(p.pad={}).Pkcs7={pad:function(a,b){for(var c=4*b,c=c-a.sigBytes%c,d=c<<24|c<<16|c<<8|c,l=[],n=0;n<c;n+=4)
    l.push(d);c=s.create(l,c);a.concat(c)},unpad:function(a){a.sigBytes-=a.words[a.sigBytes-1>>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)
    var c=a.createEncryptor;else
    c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else
    b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}
    return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,b.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)
    a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}
    var H=[0,1,2,4,8,16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j<a;j++)
    if(j<d)
    e[j]=c[j];else{var k=e[j-1];j%d?6<d&&4==j%d&&(k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}
    c=this._invKeySchedule=[];for(d=0;d<a;d++)
    j=a-d,k=d%4?e[j]:e[j-4],c[d]=4>d||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>>8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r<m;r++)
    var q=d[g>>>24]^e[h>>>16&255]^j[k>>>8&255]^l[n&255]^c[p++],s=d[h>>>24]^e[k>>>16&255]^j[n>>>8&255]^l[g&255]^c[p++],t=d[k>>>24]^e[n>>>16&255]^j[g>>>8&255]^l[h&255]^c[p++],n=d[n>>>24]^e[g>>>16&255]^j[h>>>8&255]^l[k&255]^c[p++],g=q,h=s,k=t;q=(f[g>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[n&255])^c[p++];s=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>>24]<<24|f[n>>>16&255]<<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>>24]<<24|f[g>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})();CryptoJS.pad.ZeroPadding={pad:function(a,b){var c=b*4;a.clamp();a.sigBytes+=c-((a.sigBytes%c)||c)},unpad:function(a){var b=a.words;var i=a.sigBytes-1;while(!((b[i>>>2]>>>(24-(i%4)*8))&0xff)){i--}
    a.sigBytes=i+1}};var sign=function(a){var b=CryptoJS.MD5(a);var c=CryptoJS.enc.Utf8.parse(b);var d=CryptoJS.enc.Utf8.parse('ren163com5201314');var e=CryptoJS.AES.encrypt(a,c,{iv:d,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});return e.toString()}
    function getToken(key){return md5_(md5_(new Date(dateFormat(new Date(),"yyyy/MM/dd hh:mm")).getTime()/1000+key));}
    function strdecode(a,token){'use strict';var b=false;var c=token;var d=c.length;var e='';var k='';if(b){a=Base64.encode(a)}else{a=Base64.decode(a)};for(var i=0;i<a.length;i++){k=i%d;e+=String.fromCharCode(a.charCodeAt(i)^c.charCodeAt(k))};if(b){return Base64.encode(e)}else{return Base64.decode(e)}}
    function strencode(a,token){'use strict';var b=false;var c=token;var d=c.length;var e='';var k='';if(b){a=Base64.encode(a)}else{a=Base64.encode(a)};for(var i=0;i<a.length;i++){k=i%d;e+=String.fromCharCode(a.charCodeAt(i)^c.charCodeAt(k))};if(b){return Base64.encode(e)}else{return Base64.encode(e)}}'''
    cjs = execjs.compile(data)
    token = cjs.call('getToken', key)
    result = cjs.call('strdecode', encode_data, token)
    r = re.compile('strdecode\("(.*?)"\)')
    l = r.findall(result)
    result = cjs.call('strdecode', l[1], token)
    r = re.compile("other : '(.*?)'")
    other = r.findall(result)[0]
    r = re.compile("key : sign\('(.*?)'\)")
    key = r.findall(result)[0]
    r = re.compile("url : '(.*?)'")
    url = r.findall(result)[0]
    r = re.compile("time : '(.*?)'")
    time = r.findall(result)[0]
    key = cjs.call('sign', key)
    url = cjs.call('strdecode', url, token)
    sign = api_php(other, key, url, time)
    result = cjs.call('strdecode', sign, token)
    info = json.loads(result)
    title = info.get("title")
    playurl = info["url"]
    playurl = cjs.call('strdecode', playurl, token)
    if not playurl.startswith("http"):
        playurl = "https:" + playurl
    info = info.get("info")
    if info:
        video = info[0]["video"]
        videos = []
        for v in video:
            v = v.split("$")
            videos.append({v[0]: v[1]})
        for video in videos:
            for k, v in video.items():
                print(f"{title}-{k}, PlayUrl: {v}")
    return playurl


if __name__ == '__main__':
    video_url = 'https://v.qq.com/x/cover/mzc002001uvqi5d.html'
    # video_url = 'https://www.iqiyi.com/v_1zot3lvetdk.html'
    # video_url = 'https://v.youku.com/v_show/id_XNTg1NTEzMTI4OA==.html'
    print("云解析成功:", xihujx_M3u8Url(video_url))


感言:
    一般的解析接口很容易就解决了,唯独这个接口,花费了我几天的心思,希望后面去破解的小伙伴不用这么费脑了吧。 思路理清后,其实原理挺简单的。。。

   
最后:
    如有违规,请管理人员直接删贴吧。  

免费评分

参与人数 10吾爱币 +12 热心值 +9 收起 理由
hhcjl + 1 + 1 谢谢@Thanks!
lmzx + 1 + 1 谢谢@Thanks!
左良渊上的骏马 + 1 + 1 我很赞同!
vinafule + 1 热心回复!
开心的一逼 + 1 + 1 用心讨论,共获提升!
yjn866y + 1 + 1 热心回复!
风绕柳絮轻敲雪 + 3 + 1 我很赞同!
Reer + 1 + 1 热心回复!
wda114514 + 1 + 1 谢谢@Thanks!
mfchaos + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

来自 23#
 楼主| yanshiqi 发表于 2022-4-19 16:17 |楼主
转一个好用下载器  M3U8批量下载器 V1.4.7 1114【11月15日更新】
https://www.52pojie.cn/thread-1374045-1-1.html

再分享一个浏览器插件。 Reproductor-M3U8-HLS-Player_v1.5.rar (188.44 KB, 下载次数: 306)

代码运行基于python环境,requests库, PyExecj库。 实在看不懂的小伙伴,需要学习一下python基础哦,我几句话也是整不明白的。
来自 37#
hecoter 发表于 2022-4-19 19:53
[Python] 纯文本查看 复制代码
import base64
import sys,time
import hashlib
import  re, requests, json
from urllib import parse
from Crypto.Cipher import AES

md5 = lambda value: hashlib.md5(value.encode('utf-8')).hexdigest()



def page_parse(video_url):
    url = 'https://jx.xihujx.com/index.php?url=' + video_url
    headers = {
        "Host": "jx.xihujx.com",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
        "Referer": "https://yparse.jn1.cc/",
        "Accept-Language": "zh-CN,zh;q=0.9"
    }
    res = requests.get(url=url, headers=headers)
    r = re.compile('eval\((.*?)\);')
    data = r.findall(res.text)
    key = eval(data[0])[-6:-2]
    encode_data = eval(data[1])[16:-4]
    return key, encode_data


def api_php(other, key, url_, time):
    url = 'https://jx.xihujx.com/api.php'
    headers = {
        "Host": "jx.xihujx.com",
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36",
        "Origin": "https://jx.xihujx.com",
        "Accept-Language": "zh-CN,zh;q=0.9"
    }
    data = f'referer={parse.quote_plus(other)}&time={time}&key={parse.quote_plus(key)}&url={parse.quote_plus(url_)}&type=0&up=0'
    res = requests.post(url=url, headers=headers, data=data)
    sign = json.loads(res.text)["sign"]
    return sign

def get_sign(text):
    key = bytes.fromhex(md5(text).encode().hex())
    iv = 'ren163com5201314'.encode()
    cryptor = AES.new(key=key, mode=AES.MODE_CBC, iv=iv)
    entext = cryptor.encrypt(text.encode())
    b64entext = base64.b64encode(entext).decode()
    return b64entext

def getToken(key):
    Nowtime = int(time.time())  # 获取当前时间戳
    time01 = Nowtime - Nowtime % 60
    return md5(md5(str(time01)+key))

def str_decode(encode_data, token):
    a = base64.b64decode(encode_data)
    a = list(a)
    d = len(token)
    e = ''
    for i in range(len(a)):
        k = i % d
        e += chr(a[i] ^ ord(token[k]))
    result = base64.b64decode(e).decode()
    return result


def xihujx_M3u8Url(video_url):
    key, encode_data = page_parse(video_url)

    token = getToken(key)

    result = str_decode(encode_data, token)

    r = re.compile('strdecode\("(.*?)"\)')
    l = r.findall(result)
    result = str_decode(l[1], token)


    r = re.compile("other : '(.*?)'")
    other = r.findall(result)[0]
    r = re.compile("key : sign\('(.*?)'\)")
    key = r.findall(result)[0]
    r = re.compile("url : '(.*?)'")
    url = r.findall(result)[0]
    r = re.compile("time : '(.*?)'")
    time = r.findall(result)[0]

    key = get_sign(key)


    url = str_decode(url, token)
    Sign = api_php(other, key, url, time)

    result = str_decode(Sign, token)


    info = json.loads(result)
    title = info.get("title")
    playurl = info["url"]
    playurl = str_decode(playurl, token)
    if not playurl.startswith("http"):
        playurl = "https:" + playurl
    info = info.get("info")
    if info:
        video = info[0]["video"]
        videos = []
        for v in video:
            v = v.split("$")
            videos.append({v[0]: v[1]})
        for video in videos:
            for k, v in video.items():
                print(f"{title}-{k}, PlayUrl: {v}")
    return playurl


if __name__ == '__main__':

    video_url = 'https://v.qq.com/x/cover/mzc002001uvqi5d.html'
    # video_url = 'https://www.iqiyi.com/v_1zot3lvetdk.html'
    # video_url = 'https://v.youku.com/v_show/id_XNTg1NTEzMTI4OA==.html'
    print("云解析成功:", xihujx_M3u8Url(video_url))


稍微修改了下代码,js转python 了
推荐
 楼主| yanshiqi 发表于 2022-4-19 15:19 |楼主
小和00 发表于 2022-4-19 14:56
大佬 这个怎么用啊

亲,推荐另一种方式给你。
https://okjx.cc/?url=https://v.q ... ux/j00410m70gs.html
复制上面的网址,直接在浏览器打开即可。 后面的 https://okjx.cc/??url=*** 改成想要观看的VIP视频。
沙发
mfchaos 发表于 2022-4-19 13:57
研究研究,希望能看明白
3#
dongse 发表于 2022-4-19 14:09
希望能看明白
4#
luyao1 发表于 2022-4-19 14:16
感谢大佬分享
5#
hecoter 发表于 2022-4-19 14:22
感谢分享,晚上有时间试下
6#
wda114514 发表于 2022-4-19 14:23
感谢楼主分享支持一下
7#
jun85719392 发表于 2022-4-19 14:26
学习一下了!
8#
甜甜的爸比 发表于 2022-4-19 14:55
这个代码 怎么使用啊 在观看视频的时候?? 求学习
9#
小和00 发表于 2022-4-19 14:56
大佬 这个怎么用啊
10#
 楼主| yanshiqi 发表于 2022-4-19 14:57 |楼主
甜甜的爸比 发表于 2022-4-19 14:55
这个代码 怎么使用啊 在观看视频的时候?? 求学习

video_url = 'https://v.qq.com/x/cover/mzc002001uvqi5d.html'    # 这里的网址替换成你想要看的视频网址,运行就可以了呀   
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2022-6-27 09:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表