早在之前作者就写过一篇关于顶象的滑块验证,潦潦草草几句话就带过了。
出于互相学习的想法,给了一个大学生,奈何不讲武德把源码甩群里了,虽然在大佬们眼里不难,
不过拿着别人的东西乱传还是不太好。自认倒霉,大表哥们互相学习学习。文末作者留下还原的案
例,大表哥们可以拿去研究研究。
网址:https://www.dingxiang-inc.com/business/captcha
其实可以看到顶象官方的验证方式还是挺多的,这里说明一下,除了顶象定制版,大部分基本用官方的这一套都能行。 这里就以滑块来说一说。
具体流程:
第一次:c1请求(注册ck)
第二次:c1请求(返回有效const_id,这也就是下一步图片请求中的参数c)
第三步:https://cap.dingxiang-inc.com/api/a(获取图片以及sid等后续加密用到的值)
第四步:https://cap.dingxiang-inc.com/api/v1(验证)
这里作者提一句,一般关于顶象的东西,补环境还是来得快点,基本_dx下都包含所有的逻辑,补完套来用就好。
具体分析:
第一次c1请求:
第二次c1请求:
此处的长的Param参数跟顶象接入id,第一次返回的data有关。
具体的分析流程在index.js里,感兴趣的大表哥可以去断个点跟一跟。作者去扣过逻辑,值得注意的问题是,顶象的js每天变两次,所以要扣逻辑的话还是保存一份本地来搞,或者不刷新页面。
这里我就直接给出dom补的方案获取有效const_id
const {JSDOM} = require('jsdom');
const jsdom = new JSDOM('', {
url: "https://flights.sda.cn/login?redirect=%2F%2Fnew.sda.cn"
});
const jsdom_window = jsdom.window;
// 固定变量
/*
Date.prototype.getTime = function () {
return 1663520336000;
}
Date.now = function chen_date_now() {
return new Date().getTime();
}
Math.random = function () {
return 0.16601174644686956;
}
if (Function.prototype.originalToString == undefined) {
Function.prototype.originalToString = Function.prototype.toString;
}
Function.prototype.toString = function () {
let originalToString = this.originalToString();
if (originalToString.indexOf("this instanceof") >= 0) {
return "function F(c){var u=t[40];if(!(this instanceof F))return new F(c);this[[h,v,u].join(r[4])]=O,this[o[40]]=[],this[a[37]]=[],this[e[46]]=null,this[a[38]]=null,(0,L[i[43]])(c)&&c(D(this[n[48]],this),D(this[o[41]],this))}";
} else {
return originalToString;
}
}
*/
var _json = JSON;
function get_data(appId) {
var origin = jsdom_window.XMLHttpRequest.prototype.open;
jsdom_window.XMLHttpRequest.prototype.open = function (...args) {
args[2] = false;
this['timeout'] = 0;
return origin.apply(this, args);
}
// jsdom_window.XMLHttpRequest.prototype._send = jsdom_window.XMLHttpRequest.prototype.send;
// jsdom_window.XMLHttpRequest.prototype.send = function () {
// this._send();
// }
let data = "";
// window基础
var eventObj = {};
var window = {
"Symbol": function (a, b, c, d, e, f, g) {
return undefined;
},
"location": {
"href": "https://flights.sda.cn/login?redirect=%2F%2Fnew.sda.cn",
"protocol": "https:"
},
"Object": Object,
"Array": Array,
"encodeURIComponent": encodeURIComponent,
"document": {
"head": {
"appendChild": function () {
},
"removeChild": function () {
debugger;
}
},
"body": {
"scrollLeft": 0,
"appendChild": function (a, b, c, d, e, f, g) {
debugger;
},
"removeChild": function (a, b, c, d, e, f, g) {
debugger;
}
},
"createElement": function (a, b, c, d, e, f, g) {
if (a == 'canvas') {
return {
"getContext": function (a, b, c, d, e, f, g) {
if (a == "2d") {
return {
"fillRect": function (a, b, c, d, e, f, g) {
},
"fillText": function (a, b, c, d, e, f, g) {
},
"arc": function () {
},
"stroke": function () {
}
}
}
},
"toDataURL": function my_toDataURL() {
},
"webgl": function () {
},
"experimental-webgl": function () {
}
}
} else {
}
},
"createEvent": function (a, b, c, d, e, f, g) {
// debugger;
},
"documentElement": {
"scrollLeft": 0,
"getAttribute": function (a, b, c, d, e, f, g) {
// debugger;
}
},
"readyState": "interactive",
"addEventListener": function (a, b, c, d, e, f, g) {
eventObj[a] = b;
},
"referrer": "",
"createEvent": function (a, b, c, d, e, f, g) {
if (a == "TouchEvent") {
throw DOMException("Failed to execute 'createEvent' on 'Document': The provided event type ('TouchEvent') is invalid.");
}
debugger;
},
"implementation": {
"hasFeature": function (a, b, c, d, e, f, g) {
if (a == "MouseEvents" && b == "2.0") {
return true;
}
debugger;
}
},
"getElementById": function (a, b, c, d, e, f, g) {
debugger;
}
},
"RegExp": RegExp,
"XMLHttpRequest": jsdom_window.XMLHttpRequest,
"Date": Date,
// "_dx": {
// "inSDK": false,
// "Captcha": function (a, b, c, d, e, f, g) {
// debugger;
// },
// "UA": {}
// },
"Math": Math,
"String": String,
"isNaN": isNaN,
"outerHeight": 1040,
"innerHeight": 937,
"outerWidth": 1920,
"innerWidth": 1920,
"parseInt": parseInt,
"screenLeft": 0,
"screenTop": 40,
"encodeURIComponent": encodeURIComponent,
"localStorage": {
"getItem": function (a, b, c, d, e, f, g) {
// console.log("localStorage.getItem ", a, b, c);
return undefined;
}, "setItem": function (a, b, c, d, e, f, g) {
// console.log("localStorage.setItem ", a, b, c);
}
},
"sessionStorage": {
"getItem": function (a, b, c, d, e, f, g) {
// console.log("sessionStorage.getItem ", a, b, c)
return undefined;
},
"setItem": function (a, b, c, d, e, f, g) {
// console.log("sessionStorage.setItem ", a, b, c);
}
},
"Error": function (a, b, c, d, e, f, g) {
// debugger;
},
"Math": Math,
"Image": function (a, b, c, d, e, f, g) {
// debugger;
return {};
},
"isNaN": isNaN,
"JSON": {
"parse": function (a) {
console.log(a);
data = data + "###" + a;
var result = _json.parse(a);
return result;
}
},
"devicePixelRatio": 1,
"indexedDB": {},
"openDatabase": function (a, b, c, d, e, f, g) {
debugger;
},
"WebGLRenderingContext": function (a, b, c, d, e, f, g) {
debugger;
},
"history": {"length": 2},
"Float32Array": Float32Array,
"unescape": unescape,
"eval": eval,
"performance": {
"timing": {"domContentLoadedEventEnd": 1632072660783},
"getEntriesByName": function (a, b, c, d, e, f, g) {
debugger;
}
},
"decodeURIComponent": decodeURIComponent,
"isFinite": function (a, b, c, d, e, f, g) {
// debugger;
},
"setTimeout": function (a, b, c, e, d) {
a();
}
};
// navigator
let Navigator = function () {
}
Navigator.prototype.userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36";
Navigator.prototype.platform = "Win32";
Navigator.prototype.webdriver = false;
Navigator.prototype.deviceMemory = 8;
Navigator.prototype.hardwareConcurrency = 16;
Navigator.prototype.maxTouchPoints = 0;
Navigator.prototype.language = "zh-CN";
Navigator.prototype.productSub = "20030107";
Navigator.prototype.languages = ["zh-CN"];
Navigator.prototype.cookieEnabled = true;
Navigator.prototype.plugins = {};
window.navigator = new Navigator();
let Screen = function () {
}
Screen.prototype.width = 1920;
Screen.prototype.height = 1080;
Screen.prototype.availWidth = 1920;
Screen.prototype.availHeight = 1040;
Screen.prototype.colorDepth = 24;
window.screen = new Screen();
with (window) {
//index.js
}
var _Format_2176 = {
"appId": appId,
"timeout": 3000,
"iframeUrl": "https://cdn.dingxiang-inc.com/ctu-group/constid-js/messager.html",
"iframeOrign": "https://cdn.dingxiang-inc.com"
}
window._dx._ConstID_Private(_Format_2176, function () {
});
return data;
}
var data = get_data('c08872185674ff1787fead6dbac18146');
console.log(data);
有喜欢扣js的大表哥可以参考这个去扣c1两个包中的Params,一长一短,兄弟们太短了可不太行哦,
拒绝颜色从我做起,
哈哈哈,正事要紧,需要的话看看下面这个哇。
var h={
"lid": "a008fb6cd80be29981f8fec28e8edfb1c68e00dfc82c6281b4b898d05e1db89d6543e0dc",
"lidType": 1,
"cache": true,
"can": "981ca80af415f5c9fb420b3cf8fc233d",
"web": "e11de126215c6cca83f1fc404ed1e5e3",
"gi": "Google Inc. (NVIDIA);ANGLE (NVIDIA, NVIDIA GeForce GT 1030 Direct3D11 vs_5_0 ps_5_0, D3D11-30.0.15.1215)",
"pr": 1,
"dm": 8,
"cc": "unknown",
"hc": 12,
"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36",
"np": "Win32",
"lug": "zh-CN",
"ce": 1,
"ts": "0;false;false",
"timezone": "Asia/Shanghai",
"to": -480,
"ls": 1,
"ss": 1,
"ind": 1,
"ab": 0,
"od": 1,
"cd": 24,
"res": "1920;1080",
"ar": "1920;1050",
"vs": "1920;150",
"ws": "1920;1050",
"rp": "PDF Viewer;Chrome PDF Viewer;Chromium PDF Viewer;Microsoft Edge PDF Viewer;WebKit built-in PDF",
"adb": false,
"hl": 3,
"cl": 17,
"st": 41904,
"ct": 11290,
"hlb": false,
"hll": false,
"hlo": false,
"hlr": false,
"db": 1,
"sm": 0,
"appKey": "dxdxdxtest2017keyc3e83b6940835"
};
var result='2940#X8m8rKK15ojqNsAvpfPzCkF8QntgdepvonAMrUkJpZNKLsRTqfwSLpw40SE29JDao4JVLsG4qbzCVsi17ZwcdkAv0ZzSLUG6G5pbEstFqQlKdHgYXXQLnhWjuR8KXAZdH2IXjFUtosi7QFFex+UyQX8XiFsgGuRto0ilSAegGivEGmhY+SS/E0tluFhYWAsVJ02/SCRgWzxqmFnuXYrafr4cTd9HUroqDLoiUX5gjRCkk87Qjj8PfaXNa6uTO8myaRXufuZMmrm0rtMor5+jiYVQsIwe8NrZl2ajTXyi+I4SONhAO2yStU4jTXyi+I4SOgTjY8xSMNCz8tLeYYNZlKQjiIcjO/6cT/FPkndelgNcMNac82qQiK/eT/ZZeh0ciVD38gJcMNac7iaum//uOJ/uOfac76hjm2X17ZPjr5p8YXX1XTZkXW1MY8XUT1MoT343eo9QwJdpw/8iXX4l3uaV6/nuY2m79+jm5bzGQQALtlkil5hMzqKFxBYOb7FgEBLfcosEVKFZBWkAo4ENrshFebHC9HwWzJN4gORjxohF7xibEspISx1zCqByeFE9K4D9AHYkBQqOBvBVAGihVkzsxIAorGlISxigEsqn0viAyGFrrJJ1bvNtCGhjeOqSEr2XjY4vUToCX98b/NmhWXVXj62B8LTojV/JDDCGnc3UXXfLfN/LUwXFXmRRxbRNwUGJ7fFEL0NfSg6yts0JBmXX1p1dGqvaKRdmq8P3L8c85t7s/v7pLE8ljQam38XvKV6yKB7WFkqb3rX1s647sR8B32X1pjxdXCrjuXXPud584uOoDT/XmEyTIhyoqMfXmxdtcehU0MWXmtvLOYnqIL8fXm1QdGevqbPw200vKWsw2B0sqTyX33Xv3PxjuPcwfauTm24H6VX+XXgDDY2DAmWnEmL5lXCnKmWkXmmS8yTSjMaGjXaqjrOqXX4SPXmcORrG+6n+PhgC1T3LsL2bhzfSjVoSvt7eYP2shwu8nLVpU6ZGvTynaY5BvAonHXQsIaXEFh57fd/yYma6ZY/QFdCbi82Y1TWUj6oU/hrWXyQgPh5x3937h2aIsEfBOLu6kRoLHN/4XX07921Tu4omycphXC5XmCujfMPTA83Xm5FrLiq/xOnYXXxLFLxuJdcBDzu7X2XigGicgK0r5UFS588XYBnyTFRtoCRoTP2Im8XsuDVTHabcXNnUHTr1XXpjRI2Qr5fI+gtQq2WXYKRvd4URAbHXd4s/YXX1XTIjXWu7Y8X1T1qQT3W1YrXx+Cc1vEr6Rz3F6E2X/E5PYVINTrMqhX4CYmOUIXf4W3Q/fuxPmNo1R6S=';
function hc(i) {
for (var a = [3, 2, 4, 0, 1], u = 0; true; ) {
switch (a[u++]) {
case 0:
for (var c = 0; c > c),
a += String['fromCharCode']((i['charCodeAt'](f) ^ s) & 255)
}
return a
},
function(n) {
for (var e = '', i = 5, a = 18657, u = 0; u > i) + (c > s) + (v > s),
a += String['fromCharCode']((i["charCodeAt"](v) ^ f) & 255)
}
return a
},
function(e) {
for (var i = "vWS3", a = '', u = 2, c = 5, s = 0; s > c) + (f > a) + (s = h["length"] && (j = 0),
l += String["fromCharCode"](g & 255)
}
continue
}
break
}
},
function(e) {
for (var i = '', a = 72439, u = 0; u = s["length"] && (f = 0),
c += String["fromCharCode"](d & 255)
}
continue;
case 5:
var l = "絷"
, j = "?"
, h = "?"
, p = "?";
continue
}
break
}
},
function(r) {
for (var i = "n", a = "g", u = "", c = 115, s = 6, f = 0; f > s ^ r["charCodeAt"](f)) & 255)
}
return u
},
function(i) {
for (var a = 'c', u = "h", c = "a", s = "d", f = "A", v = "", d = 241, l = 0; l > u) + (f > a ^ e["charCodeAt"](u)) & 255)
}
return r
},
function(i) {
for (var a = '', u = 167, c = 3, s = 4, f = u, v = 0; v > s),
a += String["fromCharCode"]((i["charCodeAt"](v) ^ f) & 255)
}
return a
},
function(e) {
for (var i = "len", a = "", u = 98357, c = 0; c > a) + (s > u ^ e["charCodeAt"](c)) & 255)
}
return i
},
function(i) {
for (var a = [3, 1, 2, 4, 0], u = 0; true; ) {
switch (a[u++]) {
case 0:
return f;
case 1:
var c = 143;
continue;
case 2:
var s = c;
continue;
case 3:
var f = "";
continue;
case 4:
for (var v = 0; v > u) + (f > c),
a += String["fromCharCode"]((i["charCodeAt"](f) ^ s) & 255)
}
return a
},
function(i) {
for (var a = [3, 2, 4, 0, 1], u = 0; true; ) {
switch (a[u++]) {
case 0:
for (var c = 0; c > d) + (s > o & Math['pow'](2, (typeof i === 'undefined' ? 1 : i) * 8) -1
};
function A(t) {
for (var r = '', i = 0; i > 2,
d = (c & 3) > 4,
v = (s & 15) > 6,
h = f & 63,
isNaN(s) ? v = h = 64 : isNaN(f) && (h = 64),
g = g + u.charAt(l) + u.charAt(d) + u.charAt(v) + u.charAt(h);
return "2941#"+g
};
gRYsJOBH=function(i) {
var a = 'le'
, u = 'th'
, c = "e"
, j = "6e,76,69,73,"
, h = "49,5a,55,46,"
, p = "53,78,6c,65,"
, g = "32,4d,74,77,"
, w = "56,39,4e,64,"
, m = "67,62,4b,42,"
, y = ''
, b = 30
, S = 0;
for (var E in i) {
var _, x = S % b, A = k_function_list[x], T = (0, C['stringifyJSON'])(((_ = {})[E] = i[E], _));
y += O(x + 1, A(T['slice'](1, -1))),
S++
}
return end_code(y, "XmYj3u1PnvisIZUF8ThR/a6DfO+kW4JHrCELycAzSxleoQp02MtwV9Nd57qGgbKB=")
};
var o=[
"",
57484,
1,
3,
4,
0,
"object",
"S",
"te",
"n",
"ma",
"??",
"??????????????",
"e",
"?",
"p",
"ude9fudefcude88",
"pa",
":",
"r",
"lp",
"d",
"fillRec",
"m",
"f",
"j",
"y",
"t",
"l",
"hardwareCon",
"htt",
"ng",
"ins",
"6e",
"windowSi",
"6f",
"o",
"5,58",
"1,58",
",45,",
"udeb0udee6ude83udef1ude85udee0",
"udec9udeb1ude9audeefude81udee8",
"eBuff",
"Loc",
"pus",
"h",
"_UNIFORM_VEC",
"u0019t",
"E",
"pre",
"expo",
"rts",
"?",
"a",
"s",
"u",
"a cl",
"K",
"callbac",
"da",
"__es",
"ion",
"ect",
"??????????????????????????????????",
"undefin",
"lla",
"??",
"67,65",
"udefeude91",
"v",
"b",
"bu0007",
"aW",
"Mu0005",
"nu000f",
"bu0001",
"cti",
"joi",
"pro",
"udee9ude80udeed",
"exte",
"udef8ude80udef4ude91",
"SA}u0005zv",
"DEFAULT_SE",
"_Const",
"??",
"ch",
"fr",
"g",
"udef1ude94udefa",
"de",
"eAt",
52,
"rm",
"ay",
"udeedude9fudef0ude84udeebude9fudee6ude96udef3",
"Function",
"length",
false,
"slice",
2,
"htgnel",
"udefa",
"onload",
"onerror",
"function",
"gth",
true,
"getHours",
"fromCharCode",
"th",
"c",
"ct",
5,
6,
"apply",
"prototype",
"_state",
"_value",
"gE3TKX8",
"_reason",
"defer",
"reject",
"ca",
"__esModule",
"ce",
"dnt",
"dm",
"hlb",
"udeedude9fudef0",
"??",
"^B8VL^9[",
"toString",
"?",
"=",
"push",
"pop",
"substring",
"stringifyJSON",
8,
"protocol",
"TRACK_APPID",
"//",
"u0017B2\\u00185u0007",
"https://eventreport.dingxiang-inc.com",
"call",
"asyncCounter",
"?",
"options",
7,
"ime",
"69,73,54,68,65,6e,61,62,6c,65",
"value",
"noitcnuFsi",
"promise",
"udee6ude95",
" ",
"P",
"getContext",
"si",
"ude03",
"clo",
"width",
"style",
10,
"isPointInPath",
"VX",
125,
62,
"fillText",
45,
"noitarepOetisopmoClabolg",
"beginPath",
100,
50,
"closePath",
"fill",
75,
"deviceMemory",
"geolocation",
1500,
60000,
"gps",
"ud",
"u0014",
"us",
"platform",
"64,65,",
"[X9^QR",
"67,65,74,54,69,6d,65",
"timi",
"defaultStr",
"createElement",
" ",
"adsbox",
"getElementsByClassName",
"????",
"noituloseRliava",
"availHeight",
"body",
"innerWidth",
"ze",
",7",
",4",
"2,",
"7,",
"sessionStorage",
"indexedDB",
"DateTimeFormat",
"nt",
"udefcude88udefcude8eudee7ude85",
"ude8eudee1ude93udefeudeb1uded7",
"AY_",
"BUF",
"??",
"\WY",
"B_A",
"BITS",
"]",
"~{",
"AG",
"webgl",
"en",
"4d,4",
"udeb9ude82udef4ude9budef2ude96",
"IN",
"get",
"D",
"_",
"77,",
"65,",
"clearColor",
"ge",
"58,5",
"getExtension",
"WEBKIT_EXT_texture_filter_anisotropic",
"createShader",
"useProgram",
"TRIANGLE_STRIP",
"toDataURL",
"getSupportedExtensions",
"??????????????????????????????",
"ALIASED_LINE_WIDTH_RANGE",
"getParameter",
"getContextAttributes",
"webgl max render buffer size:",
"MAX_VERTEX_UNIFORM_VECTORS",
"webgl max viewport dims:",
"MAX_VIEWPORT_DIMS",
"RENDERER",
"retemaraPteg",
"webgl vendor:",
"webgl unmasked vendor:",
"webgl unmasked renderer:",
"6a,6f,69,6e",
"~",
"V",
"67,",
"each",
"MEDIUM",
"getShaderPrecisionFormat",
"precision ",
"?",
"ight",
"udef2ude87udef3ude96udee4udeacudec9udea0udec7udeafudedb",
")$",
"refo",
"toLowerCase",
"IE",
37,
"indexO",
"o^8QW@%u0015",
"Windows",
"mac",
"Other",
"??????",
"indexOf",
"Linux",
"Android",
"availWidth",
"udeedude88udefaude9cudef3ude81udeecude8dudee3ude80udee5",
"B",
"N",
",69,70,74,5f,66,6e",
"iver",
"webdriver",
"__selenium_evaluate",
"revird",
"test",
"join",
"00000000000000000000000000000000",
"withCredentials",
"ty",
"Cann",
"the",
"?",
"O",
"sO",
"er",
"ot c",
"ns",
"u001bth",
"se",
"?",
"L",
"mix",
"checkOptions",
"domReady",
"Pro",
"epytotorp",
"epyt",
"STATE_MAP",
"???????????",
"resolve",
"data",
"64,65,74,65,63,74",
"MsqsqO",
"status",
"0",
"one",
"udefaude9fudeebudeaeudec2udea7udecaudeafudec1udeb5udec6ude84udefdudea9udec8udeafudee1ude80udeedude88",
30,
"udee8ude9audef6",
"&",
"jsonp timeout",
"ta",
"73,65,74,52,65,71,75,65,73,74,48,65,61,6",
"ha",
29,
"od",
"??",
"dataType",
"Accept",
"????",
"random",
1223,
"JSON",
"65,72,72,6f,72",
"responseText",
"type",
"method",
"headers",
"wn",
"KC$\VP",
"gh3FuX2@TR",
"udeb5ude99udeb0udeccudee4udeb8udee3ude9fudee4udecdudeb1ude99udee4ude98udec5udeecude90udeb2ude9audea5ude9fudec4ude9audeb8udee4udeb8udee4ude96udeca",
"J",
"Invalid JSON: ",
"otor",
"obj",
"????????????????????????",
"???",
"i",
"rebm",
"4a,53,4f,4e,2e,73,74,72,69,6e,67,69,66,79",
16,
"cal",
"toJSON",
"[object Array]",
",n",
"[",
"{n",
"Object",
35,
"set",
365,
"toUTC",
60,
"(?:(?:=([^;]*))|;|$)",
"getTime",
"; secure",
"CJ",
"name",
"udeeeude9audee8ude81udeefude88udee1ude87udefeudeb4udee7udea8udee6",
"replace",
"flnFdBu0010p~qnMyu0007u000bu001eDlnFdBu0010p~qnMyu0007u000bu001eu001c",
"\",
"0u0018",
"{i",
"Mu0007",
"u000fu0007",
"^j",
"noitcnuf",
"undefined",
"undef",
"74,6f,4a,53,4f,4e",
"VB:Y",
"[n",
"7b",
"???",
"remove",
"_M",
"tStr",
"5",
"6",
",",
"Y[:",
"\V"T",
"???????",
"constructor",
"expor",
32,
909522486,
1549556828,
"concat",
512,
9,
1732584193,
606105819,
1200080426,
1473231341,
12,
17,
1990404162,
165796510,
38016083,
14,
11,
1530992060,
13,
76029189,
640364487,
15,
21,
2054922799,
"charCodeAt",
"MY2P^^8P\",
"YG&Y",
"ri",
"languag",
"udef3ude96",
"?????",
"FP",
"udea0",
"userAgent",
"supportLocalStorage",
"noituloser",
"availResolution",
"viewportSize",
"startTime",
"navigator",
"support",
"????",
"end",
"nd",
"74,",
"initialize",
"shift",
"70,",
"????????",
"ys",
"exports",
47,
"St",
"hasLiedResolution",
"hasLiedLanguages",
"hasLiedOs",
22,
3421,
"cha",
64,
"charAt",
"{X8FL",
"error",
"^(\w+?):",
"$)troba|tuoemit(",
"appId",
"KC$\VP?",
"encode",
"udef0ude99udee1",
"_constID_SaaS",
"then",
"version",
"char",
"X{_",
"ar",
"??",
44,
"udef1ude94udefaude9dudee9ude81",
255,
237,
"63,68,61,72,43,6f,64,65,41,74",
171,
"deA",
2372,
"[_7G{X2PyC",
"At",
5547,
256,
"le",
"66,72,6f,6d,43,68,61,72,43,6f,64,65",
167,
72439,
"???????????",
"???"
];
var n=[
"65,78,70,6f,72,74,7",
"ob",
"ct",
0,
256,
54453,
2,
"k",
"y",
"len",
"udef1",
"ring",
"toS",
"at",
"j",
"w",
"??",
"??",
"t",
"ra",
"cr",
"te",
"option",
"op",
"s",
"",
"e",
"C",
"o",
"er",
"performa",
"W",
"h",
"7,4c,52,65",
"T",
"55,5",
"ude97udeefudec3udef3udedfudeee",
"ge",
"udeed",
"nu",
"ad",
"f",
"c",
"script_func",
"d",
"cach",
"get",
"?",
"def",
"pro",
"lba",
"out",
"ude9a",
"rs",
"JR&Y",
"udeeeudeb5ude9eudeb3udeeeuded1ude8dudee9udec2udebeude97",
"i",
"\",
"?",
"{",
"ca",
"g",
"bu0000",
"nu0007",
"MQ",
"0S",
"X2PyC",
"on",
"lengt",
"__e",
"6",
"ect",
"appl",
"operty",
"udeffude9b",
"to",
"tacno",
"ode",
"^E9",
"charCod",
"eAt",
"Co",
"ar",
"n",
"l",
16,
"exports",
"5f,5f,65,73,4d,6f,64,75,6c,65",
"prototype",
"call",
"__esModule",
"",
"flatten",
36,
"length",
"indexOf",
"ude94",
"ude81",
32,
"random",
"??",
true,
"function",
"getMonth",
"udebd",
"",
"72,65,6a",
"61,6",
"c,6c",
"itself.",
"re",
"sh",
1,
4,
"evloser",
"push",
"udec2udeadudec3ude85udef0ude9cudefaude93udeffude93udef6ude92",
"_state",
"gD"TLR",
"isPending",
"then",
"udee9ude86uded5udea1uded3udebauded4udeb3",
"esimorp",
5,
"mis",
"61,",
"lu",
"u",
"KEY_MAP",
"hc",
"hlr",
"np",
"vs",
"th",
"\+",
"join",
"unparam",
"p",
"&",
"parseJSON",
39,
7,
"^http",
"???????",
"ime",
"ll",
"defer",
"srotceted",
"yByek",
"a",
3,
"value",
"can",
"rgb(255,255,0",
"7",
"A",
"P",
"ne",
"2d",
"evenodd",
"textBaseline",
"alphabetic",
"#f60",
"18pt Arial",
"rgb(255,0,255)",
"PI",
")552,0,552(bgr",
"arc",
75,
"export",
"devicePixelRatio",
"defaultStr",
"isFunction",
"getCurrentPosition fail",
"74,4e,",
"htgneLeikooc",
";",
"domContentLoadedEventEnd",
"b",
"as",
"stropxe",
"plugins",
"name",
"\^ ",
"72,65,6d,6f,76,65,43,68,69,6c,64",
"colorDepth",
"clientHeight",
"outerWidth",
"tN",
"0,",
"2,",
"4,",
"dy",
"addBehavior",
"udef2ude82udee7ude89udecdudeacuded8udeb9udedbudebaudec9udeac",
"timezone",
"TouchEve",
"57,65,62,4",
"e,49",
"udeedude84udeebude85udeb8udece",
"ati",
"attrVer",
"IA",
"_R",
"GE",
"MAX_COMBINED_TEXTURE_I",
"N",
"?????????",
"canvas",
"FER",
",54,",
"4,52",
"udec7udefcude81",
"bu",
"Da",
"???",
"AL",
"pu",
"tP",
"ame",
"ter",
"STEN",
"udeeb",
"V",
"R",
"e,",
"ME",
"62,",
"LEQUAL",
",53,",
"ARRAY_BUFFER",
"VERTEX_SHADER",
"compileShader",
"FLOAT",
"no",
"???????????",
"???",
"MAX_RENDERBUFFER_SIZE",
"webgl max texture size:",
"getParameter",
"udeeaude8fudeedude8audee6udec6udeb4uded1udebfudedbudebeudeccudea9udedbudee1",
"webgl stencil bits:",
"oru0014rth2PZB1jJR8Q]E3Gg^8SW",
"UNMASKED_RENDERER_WEBGL",
"cis",
"LOW",
"precision",
" shader ",
"toLowerCase",
"m",
"her)",
"$",
"[E?ZK",
"test",
"udeeeude9budef9ude8audefeude8c",
"substr",
"MY2P^",
"de",
"?",
"_R"xYC5]nV:@]",
"WindowsPhone",
"win",
"wC>PJ",
"maxTouchPoints",
"???????????",
"Linux",
"69,6e,64,65,78,4f,66",
"ipod",
"O^8",
"swodniW",
"]",
"screen",
false,
"https",
8,
"r",
"[LX",
"5f,5f,77,65,62,64,72,69,76,65,72,5f,73,63,72",
"rtsbu",
"callPhantom",
"5f,73,65,6c,65,6e,69,75,6d",
"etaulave_revirdbew__",
"__fxdriver_evaluate",
"getAttribute",
"userAgent",
27,
"je",
"per",
"udef0ude95udee7ude80udee5udeaaudedaudeaeudec7udea8",
"udec6udeb5",
"??",
33,
"getStat",
"L",
"?",
"setState",
6,
"Key",
"] is not found!",
"??????",
"map",
"scene",
"C7G",
"HE3DMR%A|X8P",
"6d,65,73,73,61,67,65",
"udef8ude8audef8ude97udee5",
"?????",
"status1: -3",
"\R"P[C9",
"type",
"STATE_MAP",
"server",
"udeefude8audefbude8eudeebude98udeecudea8udec7udea9udecc",
"resolve",
"events",
"emit",
"???",
"diLteg_",
"gh3FuX2@TR",
"cal",
"u0007",
"udee8",
"udef6",
"ude9f",
"method",
"??????????",
"data",
"52,65,71,75,65,73,74,20,45,72,72,6f,72,20",
"onload",
"6f,6e,72,65,61,64,79,73,74,61,74,65,63,68,61,6e,67,65",
"udeefude8audeebude8fudef6udea5uded1udeb0udec4udea1",
"withCredentials",
"credentials",
"headers",
"$)TEG|DAEH(^",
"?",
"??",
"??",
"70,61,72,73,65,4a,53,4f,4e",
30,
"udeeaudec7udef8uded0udeefudeceudefeudea2udec6udeefudeb3uded7udefcuded4udeebuded1ude8dudea3udeffude9budeb0udeccudee5udecdudef2udec8ude93udef6udeb3",
"rdu0019{",
"??",
"74,6f,",
"const",
" ",
"\r",
"0000",
"toString",
"null",
"[]",
"[n",
",",
": ",
"E",
"?",
37,
"hasOwnProperty",
"filter",
"htgnel",
"remove",
"set",
"??????",
"??",
"7Q",
"0i",
"fS",
"^R",
"jo",
"constructor",
"fun",
"undefined",
"udee8ude86udee2ude87udee1ude88udee6ude83udee7",
"udef2ude90udefaude9fudefcude88",
"2",
"[",
":",
"",
"ng",
"[_7G{",
"K",
43,
"proto",
"ha",
"options",
"K_9GLR8",
"5",
"8",
"init",
"promise",
"tot",
"ype",
"ts",
"fromCharCode",
65535,
"concat",
9,
1732584194,
271733879,
680876936,
389564586,
17,
12,
11,
22,
20,
701558691,
10,
14,
1019803690,
1926607734,
722521979,
421815835,
995338651,
198630844,
21,
1700485571,
15,
1560198380,
"??",
"./",
"63,6f,6f,6b,69,65,45,6e,61,62,6c,65,64",
"touch",
"udefcude98udefaude96udef9ude9audef1",
"webgl",
"uct",
"65",
"Extends",
"apply",
"68,61,73,4f,77,6e,50,72,6f,70,65,72,74,79",
"__proto__",
"isArray",
"[object Function]",
"__esModul",
"ri",
"reggubed",
18,
"charAt",
"???????????",
"????????????",
54,
"??????",
"????????????",
"_constID_params",
"RVER",
"[X8FL~u0012",
".",
"At",
"deA",
2941,
"charCodeA",
29111,
255,
621,
115,
143,
"charCodeAt",
"Code",
"?????????",
"po",
"62,73,32",
"bss"
];
var u=[
"",
4,
0,
2,
56989,
"???????",
"amd",
"e",
"isArr",
"ude9d",
"udefe",
"subst",
"h",
"udef2ude90udefa",
"g",
"m",
"len",
"trin",
"?",
"b",
"n",
"v",
"x",
"z",
"66,69,6c,6c,53,74,79,6c,",
"fil",
"l",
"1",
"r",
"??????????",
"d",
"fa",
"a",
"t",
"j",
"bo",
"p",
"nt",
",6e,64,65,",
"54,4",
"udee3udebcudeecude83udef0ude99",
"??????",
"on",
"T_",
"et",
"M",
"O",
"W",
"R",
"outerHe",
"fxi",
"x|Ot",
"dOs",
"one",
"V",
"udeca",
"75,6e,64,65,66,69",
"%",
"expo",
"ass ",
"s",
"ude9audec9udebdudedcudeae",
"QY",
"?SA}u0005z",
"Modu",
"??",
"w",
"o",
"c",
"nu0017",
"fu0004",
"dB",
"u0001Q",
"^u0007",
"ca",
"70,72,6f,74,6f,74,79,",
"i",
"ce",
"hasOwnPr",
"ext",
"le",
"prototyp",
"4d,73,71,73,7",
"~u0012",
"ID_Saa",
"S",
"ng",
"deA",
"th",
1,
false,
"hasOwnProperty",
"???",
"udee9",
"???",
true,
"call",
"]",
"?????",
"6c,65,6e,67,74,68",
"udef1ude94udefaude9dudee9ude81",
"random",
"push",
"length",
"udec2udeabudec6udea1",
"concat",
"udefaude9fudeebudeb8udeddudebeuded1udebfudedbudea8",
"join",
"ot",
"resol",
"udec2ude9dudef8ude8budec6udea9udecdudeb8uded4udeb1",
"ve",
"?",
"?",
"_onRejected",
"_reason",
"resolve",
"apply",
"reject",
"_onFulfilled",
"prototype",
"slice",
"HE9AWC/E]",
"finally",
"en",
3,
"43,61,6e,6e,6f,74,20,63,61,6c,6c,20,61,20,63,6c,61,",
"defaultNum",
"udefcude98udefa",
"cc",
"gi",
"od",
"LD",
"48,41,53,48,5f,4d,41,50",
"?",
"[object Array]",
"undefined",
"???",
"__esModule",
6,
"test",
"REPORT_SERVER",
"/udid/c1",
"LID_KEY",
"_dx_uzZo5y",
8,
"61,73,79,6e,63,43,6f,75,6e,74,65,72",
"data",
"ti",
"options",
"UV&",
"include",
"u",
"asyncCounter",
"value",
" ",
"q",
"ud83d",
"ath",
20,
"#069",
"font",
"11pt no-real-font-123",
15,
"udeefude88udeeaude8budea3ude92udea2ude90udebcude9cudeaeude9eudeaaude86udea6ude96udebaude9audeaaude84udeb6ude9f",
50,
"PI",
"rgb(0,255,255)",
"YE5",
75,
100,
"elytSllif",
"toDataURL",
"udef9ude9cudefaude9budeeeude82udef6udea5uded1udea3",
"hardwareConcurrency",
"currency",
"muNtluafed",
"lo",
"getCurrentPosition",
"getCurrent",
"geolocation",
"getCurrentPosition unavailable",
"userAgen",
"userAgent",
"systemLanguage",
"nce",
"exports",
"um",
"udeeeude9budeebude9budef4ude86udef2udea1udec4udeb7udec4udeadudec2udeacudeffude8budee4ude96udef7ude90udef5",
"body",
"supportOpenDatabase",
"resolvedOptions",
"maxTouchPoints",
"createEvent",
"72,69,6e,6",
"74",
"iment",
"BUF",
"ude98udea3uded5udeb4udec6udebf",
"ARR",
"FER",
"er",
"AN",
"am",
"getParamet",
"ion",
"7,43,6f,6e",
"exper",
"al-we",
"webglFP",
"enab",
"tE",
"PO",
"HPL",
"pus",
"K",
"B",
"HB%",
"depthFunc",
"EXT_texture_filter_anisotropic",
"getParameter",
"STATIC_DRAW",
"FRAGMENT_SHADER",
"redahShcatta",
"linkProgram",
"vertexPosAttrib",
"numItems",
";",
"webgl antialiasing:",
"webgl green bits:",
"GREEN_BITS",
"webgl max combined texture image units:",
"_R"eYE7X]C3G",
"udeeaude8fudeedude8audee6udec6udeabudecaudeb2ude92udee4ude85udef7ude8eudee7ude89udeeeudeceudeb8udeddudebeudecaudea5uded7udea4ude9e",
"MAX_VARYING_VECTORS",
"webgl max vertex attribs:",
"???????????",
"udeeaude8fudeedude8audee6udec6udeabudecaudeb2ude92udee4ude81udef3ude87udee2ude9audebaudeceudeabuded3udea7uded2udea0udec5udee5ude8cudee1ude80udee7ude82udea2uded7udeb9uded0udea4uded7udeed",
"webgl red bits:",
"RED_BITS",
"getExtension",
"67,65,74,50,61,72,61,6d,65,74,65,72",
"each",
"HIGH",
"defaultStr",
"udef9ude9cudefeude8budeecude8budeeeude9c",
"innerHeight",
200,
"C",
"^(Ch",
"ra|O",
"65,78,70,6f,72,74,73",
"???????",
"TV8RMV1PK",
"denifednu",
"languages",
"5",
"in",
"f",
",6e,65,64",
"iph",
"ip",
"udee3udeac",
"h_9[]",
"msMaxTouchPoints",
"Windows",
"linux",
"indexOf",
"enohPswodniW",
"width",
"height",
"getEntriesByName",
"protocol",
"mance",
"map",
"_Selenium_IDE_Recorder",
"some",
"__selenium_unwrapped",
"Headless",
"MD3GyP3[L",
32,
28,
"udeb5uded1",
"ct",
"2,49,",
41,
"as a",
"ty",
"Sta",
"tot",
11,
"dIppa",
"STATE_MAP",
"tini",
"timeout",
"defer",
"72,65,6a,65,63,74",
10,
"server",
"appId",
7,
"I",
"???????",
"op",
"udef2ude82udef6ude9fudef0",
"udefbude9audef6ude9audef8ude99udefaude91",
"4d,73,71,73,71,4f",
"KR"fLV"P",
"parseResponse",
"back",
"0,72,6f",
"70,72,6f,78,79",
"setState",
"events",
"status2: ",
"status",
"D",
"set",
"gh3FuX2@TR",
1000,
"_",
"substring",
"ur",
"time",
"json",
30,
"method",
"application/json, text/plain, */*",
"udef0ude95udee1ude89udee6ude82",
"toString",
"75,72,6c",
"me",
300,
304,
"udeedude8cudefeude8dudee8udea2udef1udebeudef0",
"ge",
"udedeudeb1udedfudeabudeceudea0uded4udef9udeaduded4udea4udec1",
"send",
"efi",
"",
"symbol",
"JSON",
"number",
""",
"VB:Y",
"llun",
"object",
"constructor",
",74",
"_R"",
"/",
"remove",
"k",
"(?:^| )",
"; domain=",
"; path=",
"getItem",
"name",
"stringifyJSON",
"?????",
"dule",
"#u0005",
"bu0007",
"fu0005",
"#u0007",
"stri",
"\t",
"5c,22",
"null",
"lastIndex",
16,
"Y",
"HA",
"E",
",",
"6",
"then",
65535,
9,
5,
512,
1044525330,
17,
45705983,
42063,
1163531501,
1735328473,
14,
23,
1094730640,
12,
1309151649,
145523070,
"charCodeAt",
"charAt",
"to",
"ncurrency",
47,
"vas",
"udee6",
"cpuClass",
"platform",
"windowSize",
"??",
"screen",
"t^%A",
"74,",
"create",
"str",
"y",
"Cannot find module '",
"simulator",
18,
19,
21,
24,
49,
"rAt",
63,
"?",
"????",
"bs",
"2",
"htgnel",
"MODULE_NAME",
"odeAt",
"A",
"gth",
"66,72,6f,6d,43,68,61,72,43,6f,64,65",
"fromCharCode",
"rCo",
255,
"udefbude89udee6ude8budec8udea0udec1udeb3udef0ude9fudefbude9e",
179,
"63,68,61,72,43,6f,64,65,41,74",
"cha",
"fromChar",
"NS7SN5gd5U8ls",
891,
"pow"
];
var r=[
"je",
2333,
"",
1,
16,
",",
0,
3,
4,
"undefined",
"ude99",
"t",
"ID",
"y",
"???????????????????????????????????????????????",
"ge",
"_sta",
"n",
"s",
"pu",
"rtT",
"oun",
"udefeude9fudef1ude87",
"vas",
"fillStyl",
"p",
"tD",
"at",
"?",
"ul",
"74",
",6",
",7",
"61",
"4",
"uded6udeb8udedfudeffude89udeec",
"ude85udeebude82udee4ude8budef9",
"???",
"ZE",
"E",
"]",
"ude98",
"ude83",
"A",
"ea",
"r",
"o",
"x",
"m",
"J",
"all ",
"ctio",
"75,73",
"ude9eudeed",
"65,6e,61,62,6c,65,5",
"udef0ude99",
"l",
"asy",
"op",
"N",
"le",
"ed",
"???",
"?",
"i",
"d",
"g",
"e",
"udefeude95",
"udefcude99",
"__esModul",
"u0010u001bIu0010krICu001e*u001dEKu000bu001cDu0015~nu0002lbu0017dknGdYu000bIdkru0017dknu001aZQ8GLj*idBri\V{Syu001au0010hCu0003+u001cu0012u0015nFu0012riILE#PDQ7YKR*[M[:Iu0015b~nu0019u0007nQu0011",
"fk",
"fu0007",
"u000eQ",
"n@",
"ll",
"uded4udeb1",
"sMo",
"dul",
"70,65",
"cti",
"f",
"ude8f",
"sL",
"deAt",
"C",
"arC",
"th",
"Co",
"At",
"charC",
54453,
256,
"udef8",
"udeed",
"udef0",
"call",
true,
"tri",
"ng",
"67,65,74,4d,61,74,63,68,56,61,6c,75,65",
"??",
"randomStr",
"isFunction",
"isArray",
"udef8ude99udefaude92",
"hasOwnProperty",
false,
2,
"substr",
"random",
"length",
":",
"A promise cannot be resolved with ",
"isThenable",
"reject",
"then",
"_onFulfilled",
"flush",
"resolve",
"_state",
"gD"TLR",
"[object ",
"res",
"promise",
"defer",
"Function",
"cd",
"hlo",
"??",
"ls",
"ss",
"__esModule",
"udeedude9fudef0ude84udeebude9fudee6ude96udef3",
"und",
"h",
" ",
"push",
"subs",
"=",
"indexOf",
"stringifyJSON",
"eludoMse__",
"parseJSON",
9,
"MODULE_NAME",
"TRACK_SERVER",
"/api/webErrReport",
5,
"//",
"startT",
"v",
46,
"startTime",
"data",
"excludeKeys",
"getGroups",
"key",
"keys",
"che",
"ckC",
"asyncCounter",
"li",
"R",
2000,
"height",
"fillText",
"Cwm fjordbank glyphs vext quiz, ?",
"multiply",
50,
75,
"join",
"defaultNum",
"protocol",
"ps:",
"Position",
"c",
"???????",
"platform",
"userLanguage",
"defaultStr",
"[X9^QRu0013[YU:P\",
"?????",
"75,6d",
"????",
"a",
"plugins",
"appendChild",
"colorDepth",
"clientWidth",
"innerHeight",
"outerHeight",
"6a,6f,69,",
"73",
"exports",
"uded4udebaudeceudea2",
"udee9ude80udeedude88udef2ude9dudef3ude96uded9udebfuded9udeaaudecfudebb",
"hcuot",
"createEleme",
"[L",
"udef0ude84udee1udec1udeb7uded2",
"udecdudea4udec2udeadudedfudeb2",
"???????????????????????????????????",
"_R"`V^0ZJZu001aZ[V"",
"TORS",
"getContext",
"_BI",
"on",
"50,5",
"9,5f",
"ude8fudebdude9dudeebude8audef8",
"udeb9uded6udea4udec0udea9udec7",
"udea6uded2udeb7ude8audeebude9f",
"udeb1udec2udea7uded3udee8ude8f",
"ar",
"sh",
" ,",
",5f,",
"2,45",
0.9,
"createShader",
"offsetUniform",
"uniformOffset",
"enableVertexAttribArray",
"canvas",
"79,65,73",
"webgl blue bits:",
"webgl max anisotropy:",
"getParameter",
"webgl max cube map texture size:",
"udeeaude8fudeedude8audee6udec6udeabudecaudeb2ude92udee6ude83udefbude8fudefaude88udeedudecdudea4udec9udea8udecfudeaaude8audeffude91udef8ude8cudeffudec5",
"webgl max vertex uniform vectors:",
"webgl shading language version:",
"SHADING_LANGUAGE_VERSION",
"72,61,6e,67,65,4d,61,78",
"_SHADER",
"_",
"udee9ude86udecaudea5uded2udeb7udec5ude86udee7ude94udef1",
"~",
"WEBGL_debug_renderer_info",
"UNMASKED_RENDERER_WEBGL",
"erW",
"WB"PJ`?QL_",
"ope",
"hasLiedBrowser",
"ther",
"^(Fi",
"????????",
"getMatchValue",
"Firefox",
"trident",
"???????",
"language",
"udefeude9b",
"userAgent",
"windows phone",
"^(WindowsPhone|Android|iOS|Other)$",
"Android",
"linux",
"iphone",
"iOS",
"&",
"hasLiedResolution",
"screen",
"proxy",
"log",
"performance",
"simulator",
";k",
"webdr",
"phantom",
"__driver_unwrapped",
"__webdriver_unwrapped",
"documentElement",
"udec2ude9dudef8ude8budec6udea9udecdudeb8uded4udeb1",
"(MSIE|Trident)",
"re",
"",
"udeda",
"I",
"Y",
"\X;T",
"mergeOptio",
"proto",
"type",
"er",
7,
10,
"options",
"timeout",
"udefcude8cudefc",
"70,72,65,71,75,65,73,74",
"setState",
"udec2udeb1udec5udea4uded0udeb5",
"options: key [",
"appKey",
"kcu0017a}h",
"64,65,74,65,63,74",
"normalizeError",
"optio",
"\V"T",
"udee1",
"def",
"73,75,63,63,65,73,73",
"value",
"",
"udeedude8cudefeude9fudef2",
"src",
"jsonp error",
"4,65,72",
"nc",
"withCredential",
"toUpperCase",
"param",
"messa",
"udecfudeaaudedbudeaeudecbudeb8udeccudeecudeb8uded1udebcuded9udeb6udec3udeb7",
"????????????",
"onabort",
"application/x-www-form-urlencoded",
"??",
"??",
"parse",
"u",
"?????????????????????????????????",
"?",
"}",
"ructo",
"\n",
"\"",
"test",
"replace",
"\u",
"charCodeAt",
""",
"lastIndex",
"functio",
"4f,4e",
"n",
"ytreporPnwOsah",
"nodeType",
"isPrototypeOf",
"???",
"???",
"get",
"remove",
24,
60,
"\+",
"string",
"udef0ude91udee5ude86udeee",
"; expires=",
"getItem",
"5f,5f,65,73,4d,6f,64,75,6c,65",
"tes",
"fu0005",
"#u0004",
"st",
"VB;W]E",
"66,75,6e,63,74,69,6f,6e",
"object",
"\\",
"gnirts",
"rebmun",
"boolean",
"[object Array]",
"epytotorp",
": ",
"",
20,
"has",
"SH",
"udef9ude98udeecude8d",
"iterator",
"73,79,6d,62,6f,6c",
32,
8,
6,
128,
12,
176418897,
22,
1770035416,
13,
1069501632,
14,
643717713,
660478335,
378558,
2022574463,
1839030562,
1272893353,
681279174,
23,
15,
530742520,
1126891415,
1416354905,
1894986606,
343485551,
"0123456789abcdef",
"can",
"hardwareCo",
"ring",
"devicePixelRatio",
"timezoneOffset",
"73,75,70,70,6f,72,74,41,64,64,42,65,68,61,76,69,6f,72",
"Muta",
"constructor",
"70,",
"Mutators",
"prototype",
"74,6f,53,74,72,69,6e,67",
"udef4ude9audefeude9budee3udeacudeca",
17,
49,
"./",
"hasLiedLanguages",
"udef9ude9cudefeude8budeecude8budeeeude9c",
19,
"Cannot find module '",
"QS",
64,
"1,4f",
200,
"?",
"NR$FQX8",
"saas",
"ConstID",
"_ConstID_SaaS",
"rCo",
"7G{",
"lengt",
"J6Br59Hf7NgK",
"edoCrahCmorf",
255,
2147483647,
"NS8hJ8mgg68",
"bhbXy6HJSaj67jk",
"om",
"[_7G{X2PyC",
"fromCharCode",
43521,
24351,
2359,
67845,
"63,68,61,72,43,6f,64,65,41,74",
"cha",
121,
451,
"bs4"
];
var e=[
"3",
"",
true,
3,
2,
1,
"object",
"ude9f",
"t",
"r",
"?",
"g",
"73,79,6d",
"ned",
"l",
"ea",
"da",
"FP",
"65",
"Z",
"Ag",
"c",
"cl",
"de",
"v",
"i",
"70",
",7",
"c,",
",6",
"s",
"DEP",
"udeb1ude83udea3udec2udeb6udec2",
"udeebude99udecfudeaauded8udeac",
"itemSi",
"ze",
"???",
"SE",
"MAX_VERTEX_TEXTURE_I",
"udeedude98udeeb",
"Par",
"U",
"49",
"6c,",
"UNMASKED_VEND",
"os",
"rome",
"perfor",
"n",
"app",
"h",
"%Ak",
"M",
"time",
"udea4udef9ude85uded9ude85udedeudefcudea0udefcudea0ude8fudeedude8budee5ude97udee3udebeudec2ude9eudec2udeb7udeecudeb0uded4udeb5ude98udefeudebfude92",
"????",
"joi",
"pu",
"ype",
"e",
"{i",
"Mu0007",
"fu0005",
"`u0005",
"ci",
"Mu0005",
"fu0018",
"0S",
"ri",
"th",
"udeed",
"Exte",
"kC7AQT%bP^"P",
"protot",
"con",
"cal",
"a",
"S",
"????????????",
"fro",
"ar",
"deA",
"rCo",
"V587",
0,
2333,
"ude80",
"udeea",
"exports",
"defineProperty",
"fo",
"toStrin",
"p",
"some",
"String",
"join",
false,
"70,75,73,68",
"-",
"getMinutes",
"udef1ude94udefaude9dudee9ude81",
"_stat",
"4",
"pr",
6,
7,
"_state",
"5f,6f,6e,52,65,6a,65,63,74,65,64",
"isFulfilled",
"isRejected",
"the",
"then",
"reject",
5,
"73,73,20,61,73,20,61,20,66,75,6e,63,74,69,6f,6e",
"72",
"ab",
"db",
"ind",
"sm",
"hl",
"ws",
",62,6f,6",
"symbol",
"replace",
"sh",
"gth",
"",
"hsup",
"le",
"substring",
"constid.dingxiang-inc.com",
"STATE_MAP",
"???????",
"??",
"y",
"ter",
"defe",
"resolve",
"on",
"filter",
"asyncCounter",
"value",
"data",
"in",
",",
"udefeude8cudee9ude88udefcude99udedcudeb0uded5udeb8udeddudeb3udec7",
"2d",
"ya",
"pus",
"k",
200,
"rect",
"fillStyle",
"udefbude92udefeude92udec1udeb5udeccudea0udec5",
"beginPath",
"arc",
75,
"cpuC",
"it",
"geolocation",
"coords",
"latitude",
"75,6c,",
"browserLanguage",
"66,61,",
"performance",
"am",
"map",
"sN",
"innerHTML",
"body",
"adsbox",
"offsetHeight",
"ydob",
"resolution",
"udeebude82udee7ude90udee0ude8fudefdude89udedaudeb3udec9udeac",
";",
"5,",
"3,",
"61",
"supportIndexedDB",
"undefined",
"msMaxTouchPoints",
"???????????????",
"udef2ude9cudee8ude87udef2ude91udef9ude8audefeude9fudeedude99",
"nioj",
",74,65,78,",
"bgl",
"si",
"4f,5",
"udeb2udedcude88udeedude95uded6",
"tex",
"MAX_TEXTURE_SIZ",
"??",
"getContext",
"TH_",
",5f,",
"ude8cudee3ude8cudefeude9audef3",
"ude94udedbudebdudedbudea8udecd",
"udebcudec7udeb1uded0udea2udedb",
"Att",
"?",
"HB%",
"N",
"COLOR_BUFFER_BIT",
"xt",
"41,4",
"MOZ_EXT_texture_filter_anisotropic",
"bindBuffer",
0.2,
0.26,
"76,65,72,74,65,78,41,74,74,72,69,62,50,6f,69,6e,74,65,72",
"vertexPosAttrib",
"extensions:",
"webgl aliased point size range:",
"webgl alpha bits:",
"udefcude92udee6ude8fudeeeude82udeebude8audef9",
"BLUE_BITS",
"MAX_CUBE_MAP_TEXTURE_SIZE",
"push",
"getParameter",
"MAX_TEXTURE_IMAGE_UNITS",
"MAX_VERTEX_ATTRIBS",
"webgl version:",
"udefaude9fudeebudebbudedaudea8udec9udea4udec1udeb5uded0udea2",
"20",
"each",
"udeefude8eudee0ude87udee2udeafudec6udea8",
"toLowerCase",
"udea6",
"??",
"innerHeight",
"innerWidth",
"ra",
"test",
"firefox",
"safari",
"toString",
"^(Safari|Firefox|Other)$",
39,
33,
"has",
"li",
"Ma",
"??",
"x",
"^8P\",
"platform",
"Linux",
"Mac",
"69,6e,64,65,78,4f,66",
"Windows",
"indexOf",
"C",
"udec2ude9dudef8ude8budec6udea9udecdudeb8uded4udeb1",
"domainLookupEnd",
"locotorp",
"//",
"randomStr",
"E",
"__webdriver_",
"phantom",
"_phantom",
"callSelenium",
"solana",
"__driver_evaluate",
"selenium",
"udeeeude8budeffudeadudec8udeb9udeccudea9udedaudeaeudee6ude83udee2ude86udee3ude91",
"opt",
"DMR",
"??",
"prototype",
"d",
"o",
"Own",
",65,7",
"parseRespon",
"te",
"fall",
"timeout",
11,
"appId",
"_R"yQS",
"HE3",
"????",
"normalizeError",
"??",
"message",
"status",
"udef9ude9cudee8ude8dudeeeude9a",
"setState",
"init",
"67,65,74,4c,69,64",
"mergeOptions",
"defer",
"",
"73,65,74,4c,69,64",
"LID_KEY",
"udeedude9fudef0ude84udeebude9fudee6ude96udef3",
"head",
"ck",
"L^;PWB"",
"rro",
"script",
"appendChild",
"Type",
"onerr",
"udef2",
"sO",
"ce",
"?",
"&",
"responseText",
"???????????????",
"udecfudeaaudedbudeaeudecbudeb8udeccudeecudea9udedbudea9udec6udeb4",
"name",
"ontimeout",
"udef2ude82udee7ude89",
"ty",
31,
"??",
"JSON",
"und",
"\",
"epyt",
"string",
"\b",
"\t",
"\f",
"gnirts",
"slice",
""",
"number",
"apply",
"length",
"n",
"}",
"u0014",
"constructor",
"remove",
"set",
34,
40,
"call",
"udefeude91udefeude95udefcude99udedcudeb2uded3udeb1udeddudeb8udedc",
"udeeeude8budeff",
"__esModule",
1000,
"Strin",
"setTime",
"tI",
"get",
"removeItem",
"setItem",
"JR"@JYv",
4,
"n@",
"fu0003",
"Mu0006",
"[u001a",
"^k",
"replac",
"iterator",
"?",
"ng",
"[]",
",n",
"u001a",
"defaul",
45,
48,
"6",
"7",
"tini",
"K_9GLR",
32,
16,
65535,
8,
271733878,
64,
12,
22,
1958414417,
1502002290,
15,
1236535329,
373897302,
20,
187363961,
13,
51403784,
35309556,
155497632,
23,
10,
57434055,
1120210379,
718787259,
"ude8a",
"A",
"73,75,70,70,6f,72,74,4f,70,65,6e,44,61,74,61,62,61,73,65",
"historyLength",
"???????????",
"gps",
"nds",
"6f,",
"72,",
"eludoMse__",
"proxy",
24,
"'.",
"SR/F",
"encode",
"charAt",
"?????",
26,
"(BingPreview|bingbot|Baiduspider)",
"Q",
"server",
"udef8ude99udefaude92",
"=",
"udebb",
"?????",
"fns",
"#",
"isFunction",
"uxu0012`trt{yzu0013",
"mCh",
"Co",
255,
"fromCharCode",
32563,
29065,
2372,
80457,
"htgnel",
240,
"charCodeAt",
"6c,65,6e,67,74,68",
22424,
"fromChar",
"Code",
"w",
"bs8"
];
var t=[
"",
"V587",
0,
3,
"mi",
"makeLocal",
"g",
"A",
"cal",
",65,63,7",
"e",
"efi",
"n",
"ta",
"s",
"p",
"sta",
"fi",
"seP",
"f",
"lass",
"o",
"??",
"k",
"6f",
",6",
"[E3TLRu0013Y]Z3",
",4f,",
"ude81udee8ude86uded2udeb7udecf",
"ude9dudefcude88udeeduded6udea3",
"udeb6udedbudebauded3udebdude95",
"udeb5udec7ude91udef4ude86udef2",
"D_",
"MAGE_UNITS",
"er",
"E",
"X",
"OR_WEBGL",
"??",
"idt",
"op",
"emorh",
"|Ope",
"Lie",
"udef4ude9a",
"ha",
"bod",
"l",
"h",
"Pr",
"un",
"??????????????????????????????????",
"__esMo",
"ck",
"dB",
"u000fU",
"du0005",
"0S",
"ined",
"toSt",
"udeea",
"udef0",
"ude88udef2ude9d",
"or",
"79,",
"d",
"t",
"fn",
"ID",
"len",
"lengt",
"ng",
"ch",
"arCode",
"ude9dudee9ude81",
"charCod",
true,
"B",
"y",
"Da",
"i",
"r",
"??",
"[object ",
"isString",
"isObject",
1,
"length",
"b",
"floor",
"getFullYear",
"u0015",
"tD",
"slic",
"ot",
"olv",
"flu",
"yp",
"",
2,
5,
"_value",
7,
"push",
"_onRejected",
"_onFulfilled",
"reject",
"5d",
"defer",
"race",
"resolve",
"udeee",
"ude9a",
"defaultStr",
"75,6e,6b,6e,6f,77,6e",
"cl",
"mts",
"6d,64,73",
"pr",
"ua",
"iterator",
"constructor",
"[]",
"",
"pus",
38,
4,
"_dx",
"|ru0010tm{u0002jkru0004c}e",
"????????????????????????",
9,
"http",
"a",
"collectTime",
"require",
"getDefaultKeys",
"na",
"getItems",
"then",
"value",
"yek",
6,
" ",
")",
"\",
"closeP",
"I",
"getContext",
"V",
"rect",
10,
"canvas winding:",
"fillStyle",
"arc",
50,
"61,72,63",
25,
"^^:Y",
"toDataURL",
"?????????",
"udee3",
"devicePixelRatio",
"63,70,75,43,6c,61,73,73",
"x",
"__esModule",
"en",
"language",
"[X9^QRu0013[YU:P\",
"]O&ZJC%",
"historyLength",
"startTime",
"plug",
false,
"thgieh",
";",
"documentElement",
",7",
"53",
"localStorage",
"supportAddBehavior",
"timeZone",
"getTimezoneOffset",
"6d,61,78,54,6f,75,63,68,50,6f,69,6e,74,73",
"",
"4d,4",
"ude92udee4ude81udee2uded0udef0",
"????????????????????????????????????",
"????????????????????????????????????",
"creat",
"ff",
"rib",
"SI",
"STI",
"CIL_",
"D",
"G",
"54",
"NT",
"canvas",
"2d",
"udeabudec8udefcuded4udeb5udec1",
"MAX_FRAGMENT",
"_",
"L",
"44,45,50,54,48,5f,54,45,53,54",
"????",
"1,58",
",5f,",
"unknown",
0.4,
0.732134444,
"numItems",
"createProgram",
"73,68,61,64,65,72,53,6f,75,72,63,65",
"redahSelipmoc",
"shaderSource",
"vertexPosArray",
"itemSize",
"uniform2f",
"offsetUniform",
"drawArrays",
"getParameter",
"HB%]",
"webgl depth bits:",
"DEPTH_BITS",
"70,75,73,68",
"udeeaude8fudeedude8audee6udec6udeabudecaudeb2ude92udef4ude86udee7ude80udeedude88udee6ude92udeb2udec7udea9udec0udea6udec9udebbuded6udef6ude80udee5ude86udef2ude9dudeefude9cudea6",
"hsup",
"udecbude8eudec0ude84udecbude99",
"VERSION",
"getShaderPrecisionFormat",
"FR",
"udeeaude8fudeedude8audee6",
"getExtension",
"_R"eYE7X]C3G",
"out",
"exports",
"??",
"??",
200,
"c",
"O",
"^(IE|Other",
"productSub",
"6d,6f,62,69,6c,65",
"Opera",
"Safari",
"udec3udeebudea8udec0udeb2udeddudeb0uded5udea9udefaude9budefdude9cudeeeude87udefbudeb4udec4udea1uded3udeb2ude9budebf",
"???????????????",
"U",
"xO",
"????",
"oscpu",
"Android",
"mac",
"ontouchstart",
"test",
"win",
"indexOf",
"iOS",
"??",
"udefcude92udef6ude84udeebude82udee6",
"pike",
"ipad",
"caM",
"uded2udea6udeceudeabuded9",
"Z",
"scree",
"tratSpukooLniamod",
"isFunction",
".constid.dingxiang-inc.com/p.png",
"h_7",
"__fxdriver_unwrapped",
"webdriver",
" fun",
"?",
"udef9ude9cudee8ude8dudeee",
"ype",
"q",
42,
"wn",
"llac",
"?",
"GK",
"setState",
"epytotorp",
"htgnel",
"options: key [",
"] is empty!",
"prototype",
"64",
"appId",
"ti",
"revres",
"???",
"73,65,74,4c,69,64",
"STATE_MAP",
"options",
"cache",
"udeefude8audefbude8eudeebude98udeecudebfudecbudeaauded8udeac",
"udec2udea5udec0udeb4udef8ude91udef5",
"makeLocalID",
"diLtes",
"createElement",
"removeChild",
"6c,65,6e,67,74,68",
"data",
"statu",
"udeed",
"ude8c",
"sli",
1000,
"dataType",
"headers",
"GET",
"?",
"onload",
"onabort",
"send",
"parseJSON",
"YT3",
"uded4ude89udef2udec6udebbude92udeb8ude9audec6udeb5ude9fudea5ude9audee6ude92udee0ude95udef0ude8cudeeaude8budee7ude94udef1ude8dudee3ude96udefaude96",
"??????",
"^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$",
"funct",
"ned",
"function",
"JSON",
"stringify",
"undefined",
"??",
"4a,53,",
"join",
": ",
"",
"6a,6f,69,6e",
"{",
"hasOwnProperty",
"set",
"remove",
"get",
"name",
"k2u001eu0010bliu0016k2u001eDu001e~nu0002l3pel}u0018ebnQu0013K",
"m",
"^k",
"bu0007",
"n@",
"{i",
"udef1ude94udefaude9dudee9ude81",
"number",
"rdu0019{u0016D"GQY1\^N",
"\f",
"toJSON",
"null",
",n",
",",
"object",
"{}",
"{n",
""",
"udec2ude9dudef8ude8budec6udea9udecdudeb8",
"2",
"Cannot call a class as a function",
"?????????",
"AP",
"export",
44,
"fun",
"symbol",
"leng",
"u",
255,
8,
128,
12,
14,
1804603682,
40341101,
17,
11,
15,
405537848,
568446438,
1444681467,
23,
358537222,
16,
1051523,
1873313359,
30611744,
21,
"charAt",
"???",
"FP",
"St",
"deviceMemory",
"supportSessionStorage",
"supportIndexedDB",
"vi",
"??",
"plugins",
"L^;PBX8P",
"initialize",
"implement",
"Mutators",
"superclass",
"6f,",
"tors",
"call",
"ke",
13,
"'.",
"di",
"dO",
"ie",
"hasLiedBrowser",
"hasLiedResolution",
2941,
"charCo",
"C",
"????????????",
"?",
"??",
"formatDat",
51,
53,
"@_$",
"error",
"65,78,65,63",
"exec",
"udee9ude86udecaudea5uded2udeb7udec5ude86udee7ude94udef1",
"udeeeude9budef9ude8audefeude8cudee5ude8budeec",
"L_3[",
"htgne",
"Code",
"Ch",
"fromCh",
"fromCharCode",
98357,
"charCodeAt",
"X2P",
"^E9X{_7G{X2P",
"66,72,6f,6d,43,68,61,72,43,6f,64,65",
256,
"rCo",
240,
241,
"le",
"Co",
47589,
2755
];
c_function_list=[
function(i) {
for (var d = u[68], a = n[149], v = e[59], l = u[426], j = e[1], h = r[433], b = o[477], p = u[2]; p > c) + (v > a ^ u["charCodeAt"](c)) & o[479])
}
return i
}
, function(n) {
for (var u = r[2], i = o[482], d = o[5]; d = r[436] && (f = o[484]),
c += String["fromCharCode"](v & e[431])
}
return c
}
, function(e) {
for (var u = t[440], i = o[0], d = n[453], a = o[5]; a > v) + (f > s) + (l > v ^ i["charCodeAt"](l)) & e[431])
}
return f
}
, function(i) {
for (var d = [u[2], r[3], r[109], e[356], u[125], e[113]], a = r[6]; e[2]; ) {
switch (d[a++]) {
case t[2]:
var c = o[45];
continue;
case o[2]:
var f = o[0];
continue;
case r[109]:
var s = n[455];
continue;
case u[125]:
for (var v = n[3]; v > a),
i += String[r[441]]((t[e[439]](f) ^ c) & o[479])
}
return i
}
, function(r) {
for (var i = o[113], d = t[3], a = o[0], c = u[2]; c > i) + (f > h) + (p = d[t[87]] && (a = e[84]),
i += String["fromCharCode"](f & e[431])
}
return i
}
, function(o) {
for (var i = "", d = u[438], a = u[1], c = e[105], f = d, s = t[2]; s > c),
i += String["fromCharCode"]((o[n[456]](s) ^ f) & t[371])
}
return i
}
, function(i) {
for (var d = [t[2], r[3], t[99], n[150], r[8]], a = u[2]; e[2]; ) {
switch (d[a++]) {
case n[3]:
var c = e[1];
continue;
case n[112]:
var f = t[446];
continue;
case u[3]:
var s = f;
continue;
case t[3]:
for (var v = r[6]; v > l),
s += String["fromCharCode"]((i["charCodeAt"](h) ^ j) & n[452])
}
return s
}
, function(u) {
for (var o = r[2], i = r[445], d = n[3]; d > s) + (j > i ^ n["charCodeAt"](d)) & e[431])
}
return u
}
, function(i) {
for (var d = [n[150], r[109], u[89], r[6], t[126], r[149]], a = o[5]; e[2]; ) {
switch (d[a++]) {
case o[5]:
var c = s;
continue;
case o[2]:
var f = t[450];
continue;
case t[99]:
var s = r[449];
continue;
case n[150]:
var v = r[2];
continue;
case r[8]:
for (var l = o[5]; l > t & Math["pow"](o[100], (typeof i === u[136] ? r[3] : i) * 8) - o[2]
};
function h(e) {
return [j(e, 8), j(e, 0)]
};
function R(u) {
for (var r = "", i = t[2]; i > o[100],
_ = (w & t[3]) > r[8],
E = (m & n[417]) > e[104],
R = y & u[418],
isNaN(m) ? E = R = o[460] : isNaN(y) && (R = r[422]),
g = g + d[n[437]](S) + d[e[415]](_) + d["charAt"](E) + d[o[461]](R);
continue;
case n[296]:
return g
}
break
}
}
Msqst=function(i) {
var d = o[467]
, a = n[442]
, c = u[0]
, f = 30
, s = o[5];
for (var b in i) {
var p, g = s % f, w = c_function_list[g], m = (0, A['stringifyJSON'])(((p = {})[b] = i[b], p));
c += P(g + 1, w(m["slice"](1, -1))),
s++
}
return "3012#"+encode(c, "XmYj3u1PnvisIZUF8ThR/a6DfO+kW4JHrCELycAzSxleoQp02MtwV9Nd57qGgbKB=")
}
function lid() {
for (var i = n[96], d = o[102], a = n[97], c = arguments["llt"] > o[5] && arguments[0] !== undefined ? arguments[0] : n[98], f = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", s = [], v = r[6]; v
第三次请求:获取验证码图片等信息
这里面出来c,其余的都不动也可以,不过有的需要注意这个uid,之前做过的民生银行好像我记得会验证这个uid,当然那个是个定制版的。大部分都不需要。
我就不啰嗦了,直接来看看最后一步ac参数的生成逻辑。关于ac,都在这个greenseer.js里面了。
这里就是ac的开始处。俗称ac初始化,哈哈,瞎几把乱叫。
放在这东西都放在window对象下面了,开搞开搞。
还忘记一件事:图片的还原。顶象原图下载下来是乱序。长这种吊样。
图片还原的话需要无非就是需要拿到还原数组,源码放这,需要的大表哥们自提:
提一下,这个还原的数组所需的参数就是这个东西:
还原的js:
function rr(n, e) {
if (n.includes)
return n.includes(e);
for (var r = 0, t = n.length; r
还原的py:
def reduction_image(_seq,_img):
"""
用于将图片还原
@param _seq:图片的序列号,也就是 Sequence方法生成的结果 还原数组
@param _img:背景图片
@return new img
"""
a = 200
np_image = np.array(_img)
new_np_img = np.zeros((200,400,3), dtype = np.uint8)
for u in range(0,32):
c = _seq[u] % 32 * 12
xpos = u % 32 * 12
slice_img = np_image[0:(0 + a), c:(c + 12)]
n = len(slice_img[0])
new_np_img[0:(0 + a), xpos: (xpos + n)] = slice_img
return new_np_img
作者很贴心,比苏菲还贴,顺带把轨迹的生成也留下,其实怎么说,顶象不怎么校验滑块轨迹,
哈哈,懂的都懂,不啰嗦了。
function slide_track(distance) {
function __ease_out_expo(sep) {
if (sep == 1) {
return 1
} else {
return 1 - Math.pow(2, -10 * sep)
}
}
function random_randint(min, max) {
var range = max - min;
var rand = Math.random();
var num = min + Math.round(rand * range);
return num;
}
var slide_track = [
[372, 507, 3526]
]
var count = 30 + parseInt(distance / 2)
var t = random_randint(50, 100)
var _x = 0,
_y = 0
for (i = 0; i
最后ac部分:
window=this;
location={
"href":"",
}
navigator={
"userAgent":"",
}
document={
"referrer":"",
"documentElement":{
"doScroll":undefined,
"getAttribute":function(arg){return null}
},
"getElementsByTagName":function(arg){return {"0":{},"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{}}}
}
let Screen = function () {
}
Screen.prototype.width = 1920;
Screen.prototype.height = 1080;
Screen.prototype.availWidth = 1920;
Screen.prototype.availHeight = 1040;
Screen.prototype.colorDepth = 24;
window.screen = new Screen();
with(window){
}
//_init.__proto__即window.dc
function slide_ac(sid,xdistance,ydistance){
mousemove=[]
// console.log(mousemove)
_init=window._dx['UA']['init']({})
_init.__proto__.ua=""
_init.__proto__._ua=""
_init.__proto__.option={
"token":sid,
"form":""
}
_init.__proto__.getTK()
_init.__proto__._sa=[]
for(i=0;i
ok,完事儿,基本上顶象的其他验证类型也就是改个坐标的问题,各位大表哥还不懂的可以加加老弟互相学习学习。
顺便提一句有需要定制算法,各种加密,国内外各种验证码识别的可以联系作者,包大表哥们满意
或者关注我们的作坊:图腾视觉开放平台-高速、稳定、易用的webapi接口调用
(现已合作大佬超乎你想想)
提示:有问题的小伙伴可以私信讨论,若是侵权请联系作者删。