Greasy Fork is available in English.
获取某瓜视频 电影视频 解密密钥
// ==UserScript== // @name 某瓜视频电影密钥获取 // @namespace https://94cat.com/ // @version 0.2 // @description 获取某瓜视频 电影视频 解密密钥 // @author mz // @match https://www.ixigua.com/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @run-at document-start // @license GPL v3 // @grant GM_registerMenuCommand // @grant GM_setClipboard // ==/UserScript== (function () { 'use strict'; const key = []; const _xhrOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (method) { method = method.toUpperCase(); this.addEventListener("readystatechange", function (event) { if (this.status != 200) { return; } if (typeof this.response != "object") { return; } if (!this.response || !this._data || !this.response?.play_licenses) { return; } const _data = JSON.parse(this._data); const vid = _data.license_request[0].vid; const kids = _data.license_request[0].kids; const base64Key = this.response?.play_licenses[vid][kids]; base64Key && key.push(Wc(atob(base64Key))); }); _xhrOpen.apply(this, arguments); } XMLHttpRequest.prototype.open.toString = function () { return _xhrOpen.toString(); } GM_registerMenuCommand("获取密钥", function () { if(key.length){ GM_setClipboard(key.join("\n"), "text", ()=>{ alert("已经复制密钥"); }); }else{ alert("未获取到密钥"); } }); function Wc(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1 , r = e; t = t || r.length; var i = mc(r, t) , a = i.convertKey , o = i.convertLen; switch (i.methodLen, i.method) { case "11": case "22": case "appdevice": case "webdevice": a = yc(a, o, n); break; case "app_v2": case "web_v2": a = Jc(a, o, n) } var l = o - Vc(a[0]) - 1 , U = new Array(l + 1); U[l] = ""; var d = 0; for (d = 0; d < l; d++) U[d] = a[d + 1]; return U.join("") } function Jc(e, t, n) { var r = 85 , i = 250; kc(e); for (var a, o, l, U = 0; U < t; U++) { (l = e[U].charCodeAt(0)) > 127 && (l -= 256), U % 2 == 1 ? (a = r ^ l, r = l, o = i) : (a = i ^ l, i = l, o = r), a > 127 && (a -= 256); var d = (0 === n ? vc(a, U, 21) : Zc(a, U, 21)).charCodeAt(0); d > 127 && (d -= 256); var c = d - o; c < 0 && (c += 256), e[U] = String.fromCharCode(c) } return kc(e), e } function mc(e, t) { var n, r = (e[0].charCodeAt() ^ e[1].charCodeAt() ^ e[2].charCodeAt()) - "0".charCodeAt(0), i = t - r - 1, a = new Array(i), o = new Array(r); for (n = r; n > 0; n--) o[r - n] = String.fromCharCode(e[t - r - 2].charCodeAt() ^ e[t - r - 1].charCodeAt() ^ e[t - n].charCodeAt()); for (n = 0; n < i; n++) a[n] = e[n + 1]; return { convertKey: a, convertLen: i, method: o.join(""), methodLen: r } } function kc(e) { for (var t, n = e.length, r = 0; r < n && r !== n - 1; r += 2) t = e[r], e[r] = e[r + 1], e[r + 1] = t; return e } function Zc(e, t, n) { var r = e + Sc(t) + n; return String.fromCharCode(255 & r) } function Sc(e) { var t = 0; for (t = 0; 0 !== e; t++) e &= e - 1; return t } function Vc(e) { return e >= "0" && e <= "9" ? e.charCodeAt(0) - "0".charCodeAt(0) : e >= "a" && e <= "z" ? e.charCodeAt(0) - "a".charCodeAt(0) + 10 : 255 } })();