关于js逆向某日头条参数_signature生成中jsvmp的补环境

博客围绕JS逆向、爬虫展开,涉及jsvmp及_signature相关内容。JS逆向在爬虫领域有重要作用,_signature可能是关键验证信息,通过对其解析可突破网站反爬机制,获取所需数据。
var window = global;
function evnProxy(obj) {
   
   
    return new Proxy(obj, {
   
   
        get: function (target, p, receiver) {
   
   
            console.log("get:", target, p, target[p]);
            return Reflect.get(target, p)
            // return target[p]
        },
        set: function (target, p, value, receiver) {
   
   
            console.log("set", target, p, value, receiver);
            return Reflect.set(...arguments)
        }
    })
}

// var window = evnProxy(window);
var navigator = evnProxy(class navigator {
   
   
});
var document = evnProxy(class document {
   
   
});
document.referrer = '';
var location = evnProxy(class location {
   
   
});
var screens = evnProxy(class screen {
   
   
});

navigator.userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36";
location.href = "";
location.protocol = "";



var glb;
(glb = "undefined" == typeof window ? global : window)._$jsvmprt = function (b, e, f) {
   
   
    function a() {
   
   
        if ("undefined" == typeof Reflect || !Reflect.construct)
            return !1;
        if (Reflect.construct.sham)
            return !1;
        if ("function" == typeof Proxy)
            return !0;
        try {
   
   
            return Date.prototype.toString.call(Reflect.construct(Date, [], (function () {
   
   
                }
            ))),
                !0
        } catch (b) {
   
   
            return !1
        }
    }

    function d(b, e, f) {
   
   
        return (d = a() ? Reflect.construct : function (b, e, f) {
   
   
                var a = [null];
                a.push.apply(a, e);
                var d = new (Function.bind.apply(b, a));
                return f && c(d, f.prototype),
                    d
            }
        ).apply(null, arguments)
    }

    function c(b, e) {
   
   
        return (c = Object.setPrototypeOf || function (b, e) {
   
   
                return b.__proto__ = e,
                    b
            }
        )(b, e)
    }

    function n(b) {
   
   
        return function (b) {
   
   
            if (Array.isArray(b)) {
   
   
                for (var e = 0, f = new Array(b.length); e < b.length; e++)
                    f[e] = b[e];
                return f
            }
        }(b) || function (b) {
   
   
            if (Symbol.iterator in Object(b) || "[object Arguments]" === Object.prototype.toString.call(b))
                return Array.from(b)
        }(b) || function () {
   
   
            throw new TypeError("Invalid attempt to spread non-iterable instance")
        }()
    }

    for (var i = [], r = 0, t = [], o = 0, l = function (b, e) {
   
   
        var f = b[e++]
            , a = b[e]
            , d = parseInt("" + f + a, 16);
        if (d >> 7 == 0)
            return [1, d];
        if (d >> 6 == 2) {
   
   
            var c = parseInt("" + b[++e] + b[++e], 16);
            return d &= 63,
                [2, c = (d <<= 8) + c]
        }
        if (d >> 6 == 3) {
   
   
            var n = parseInt("" + b[++e] + b[++e], 16)
                , i = parseInt("" + b[++e] + b[++e], 16);
            return d &= 63,
                [3, i = (d <<= 16) + (n <<= 8) + i]
        }
    }, u = function (b, e) {
   
   
        var f = parseInt("" + b[e] + b[e + 1], 16);
        return f = f > 127 ? -256 + f : f
    }, s = function (b, e) {
   
   
        var f = parseInt("" + b[e] + b[e + 1] + b[e + 2] + b[e + 3], 16);
        return f = f > 32767 ? -65536 + f : f
    }, p = function (b, e) {
   
   
        var f = parseInt("" + b[e] + b[e + 1] + b[e + 2] + b[e + 3] + b[e + 4] + b[e + 5] + b[e + 6] + b[e + 7], 16);
        return f = f > 2147483647 ? 0 + f : f
    }, y = function (b, e) {
   
   
        return parseInt("" + b[e] + b[e + 1], 16)
    }, v = function (b, e) {
   
   
        return parseInt("" + b[e] + b[e + 1] + b[e + 2] + b[e + 3], 16)
    }, g = g || this || window, h = Object.keys || function (b) {
   
   
        var e = {
   
   }
            , f = 0;
        for (var a in b)
            e[f++] = a;
        return e.length = f,
            e
    }
             , m = (b.length,
            0), I = "", C = m; C < m + 16; C++) {
   
   
        var q = "" + b[C++] + b[C];
        q = parseInt(q, 16),
            I += String.fromCharCode(q)
    }
    if ("HNOJ@?RC" != I)
        throw new Error("error magic number " + I);
    m += 16;
    parseInt("" + b[m] + b[m + 1], 16);
    m += 8,
        r = 0;
    for (var w = 0; w < 4; w++) {
   
   
        var S = m + 2 * w
            , R = "" + b[S++] + b[S]
            , x = parseInt(R, 16);
        r += (3 & x) << 2 * w
    }
    m += 16,
        m += 8;
    var z = parseInt("" + b[m] + b[m + 1] + b[m + 2] + b[m + 3] + b[m + 4] + b[m + 5] + b[m + 6] + b[m + 7], 16)
        , O = z
        , E = m += 8
        , j = v(b, m += z);
    j[1];
    m += 4,
        i = {
   
   
            p: [],
            q: []
        };
    for (var A = 0; A < j; A++) {
   
   
        for (var D = l(b, m), T = m += 2 * D[0], $ = i.p.length, P = 0; P < D[1]; P++) {
   
   
            var U = l(b, T);
            i.p.push(U[1]),
                T += 2 * U[0]
        }
        m = T,
            i.q.push([$, i.p.length])
    }
    var _ = {
   
   
        5: 1,
        6: 1,
        70: 1,
        22: 1,
        23: 1,
        37: 1,
        73: 1
    }
        , k = {
   
   
        72: 1
    }
        , M = {
   
   
        74: 1
    }
        , H = {
   
   
        11: 1,
        12: 1,
        24: 1,
        26: 1,
        27: 1,
        31: 1
    }
        , J = {
   
   
        10: 1
    }
        , N = {
   
   
        2: 1,
        29: 1,
        30: 1,
        20: 1
    }
        , B = []
        , W = [];

    function F(b, e, f) {
   
   
        for (var a = e; a < e + f;) {
   
   
            var d = y(b, a);
            B[a] = d,
                a += 2;
            k[d] ? (W[a] = u(b, a),
                a += 2) : _[d] ? (W[a] = s(b, a),
                a += 4) : M[d] ? (W[a] = p(b, a),
                a += 8) : H[d] ? (W[a] = y(b, a),
                a += 2) : J[d] ? (W[a] = v(b, a),
                a += 4) : N[d] && (W[a] = v(b, a),
                a += 4)
        }
    }

    return K(b, E, O / 2, [], e, f);

    function G(b, e, f, a, c, l, m, I) {
   
   
        null == l && (l = this);
        var C, q, w, S = [], R = 0;
        m && (C = m);
        var x, z, O = e, E = O + 2 * f;
        if (!I)
            for (; O < E;) {
   
   
                var j = parseInt("" + b[O] + b[O + 1], 16);
                O += 2;
                var A = 3 & (x = 13 * j % 241);
                if (x >>= 2,
                A < 1) {
   
   
                    A = 3 & x;
                    if (x >>= 2,
                    A > 2)
                        (A = x) > 10 ? S[++R] = void 0 : A > 1 ? (C = S[R--],
                            S[R] = S[R] >= C) : A > -1 && (S[++R] = null);
                    else if (A > 1) {
   
   
                        if ((A = x) > 11)
                            throw S[R--];
                        if (A > 7) {
   
   
                            for (C = S[R--],
                                     z = v(b, O),
                                     A = "",
                                     P = i.q[z][0]; P < i.q[z][1]; P++)
                                A += String.fromCharCode(r ^ i.p[
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值