新版网易全套识别验证

发布时间:2024年01月17日

认真往下看,保证这篇文章B格拉满!!!!

距离上次版本更新已经过去好久了,当时只做了滑块,后面朱哥发了一套网易完整版的给我,完事儿也没来得及去看就更新了。

先盘点一下这次更新都做了哪些操作。

1 :v2/getconf包多了个dt参数,这个在后期也会用到,pn值在生产d,b包的请求参数时也会用到。

2:v3/get包中fp,cb,ac_token值。一个一个来看

hock_fp:在事件监听断点下打上script断点先,然后hock执行下就很方便看了。

(function() {
    Object.defineProperty(window, 'gdxidpyhxde', {
		set: function(val) {
				debugger;
				return val;
		}
    });
})();

?fp的生产其实也有两个关键点: h为网站主域名,这个fp值也是不同的,wR方法下为生产逻辑。

?cb:都是32位字符串生产加密的,不过wV方法不同,这个的话自己跟进去看看就行。

cb的生产扣完也有点多。

function generate_cb(){
    window = global;

    function uuid(x, Z) {
        var J = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"['split']('');
        var v = [];
        var H = void 0;
        if (Z = Z || J["length"], x) {
            for (H = 0; H < x; H++) {
                v[H] = J[0 | Math["random"]() * Z];
            }
        } else {
            var h = void 0;
            for (v[8] = v[13] = v[18] = v[23] = '-', v[14] = '4', H = 0; H < 36; H++) {
                if (v[H]) {
                } else {
                    h = 0 | 16 * Math['random'](), v[H] = J[19 === H ? 3 & h | 8 : h];
                }
            }
        }
        return v["join"]('');
    }

    function toByte(C) {
        return C < -128 ? toByte(256 + C) : C > 127 ? toByte(C - 256) : C;
    }

    function stringToBytes(C) {
        C = window["encodeURIComponent"](C);
        for (var Q = [], I = 0, q = C['length']; I < q; I++) {
            if ('%' === C["charAt"](I)) {
                if (I + 2 < q) {
                    Q["push"](H('' + C["charAt"](++I) + C['charAt'](++I))[0]);
                }
            } else {
                Q["push"](toByte(C["charCodeAt"](I)));
            }
        }
        return Q;
    }

    let __SEED_KEY__ = 'fd6a43ae25f74398b61c03c83be37449';

    function K() {
        for (var nT = [], nm = 0; nm < 4; nm++) {
            nT[nm] = toByte(Math["floor"](256 * Math['random']()));
        }
        return nT;
    }

    function Q(nT) {
        var nm = [];
        if (!nT['length']) {
            return nb(64);
        }
        if (nT["length"] >= 64) {
            return nT["splice"](0, 64);
        }
        for (var nX = 0; nX < 64; nX++) {
            nm[nX] = nT[nX % nT["length"]];
        }
        return nm;
    }

    function xor(C, Q) {
        return toByte(toByte(C) ^ toByte(Q));
    }

    function xors() {
        for (var C = arguments["length"] > 0 && void 0 !== arguments[0] ? arguments[0] : [], Q = arguments['length'] > 1 && void 0 !== arguments[1] ? arguments[1] : [], I = [], q = Q['length'], W = 0, U = C["length"]; W < U; W++) {
            I[W] = xor(C[W], Q[W % q]);
        }
        return I;
    }

    function n8() {
        var nT = stringToBytes(__SEED_KEY__);
        var nm = K();
        nT = Q(nT);
        nT = xors(nT, Q(nm));
        nT = Q(nT);
        return [nT, nm];
    }

    var nr = function () {
        function nT(nm, nX) {
            var nC = [];
            var nQ = !0;
            var nI = !1;
            var nq = void 0;
            try {
                for (var nW, nl = nm[Symbol["iterator"]](); !(nQ = (nW = nl["next"]())['done']) && (nC['push'](nW["value"]), !nX || nC["length"] !== nX); nQ = !0) {
                    ;
                }
            } catch (ne) {
                nI = !0;
                nq = ne;
            } finally {
                try {
                    if (!nQ && nl["return"]) {
                        nl["return"]();
                    }
                } finally {
                    if (nI) {
                        throw nq;
                    }
                }
            }
            return nC;
        }

        return function (nm, nX) {
            if (Array["isArray"](nm)) {
                return nm;
            }
            if (Symbol["iterator"] in Object(nm)) {
                return nT(nm, nX);
            }
            throw new TypeError("Invalid attempt to destructure non-iterable instance");
        };
    }();

    function S(C) {
        return C['map'](function (Q) {
            return V(Q);
        })["join"]('');
    }

    function V(C) {
        var Q = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
        return '' + Q[C >>> 4 & 15] + Q[15 & C];
    }

    function intToBytes(C) {
        var Q = [];
        Q[0] = toByte(C >>> 24 & 255);
        Q[1] = toByte(C >>> 16 & 255);
        Q[2] = toByte(C >>> 8 & 255);
        Q[3] = toByte(255 & C);
        return Q;
    }

    function j(C) {
        return S(intToBytes(C));
    }

    function genCrc32(C) {
        for (var Q = [0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918000, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117], I = 4294967295, q = 0, W = C['length']; q < W; q++) {
            I = I >>> 8 ^ Q[255 & (I ^ C[q])];
        }
        return j(4294967295 ^ I);
    }

    function copyToBytes(C, Q, I, q, W) {
        for (var U = 0, N = C["length"]; U < W; U++) {
            if (Q + U < N) {
                I[q + U] = C[Q + U];
            }
        }
        return I;
    }

    function q(nT) {
        if (!nT["length"]) {
            return nb(64);
        }
        var nm = [];
        var nX = nT["length"];
        var nC = nX % 64 <= 60 ? 64 - nX % 64 - 4 : 128 - nX % 64 - 4;
        copyToBytes(nT, 0, nm, 0, nX);
        for (var nQ = 0; nQ < nC; nQ++) {
            nm[nX + nQ] = 0;
        }
        copyToBytes(intToBytes(nX), 0, nm, nX + nC, 4);
        return nm;
    }

    function X(nT) {
        if (Array["isArray"](nT)) {
            for (var nm = 0, nX = Array(nT["length"]); nm < nT['length']; nm++) {
                nX[nm] = nT[nm];
            }
            return nX;
        }
        return Array["from"](nT);
    }

    function W(nT) {
        if (nT['length'] % 64 !== 0) {
            return [];
        }
        for (var nm = [], nX = nT['length'] / 64, nC = 0, nQ = 0; nC < nX; nC++) {
            nm[nC] = [];
            for (var nI = 0; nI < 64; nI++) {
                nm[nC][nI] = nT[nQ++];
            }
        }
        return nm;
    }

    function n0(nT, nm) {
        if (!nT["length"]) {
            return [];
        }
        nm = nJ(nm);
        for (var nX = [], nC = 0, nQ = nT["length"]; nC < nQ; nC++) {
            nX['push'](nv(nT[nC], nm));
        }
        return nX;
    }

    function n1(nT, nm) {
        if (!nT["length"]) {
            return [];
        }
        nm = toByte(nm);
        for (var nX = [], nC = 0, nQ = nT['length']; nC < nQ; nC++) {
            nX["push"](xor(nT[nC], nm++));
        }
        return nX;
    }

    function n2(nT, nm) {
        if (!nT["length"]) {
            return [];
        }
        nm = toByte(nm);
        for (var nX = [], nC = 0, nQ = nT['length']; nC < nQ; nC++) {
            nX['push'](xor(nT[nC], nm--));
        }
        return nX;
    }

    function n3(nT, nm) {
        if (!nT["length"]) {
            return [];
        }
        nm = toByte(nm);
        for (var nX = [], nC = 0, nQ = nT["length"]; nC < nQ; nC++) {
            nX["push"](shift(nT[nC], nm));
        }
        return nX;
    }

    function n4(nT, nm) {
        if (!nT['length']) {
            return [];
        }
        nm = nJ(nm);
        for (var nX = [], nC = 0, nQ = nT['length']; nC < nQ; nC++) {
            nX["push"](nP(nT[nC], nm++));
        }
        return nX;
    }

    function shift(C, Q) {
        return toByte(C + Q);
    }

    function n5(nT, nm) {
        if (!nT["length"]) {
            return [];
        }
        nm = toByte(nm);
        for (var nX = [], nC = 0, nQ = nT["length"]; nC < nQ; nC++) {
            nX["push"](shift(nT[nC], nm--));
        }
        return nX;
    }

    function n6(nT) {
        var nm = arguments["length"] > 1 && void 0 !== arguments[1] ? arguments[1] : 0;
        return nm + 256 >= 0 ? nT : [];
    }

    let __ROUND_KEY__ = "037606da0296055c";

    function hexToByte(C) {
        C = '' + C;
        var Q = parseInt(C['charAt'](0), 16) << 4;
        var I = parseInt(C["charAt"](1), 16);
        return toByte(Q + I);
    }

    function n7(nT) {
        for (var nm = [n6, n0, n3, n1, n4, n2, n5], nX = __ROUND_KEY__, nC = 0, nQ = nX['length']; nC < nQ;) {
            var nI = nX["substring"](nC, nC + 4);
            var nq = hexToByte(nI["substring"](0, 2));
            var nW = hexToByte(nI['substring'](2, 4));
            nT = nm[nq](nT, nW);
            nC += 4;
        }
        return nT;
    }

    function shifts() {
        for (var C = arguments["length"] > 0 && void 0 !== arguments[0] ? arguments[0] : [], Q = arguments["length"] > 1 && void 0 !== arguments[1] ? arguments[1] : [], I = [], q = Q["length"], W = 0, U = C["length"]; W < U; W++) {
            I[W] = shift(C[W], Q[W % q]);
        }
        return I;
    }

    function hexsToBytes(C) {
        C = '' + C;
        for (var Q = [], I = 0, q = 0, W = C["length"] / 2; I < W; I++) {
            var U = parseInt(C["charAt"](q++), 16) << 4;
            var N = parseInt(C["charAt"](q++), 16);
            Q[I] = toByte(U + N);
        }
        return Q;
    }

    let __SBOX__ = "a7be3f3933fa8c5fcf86c4b6908b569ba1e26c1a6d7cfbf60ae4b00e074a194dac4b73e7f898541159a39d08183b76eedee3ed341e6685d2357440158394b1ff03a9004cbbb5ca7dcb7f41489a16e03dcc9c71eb3c9796685b1d01b4d56193a6e1f1a2470445c191ae49c5d82765dc82c350f263387a24a502fcbf442e2dddaad0e936d9ea22b89275307b42518fbc3a626ba806d4ecd6d725f50cc8c72fefa4551ccd6fc9b2b7ab954f815c7264c6e51f4eaf99885a79892b1b60a0b3526e57ba5d178d370958847eb9fd28f9ce0bc023f4148a2adfe632126769057043d3bd8eda0df7872629f3809ef05310e83113216afe202c460fc23e789f77d1addb5e";

    function F(nT) {
        var nm = function (nI) {
            var nq = hexsToBytes(__SBOX__);
            return nq[16 * (nI >>> 4 & 15) + (15 & nI)];
        };
        if (!nT["length"]) {
            return [];
        }
        for (var nX = [], nC = 0, nQ = nT["length"]; nC < nQ; nC++) {
            nX[nC] = nm(nT[nC]);
        }
        return nX;
    }

    let __BASE64_ALPHABET__ = "MB.CfHUzEeJpsuGkgNwhqiSaI4Fd9L6jYKZAxn1/Vml0c5rbXRP+8tD3QTO2vWyo";
    let __BASE64_PADDING__ = '7';

    function D(V, z, S) {
        var j = void 0;
        var T = void 0;
        var m = void 0;
        var X = [];
        switch (V["length"]) {
            case 1:
                j = V[0];
                T = m = 0;
                X["push"](z[j >>> 2 & 63], z[(j << 4 & 48) + (T >>> 4 & 15)], S, S);
                break;
            case 2:
                j = V[0];
                T = V[1];
                m = 0;
                X["push"](z[j >>> 2 & 63], z[(j << 4 & 48) + (T >>> 4 & 15)], z[(T << 2 & 60) + (m >>> 6 & 3)], S);
                break;
            case 3:
                j = V[0];
                T = V[1];
                m = V[2];
                X["push"](z[j >>> 2 & 63], z[(j << 4 & 48) + (T >>> 4 & 15)], z[(T << 2 & 60) + (m >>> 6 & 3)], z[63 & m]);
                break;
            default:
                return '';
        }
        return X["join"]('');
    }

    function b(V, z, S) {
        if (!V || 0 === V["length"]) {
            return '';
        }
        try {
            for (var j = 0, T = []; j < V["length"];) {
                if (!(j + 3 <= V["length"])) {
                    var m = V["slice"](j);
                    T["push"](D(m, z, S));
                    break;
                }
                var X = V["slice"](j, j + 3);
                T["push"](D(X, z, S));
                j += 3;
            }
            return T['join']('');
        } catch (C) {
            return '';
        }
    }

    function base64EncodePrivate(V, z, S) {
        var j = void 0 !== z && null !== z ? z : __BASE64_ALPHABET__;
        var T = void 0 !== S && null !== S ? S : __BASE64_PADDING__;
        return b(V, j["split"](''), T);
    }

    function aes(nT) {
        let nm = stringToBytes(nT);
        let nX = n8();
        let nC = nr(nX, 2);
        let nQ = nC[0];
        let nI = nC[1];
        let nq = stringToBytes(genCrc32(nm));
        let nW = q([]["concat"](X(nm), X(nq)));
        let nl = W(nW);
        let ne = []["concat"](X(nI))
        let ns = nQ;
        let nN = nl["length"];
        for (let nU = 0; nU < nN; nU++) {
            var na = xors(n7(nl[nU]), nQ);
            var nA = shifts(na, ns);
            na = xors(nA, ns);
            ns = F(F(na));
            copyToBytes(ns, 0, ne, 64 * nU + 4, 64);
        }
        return base64EncodePrivate(ne);
    }

    function cb() {
        var nl = uuid(32);
        return aes(nl);
    }

    return cb()
}

