认真往下看,保证这篇文章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识别平台
提示:仅仅为了分享,无其余商业用途,有问题的小伙伴可以私信讨论。
重要的事儿说三遍 :若是侵权请联系作者删,若是侵权请联系作者删,若是侵权请联系作者删。