ua.js文件focus&blur&keydown事件分析
actionlog_js_ua.js混淆编程形式与执行主流程
ua.js中mousedown和mousemove事件自定义函数功能解析
ua.js中JSocket.getlso和JSocket.setlso代码分析
ua.js中arguments.callee.caller的应用
上一篇文章介绍了mousedown和mousemove事件更新UA的方式,今天讲述ua.js文件focus&blur&keydown事件发生时更新UA的方式。其中focus/blur是同一个函数处理的,函数名为yl,而处理keydown事件的函数名为u4。
focus与blur事件的处理函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
yl = function (lbet) { try { // ivsz["MaxFocusLog"] ivsz[MaxFocusLog] if (ivsz[eb('lgoLdsucoeFxaMJ', 4, 1)] > ((0x3f3 | 0315) % 93) && fe >= ivsz[k1('tgoLhsucoVFxaMI', 4, 1)]) { return; } // event var ab = lbet || or[m2('wtnMneNlveU', 2, 2)]; // target srcElement var emwa = ab[jj('NteSgratg', 4, 1)] || ab[eb('ctneemeloEcrsB', 4, 1)]; var a5 = irt; // emwa[id] if (emwa && emwa[k1('NlgdwEiJ', 1, 2)]) { // ere[encodeURIComponent] (emwa[id]) a5 = ere[jj('BtnjenopPmoCIxRUedHocneg', 4, 1)](emwa[k1('khfdHyiG', 1, 2)]); } var cb = (0x3e8 % 0144 & 97); for (var wim = (0x3e8 % 0234 & 63); wim <= (0x409 * 01026 & 55); cb = ++wim + wim++ + wim) { if (wim == cb) { // ere[Date] [getTime] var o7w = (new ere[k1('lxYetHYaDh', 2, 2)]())[m2('heCmiTPtegI', 3, 1)]() - ghj; continue; } if (2 * wim == cb - (0x3f3 % 01357 & 55)) { var wz1 = [7, tu]; } else if (2 * wim == cb - 2) { //1 // var tu = [a5, (window.event.type=='focus' || window.event.type=='focusin')?1:0,o7w] var tu = [a5, (ab['type'] == 'focus' || ab['type'] == 'focusin') ? (0x3f3 * 0457 & 67) : 0, o7w]; continue; } if ((0x3f3 * 0574 & 77) * wim == cb + ((0x3f3 | 0423) % 59)) { // callee callee su(wjt(ovh("" + arguments[eb('reeullacy', 4, 1)])), "" + arguments[k1('keewllacR', 4, 1)]); } } vq4(wz1);//vq4(7 fe++; } catch (err) {} }; |
这里给出focus和blur事件处理函数yl的代码,有反混淆的注释。
由以上代码可知focus和blur事件处理时需要的参数,如下表所示。其中的focus和focusin的差异一定又是因为IE。我查了一下,了解到如下知识点,值得记录:
1. 事件代理简单来说就是将子元素事件绑定在祖先元素上,之所以能够这样做,得益于标准事件模型的捕获和冒泡。这一点对应到ua.js的表现为:在事件绑定处理函数t6k中,mousedown,mousemove,focus,blur,keydown等事件均绑定在window.object上。因此ua.js的事件代理方式应该是事件的捕获。
2. focus和blur事件支持捕获但不支持冒泡,而IE下的focusin和focusout与focus和blur功能对应,它们支持冒泡,不支持捕获。在函数t6k中区分为IE时绑定事件是focusin和focusout。但是到这里我就糊涂了:IE不支持捕获,可是事件都是绑定在window.obejct上的,它如何能将事件传递到它的子元素中呢?
keydown事件的处理函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
u4 = function (b0z) { try { //if(0<ivsz["MaxKSLog"]<ade ) // ivsz[MaxKSLog] ivsz[MaxKSLog] if (ivsz[jj('lgoBLSKexaMg', 3, 1)] > (0x3e8 % 0144 & 63) && ade >= ivsz[k1('sgolLSKcxaMl', 3, 1)]) { return; } var cud = (0x3e8 % 0367 & 83); for (var sbat = ((0x3e8 | 01053) % 59); sbat <= (0x3e8 % 0513); cud = ++sbat + sbat++ + sbat) { if (sbat == cud) { var ab = b0z || upc[jj('gtVUneYPveB', 2, 2)];//upc[event] continue; } if (2 * sbat == cud - ((0x3e8 | 01001) % 83)) { var q4 = 0; break; } if (2 * sbat == cud - 2) { var c4p9 = ab[m2('GejdoCoyekr', 3, 1)];//window.event.keyCode sbat++; } if ((0x409 * 0513 & 79) * sbat == cud + 2) { // emwa = ab[target] || ab[srcElement] var emwa = ab[k1('GteLgratA', 4, 1)] || ab[jj('ptnDemelFEcrsl', 4, 1)]; } } // if(window.event.ctrlKey && c4p9 != 17) if (ab[m2('TyKeKlsrtcJ', 3, 1)] && c4p9 != 17) { q4 += 1; } // if(window.event.altKey && c4p9 != 18) if (ab[k1('YyeYKtlag', 4, 1)] && c4p9 != 18) { q4 += 2; } // if(window.event.shiftKey && c4p9 != 16) if (ab[eb('DyeaKtflihsU', 3, 1)] && c4p9 != ((0x3e8 | 0531) % 77)) { if (!(0x3e8 % 0324 & 69)) { var hx = (0x3e8 * 0324 & 83); } else { hx = ((0x3f3 | 0655) % 73); } if (!hx) { var mu = (0x3e8 % 0637 & 67); } if (mu) { q4 += ((0x409 | 01206) % 67);//q4 += 4; } else { this.UAOpt = ot; } } var a5 = ""; // emwa[id] if (emwa && emwa[eb('slodWsiE', 1, 2)]) { // or[encodeURIComponent](emwa[id]) a5 = or[eb('LtnnenopwmoCIgRUedZocneD', 4, 1)](emwa[m2('DZddRoil', 1, 2)]);//当前事件对象的ID } // ivsz[ExTarget][length] for (var i = 0; i < ivsz[jj('rteEgralTxEc', 3, 1)][jj('whtKgnelk', 4, 1)]; i++) { // ivsz[ExTarget][i] if (ivsz[m2('EteHgraQTxEP', 3, 1)][i] == a5) { return; } } // upc[Date] [getTime] var o7w = (new upc[eb('xvTetXcaDt', 2, 2)]())[jj('peAmiTategu', 3, 1)]() - ghj; //当前事件对象ID编码 当前事件的键值码 当前事件的ctrl/alt/shift键值信息 当前事件的时间 var tu = [a5, c4p9, q4, o7w]; var wz1 = [(0x3f3 % 01735 & 79), tu];//vq4[6,[a5, c4p9, q4, o7w]] // arguments[callee] arguments[callee] su(wjt(ovh("" + arguments[k1('DeeVllacy', 4, 1)])), "" + arguments[jj('meekllacC', 4, 1)]); var b69 = (0x3e8 % 01267 & 65); var ppvz = ((0x3e8 | 01017) % 67); switch ((++ppvz - b69--) * (b69++)) { case (0x3e8 * 0277 & 65): vq4(wz1);//vq4([6,tu]) case ((0x3f3 | 01636) % 73): ade++; break; default: eventIndex = 2; } } catch (err) {} }; |
keydown事件需要的信息及其处理方式如下表所示。ctrlKey,altKey,shiftKey有单独的标志位,这三个事件可以同时存在。