actoken: actoken的生产关联着d,b两个包,但是我只处理了d包。

具体的话就在这里,这个d值就是前面d包返回的第4个值,另一个字符随机生成的我就没管。

?v3/check:这个的话其实变化不大,跟原来对比的话就就只有滑块验证的时候多了一个f参数。

?滑块:

?文字:

图标:

拼图:

空间推理:

?至此完整的验证类型就弄完了,其实还差一个无感验证,那个几乎见不到就不管他了。

本想分享一下完整版的网易算法,奈何篇幅太长了,害怕影响大哥们的心情,就算了吧。?

?还没完,别着急划走,今天的主题不是玩算法!!!!!

重点是这个:图腾视觉-OCR识别平台

从今天开始图腾所有相关验证码识别都全部对外免费开放!!!!!是的免费,免费,免费。

国内所有常见的不常见的几乎都包含在内除去定制版之外》》》!

这般操作只是为了给大家提供福利,然后卷死自己,并不像群友所说的!

完事儿了哦,兄弟们。有问题可以给我留言。或者私信加我。15702312233

记得关注我们的作坊:图腾视觉开放平台-高速、稳定、易用的webapi接口调用 (现已合作大佬超乎你想象)图腾视觉-OCR识别平台

提示:仅仅为了分享,无其余商业用途,有问题的小伙伴可以私信讨论。

重要的事儿说三遍 :若是侵权请联系作者删,若是侵权请联系作者删,若是侵权请联系作者删。

文章来源:https://blog.csdn.net/qq_44657571/article/details/135651179
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。