functiona(r) {var t =r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g);if (null=== t) {var a =r.length; a >30&& (r =""+r.substr(0,10) +r.substr(Math.floor(a /2) -5,10) +r.substr(-10,10)) } else {for (varC=r.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), h =0, f =C.length, u = []; f > h; h++)""!==C[h] &&u.push.apply(u,e(C[h].split(""))), h !== f -1&&u.push(t[h]);var g =u.length; g >30&& (r =u.slice(0,10).join("") +u.slice(Math.floor(g /2) -5,Math.floor(g /2) +5).join("") +u.slice(-10).join("")) }var l =void0, d =""+String.fromCharCode(103) +String.fromCharCode(116) +String.fromCharCode(107); l =null!== i ? i : (i =o.common[d] ||"") ||"";for (var m =l.split("."),S=Number(m[0]) ||0, s =Number(m[1]) ||0, c = [], v =0,F=0; F<r.length; F++) {var p =r.charCodeAt(F);128> p ? c[v++] = p : (2048> p ? c[v++] = p >>6|192: (55296=== (64512& p) &&F+1<r.length&&56320=== (64512&r.charCodeAt(F+1)) ? (p =65536+ ((1023& p) <<10) + (1023&r.charCodeAt(++F)), c[v++] = p >>18|240, c[v++] = p >>12&63|128) : c[v++] = p >>12|224, c[v++] = p >>6&63|128), c[v++] =63& p |128) } for (var w = S, A = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(97) + ("" + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(54)), b = "" + 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)), D = 0; D < c.length; D++)
w += c[D], w =n(w,A);return w =n(w, b), w ^= s,0> w && (w = (2147483647& w) +2147483648), w %=1e6,w.toString() +"."+ (w ^S) }
解决办法:回到浏览器,我们查找 r 的值,并将生成 r 的值的函数,加入到我们之前创建的 js 文件中,放在 G 函数的上面
生成r的代码,如下所示
functionn(r, o) {for (var t =0; t <o.length-2; t +=3) {var e =o.charAt(t +2); e = e >="a"?e.charCodeAt(0) -87:Number(e), e ="+"===o.charAt(t +1) ? r >>> e : r << e, r ="+"===o.charAt(t) ? r + e &4294967295: r ^ e }return r}
我们重新运行代码,发现又会遇到一个错误,说是缺少 i 的值,所以我们的解决办法还是,继续进行 js 逆向,查找i的值
逆向分析
我们回到 function a()中,找到需要使用 i值的地方,打上断点
打上断点之后刷新一下页面,我们再次将鼠标放在 i上,我们会看到一个浮点字符串,此时我们不确定 i 的值是否是变化的,所以我们换一个翻译的单词,刷新页面,再次查看 i 的值,我们发现 i 的值是固定的,所以我们可以在代码中,直接定义一个固定的i 值.