求混淆js加密算法解密

急需这个网站的请求后的解密url加密,https://9xbuddy.org/
image.png
服务器返回的url他可以进行解码 js被混淆了 本人对js不懂呀,求大神帮帮忙,在下载链接输入:pornhub.com/view_video.php?viewkey=ph5d35a4f825603,就可以查到内容
求大神解密服务器中的url

阅读 753
评论
    3 个回答
    • 147

    下面是完整的解密代码和调用方式:
    注:可以试下在 9xbuddy 网站下的 chrome 控制台运行。

    // 填入响应数据的url字段
    let res_formats_url = '65326f655953386f68336f645166616852434f754b2f4c323747706f387937354f4f72667a7a497a4e2b5a7a33754d63664b71616a56497a414c38754943716450695a705a75326f6e4f476f696e633165533977736d595a67534a626157347050436169697139324633626d2f537177506671736c754c357931486c4a324a6e6a7147706e3273737475476a51537170704732664a4b366e7568476e662b596763715a685561366e566561666c79706e6c364e313453386d667a647261432b7447486133437670344d7a4a6f70717334714b2b6e'
    
    // 填入响应数据的token字段
    let res_token = 'n6rWoqmgkmRu3cSrlJmrlNOpy6+msMueoseSamOVgl59lpXP0qvT1Z9xgnuk2sihVbLDmVCEhYa8V5WSlmeXkWqPg3al1c6bh5qUsc2rk5dqbZBlbIaLgH25r4JcVZ7Pz5yEqZyZzaFfhqadp9TPm19tYpSUZZebb22QY2yZg4iWy8OomWRnmZtll5hoZpJm'
    
    let url = main(res_formats_url, res_token)
    console.log(url)
    // 入口函数
    function main(t, n) {   // t 为响应结果的 url, n 为响应结果的 token
        if (!t || !n)
            return null;
        var o = document.head.innerHTML
            , s = /\/build\/bundle-([^"]+?).css/g.exec(o);
        if (!s)
            return "";
        var i = s[1]
            , c = hex2bin(t).split("").reverse().join("")
            , l = n + document.location.hostname.length + i;
        return decrypt(c, l)
    }
    
    // 十六进制转二进制
    function hex2bin(e) {
        var t, n = [], r = 0;
        for (t = (e += "").length; r < t; r += 2) {
            var a = parseInt(e.substr(r, 1), 16)
                , o = parseInt(e.substr(r + 1, 1), 16);
            if (isNaN(a) || isNaN(o))
                return !1;
            n.push(a << 4 | o)
        }
        return String.fromCharCode.apply(String, n)
    }
    
    // 数据解密
    function decrypt(e, t) {
        var n = "";
        e = decode64(e);
        for (var r = 0; r < e.length; r++) {
            var a = e.substr(r, 1)
                , o = t.substr(r % t.length - 1, 1);
            a = Math.floor(ord(a) - ord(o)),
                n += a = String.fromCharCode(a)
        }
        return n
    }
    
    // base64解码
    function decode64(e) {
        if (e = e.replace(/\s/g, ""),
            /^[a-z0-9\+\/\s]+\={0,2}$/i.test(e) && !(e.length % 4 > 0)) {
            var t = 0
                , n = void 0
                , r = void 0
                , a = [];
            for (e = e.replace(/=/g, ""); t < e.length;) {
                switch (n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(e.charAt(t)),
                t % 4) {
                    case 1:
                        a.push(String.fromCharCode(r << 2 | n >> 4));
                        break;
                    case 2:
                        a.push(String.fromCharCode((15 & r) << 4 | n >> 2));
                        break;
                    case 3:
                        a.push(String.fromCharCode((3 & r) << 6 | n))
                }
                r = n,
                    t++
            }
            return a.join("")
        }
    }
    
    function ord(e) {
        var t = "" + e
            , n = t.charCodeAt(0);
        if (n >= 55296 && n <= 56319) {
            var r = n;
            return 1 === t.length ? n : 1024 * (r - 55296) + (t.charCodeAt(1) - 56320) + 65536
        }
        return n
    }

      我没找到你说的这个请求,我打开这个链接,视频文件直接就是 m3u8 文件加载的,没有过 url 解密的部分。

      image.png

      如图所示,这已经是一个 m3u8 文件了。而这个 m3u8 文件的地址,是随着 view_video.php 这个 HTML 文档里作为一个 script 标签的一部分内容一并返回的。

      image.png

      如图所示,这串字符串就是刚才那个 m3u8 文件地址,看上去是做了乱序分隔,执行的时候再拼接的。这个部分从我这看是由后端完成的,而非前端处理。

        image.png

          撰写回答

          登录后参与交流、获取后续更新提醒