求混淆js加密算法解密

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

阅读 7.3k
3 个回答

下面是完整的解密代码和调用方式:
注:可以试下在 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 文件地址,看上去是做了乱序分隔,执行的时候再拼接的。这个部分从我这看是由后端完成的,而非前端处理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题