百度翻译sign签名算法

很多小伙伴都想去爬百度翻译,然后发现sign这个js生成的值却过不了,没关系,接下来的3分钟让你轻松的完成百度sign破解

第一步还是老样子,全局查找sign,给他赋值的地方打上断点
百度翻译sign签名算法_第1张图片

我们可以清楚的看见上图sign这个值传入了一个参数,并且调用了m函数,这个a就是我们输入框的值,也就是说,这个参数把我们输入框的值传入了,进去,接下来,再去用控制台调用这个函数,看看他是否是我们要找的地方
百度翻译sign签名算法_第2张图片

通过运算结果,没错就是他了,接下来是给js代码进行分离,我们看看,这个函数最后是走什么地方结束的,断点继续更进
百度翻译sign签名算法_第3张图片
我们发现,函数最后通过p去进行赋值,并且在这里又调用了一次函数,这个地方,我们继续更进,
百度翻译sign签名算法_第4张图片

最后我们发现这个n函数是这个,现在我们东西齐全了,就可以完成参数,调用,最后在下面双手奉献上代码

function n(r, o) {
    for (var t = 0; t < o.length - 2; t += 3) {
        var a = o.charAt(t + 2);
        a = a >= "a" ? a.charCodeAt(0) - 87 : Number(a),
            a = "+" === o.charAt(t + 1) ? r >>> a : r << a,
            r = "+" === o.charAt(t) ? r + a & 4294967295 : r ^ a
    }
    return r
}
function e(r) {
    var o = r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);
    var i = null;
    if (null === o) {
        var t = r.length;
        t > 30 && (r = "" + r.substr(0, 10) + r.substr(Math.floor(t / 2) - 5, 10) + r.substr(-10, 10))
    } else {
        for (var e = r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), C = 0, h = e.length, f = []; h > C; C++)
            "" !== e[C] && f.push.apply(f, a(e[C].split(""))),
                C !== h - 1 && f.push(o[C]);
        var g = f.length;
        g > 30 && (r = f.slice(0, 10).join("") + f.slice(Math.floor(g / 2) - 5, Math.floor(g / 2) + 5).join("") + f.slice(-10).join(""))
    }
    var u = void 0
        , l = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107);
    u = null !== i ? i : (i = console[l] || "") || "";
    for (var d = u.split("."), m = Number(d[0]) || 0, s = Number(d[1]) || 0, S = [], c = 0, v = 0; v < r.length; v++) {
        var A = r.charCodeAt(v);
        128 > A ? S[c++] = A : (2048 > A ? S[c++] = A >> 6 | 192 : (55296 === (64512 & A) && v + 1 < r.length && 56320 === (64512 & r.charCodeAt(v + 1)) ? (A = 65536 + ((1023 & A) << 10) + (1023 & r.charCodeAt(++v)),
            S[c++] = A >> 18 | 240,
            S[c++] = A >> 12 & 63 | 128) : S[c++] = A >> 12 | 224,
            S[c++] = A >> 6 & 63 | 128),
            S[c++] = 63 & A | 128)
    }
    for (var p = m, F = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(97) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(54)), D = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(51) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(98)) + ("" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(102)), b = 0; b < S.length; b++)
        p += S[b],
            p = n(p, F);
    return p = n(p, D),
        p ^= s,
        0 > p && (p = (2147483647 & p) + 2147483648),
        p %= 1e6,
        p.toString() + "." + (p ^ m)
}
function mo(word) {
    var result = e(word)
    return result
}
// 沫
console.log(mo('test'))

嘿嘿,完成逆向,在这里就不加图占位置了。

你可能感兴趣的:(学生)