某瓜视频电影密钥获取

获取某瓜视频 电影视频 解密密钥

// ==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
    }
})();