ua.js中mousedown和mousemove事件自定义函数功能解析
actionlog_js_ua.js混淆编程形式与执行主流程
ua.js中mousedown和mousemove事件自定义函数功能解析
ua.js中JSocket.getlso和JSocket.setlso代码分析
ua.js中arguments.callee.caller的应用
现在我们已经知道网页DOM加载完成后,ua.js会在load事件处理函数中获取用户的浏览器,操作系统等等信息用于更新UA。DOM加载完成后,这些信息在UA中的数据格式已固定,不会再更新(页面重载时这些信息会更新)。而鼠标和键盘事件则会实时更新UA,本文先解析mousedown和mousemove的事件处理方式。
mousedown/mousemove与isvz属性值的关系
mousedown事件发生后,调用函数bc,进入bc函数后就开始判断是否满足执行条件;mousemove事件发生后,调用函数qe,f7v变量先自加,再判断是否满足执行条件。所以ua.js响应mousemove事件的间隔次数由ivsz[“MPInterval”]设定值决定。
mousedown自定义函数功能解析
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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
bc = function (e) { try { // ivsz[MaxMCLog]>0 ivsz[MaxMCLog] if (ivsz[k1('qgocLCMgxaMP', 3, 1)] > (0x3e8 * 0200 & 93) && mhdc >= ivsz[jj('lgoyLCMKxaMr', 3, 1)]) { return; } // ere[event] var ab = e || ere[eb('ltvMnekfvel', 2, 2)]; // ab[pageX] var m83x = ab[eb('CXlcegZzapE', 2, 2)]; // ab[pageY] var ot = ab[m2('mYZFegSlapl', 2, 2)]; if (m83x == undefined) { var hr2 = (0x3e8 * 0144 & 75);//var hr2=0 var rz = hr2;//var rz=0 do { if (rz) { // ab[clientY] ere[document][body][scrollTop] ot = ab[eb('xYutneuilcq', 3, 1)] + ere[eb('gtnSemuFcodp', 3, 1)][m2('ZlZydkIoby', 2, 2)][jj('snpoTxlloyrcsl', 3, 1)]; continue; } // ab[clientX] + upc[document][body][scrollLeft] m83x = ab[jj('tXPtnebilcP', 3, 1)] + upc[eb('stnKemuwcodM', 3, 1)][eb('ieCydfJobq', 2, 2)][eb('gtfReLllForcsC', 4, 1)]; rz = ++hr2 + hr2++; } while (--rz); } // var emwa = window.event.target || window.event.srcElement; // ab[target] || ab[srcElement] var emwa = ab[k1('Qtebgratu', 4, 1)] || ab[k1('ltnlemelHEcrsn', 4, 1)];//可以捕获当前事件作用的对象 var mi = 0; //which属性的返回值是Number类型,返回触发当前事件时按下的键盘按键或鼠标按钮 // ab[which] ab[which] if (typeof ab[eb('ahfKciklhwe', 2, 2)] != 'undefined' && ab[eb('lhlrciELhwd', 2, 2)] <= 3) { // ab[which] mi = ([0, 0, 1, 2])[ab[jj('IhmDciVshwx', 2, 2)]]; } // ab[button] ab[button] else if (typeof ab[k1('znoBttubl', 4, 1)] != 'undefined' && ab[eb('inoXttubk', 4, 1)] <= 4) { // [2, 0, 2, 1] ab[button] mi = ([2, (0x3e8 * 0270 & 59), (0x3f3 * 0736 & 71), 0, ((0x3fe | 0351) % 73)])[ab[m2('QnolttubT', 4, 1)]]; } var a5 = irt; // emwa[id] if (emwa && emwa[k1('tPjdRoil', 1, 2)]) {//鼠标或键盘事件对象的ID var d7 = (0x3f3 * 0513 & 71);//var d7 = 1 // (d7 - 1) while (!(d7 - (0x3f3 * 0673 & 61))) { if (d7 + (0x3e8 * 0144 & 67)) {//(d7 + 0) // 将当前事件的ID作为URI 组件进行编码存储在变量a5中 // upc[encodeURIComponent] (emwa[id]) a5 = upc[jj('KtnWenopjmoCIkRUedkocnez', 4, 1)](emwa[jj('MLPdCliE', 1, 2)]); d7 = d7 - (0x3e8 % 0441 & 91);//d7 = d7 - 1 continue; } nbm = { "\r" : "\\r" } } } var j5 = irt; //if(emwa.nodeName!='shape') // emwa[nodeName] if (emwa[k1('eemtaNeldonu', 3, 1)] != 'shape') { //for(var i = 0; i < ivsz["GetAttrs"].length; i++) // var i = 0 ivsz[GetAttrs] [length] for (var i = ((0x3f3 | 0736) % 93); i < ivsz[jj('usrWttAnteGf', 3, 1)][k1('Xhtlgnell', 4, 1)]; i++) { //rp9=emwa.getAttribute(ivsz["GetAttrs"][i]); // emwa[getAttribute] ivsz[GetAttrs] var rp9 = emwa[m2('VjetubVirttyAtegd', 4, 1)](ivsz[eb('ssrlttAoteGl', 3, 1)][i]); if (rp9) { // i5[length] if (j5[jj('Thtlgnelh', 4, 1)] == ((0x3fe | 0216) % 73)) {// == 0 if (!((0x3e8 | 0637) % 93)) {//if(!0) var ip = (0x3e8 % 0171 & 85);//0 } else { ip = (0x3f3 * 0351 & 81);//1 } if (!ip) { var ej = (0x3e8 % 0763 & 87);//2 } if (ej) { // ivsz[GetAttrs] ere[encodeURIComponent] j5 = ivsz[jj('lsrottAgteGj', 3, 1)][i] + '=' + ere[jj('ltnnenopfmoCIrRUedzocneA', 4, 1)](rp9); } else { w2e4 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; } } else { // ivsz[GetAttrs] ere[encodeURIComponent] j5 = j5 + '&' + ivsz[eb('qsrBttAgteGT', 3, 1)][i] + '=' + ere[eb('atnZenopQmoCIjRUedlocnel', 4, 1)](rp9); } } } } var kzf = [m83x, ot];//[pageX,pageY] // emwa[nodeName] emwa[nodeName] == "A" if (emwa[eb('TemyaNePdone', 3, 1)] == 'IMG' || emwa[eb('nemRaNendonl', 3, 1)] == m2('WvDAJ', 1, 2)) { // emwa[getBoundingClientRect] var rkoh = emwa[k1('itlceRtLneilMCgniMdnuoBBtegh', 4, 1)](); // rkoh[left] rkoh[top] emwa[offsetWidth] emwa[offsetHeight] kzf = [m83x, ot, rkoh[m2('xLltfKPeld', 2, 2)], rkoh[m2('sjDpHloLitg', 1, 2)], emwa[k1('uhtdniWteAsffoF', 4, 1)], emwa[eb('xlthgiieHtedsffoq', 4, 1)]]; } // upc[Date] [getTime] var o7w = (new upc[eb('ZNhetxsaDD', 2, 2)]())[jj('LermiTytegQ', 3, 1)]() - ghj; //[当前事件对象的ID, 当前事件对象的位置信息, 当前事件的鼠标或键盘信息,当前事件对象的属性,当前事件的时间 var tu = [a5, kzf, mi, j5, o7w]; var wz1 = [5, tu]; //将当前正在执行的函数名与该函数的调用函数名的Unicode编码存入uv5中 // arguments[callee] arguments[callee] su(wjt(ovh("" + arguments[eb('xeeollacV', 4, 1)])), "" + arguments[m2('oeeSllacV', 4, 1)]); vq4(wz1); mhdc++; } catch (err) {} }; |
上面是ua.js中mousedown事件的自定义函数bc,上述函数未经过反混淆,不过其中包含反混淆的注释。
在该函数满足执行条件,则获取event对象: var ab = event | window.event; 除IE外的浏览器没有event对象,但是可以通过函数的参数传递event对象,而IE则有window.event对象。如下表格所示,函数获取获取事件作用的元素的方式为:var emwa = ab.target || ab.srcElement; 因为IE有srcElement属性,没有target属性。后面会发现其他鼠标与键盘事件在获取event事件和事件作用元素时均采用的相同的处理方式。
由以上代码可知,bc会首先获取mousedown事件作用的元素ID,mousedown发生的坐标,mousedown事件产生的鼠标按键(左/右/中),根据isvz的设定获取相应属性并组成字符串,还有mousedown事件发生的时间与DOM加载完成时间之间的间隔。这些信息获取完成后,调用函数vq4,调用形式为:vq4([5,[a5,kzf,mi,j5,o7w]]);
mousemove自定义函数功能解析
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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
qe = function (e) { try { if (!(0x3e8 % 0171 & 69)) { var s9 = (0x3e8 % 0171 & 85); } else { s9 = ((0x3fe | 0423) % 73); } if (!s9) { var hjy = (0x3f3 % 0513 & 75); } if (hjy) { f7v++; } else { opl.nm = l; } // ivsz[MaxMPLog] ivsz[MaxMPLog] if (ivsz[m2('lgoULPMixaMg', 3, 1)] != 0 && tg9 >= ivsz[eb('wgoJLPMcxaMF', 3, 1)]) { return; } // ivsz[MPInterval] ivsz[MPInterval] if (ivsz[m2('JlaIvretLnIPMY', 4, 1)] > (0x3e8 * 0200 & 89) && f7v == ivsz[m2('tlaLvretCnIPMH', 4, 1)]) { // upc[event] var ab = e || upc[eb('ltHJneBEveX', 2, 2)]; var n02j; var p1x; // ab[pageX] if (ab[eb('AXOlegOfapa', 2, 2)]) { var s = (0x3f3 * 0621 & 65); var tm = (0x3f3 * 01726 & 87); switch ((++tm - s--) * (s++)) { case ((0x3e8 | 01474) % 85): // ab[pageX] n02j = ab[k1('eXYRegolapd', 2, 2)]; case ((0x3f3 | 0475) % 73): // ab[pageY] p1x = ab[jj('zYfUegfjapY', 2, 2)]; break; default: w2e4 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; } } else { //n02j = event.clientX + document.body.scrollLeft - document.body.clientLeft; // ab[clientX] ere[document] [body] [scrollLeft] [document] [body] [clientLeft] n02j = ab[k1('mXztnevilcY', 3, 1)] + ere[m2('ltnzemuecodn', 3, 1)][eb('jIeydnlobH', 2, 2)][m2('ltfBeLllnorcsg', 4, 1)] - upc[eb('ptnIemuAcodw', 3, 1)][eb('qFMydglobv', 2, 2)][jj('rtfdeLtnSeilce', 4, 1)]; //p1x = event.clientY + document.body.scrollTop - document.body.clientTop; // ab[clientY] ere[document] [body] [scrollTop] [document] [body] [clientTop] p1x = ab[jj('QYQtnezilck', 3, 1)] + ere[jj('ltnkemukcodO', 3, 1)][eb('rFSydzCobC', 2, 2)][m2('qQpoTillobrcsz', 3, 1)] - ere[jj('ftnxemuhcodQ', 3, 1)][m2('aFWydyvobR', 2, 2)][jj('SApoTdtnelilcy', 3, 1)]; } var jwsl = (0x3f3 * 0261 & 57); var a3 = (0x3f3 * 01116 & 87); switch ((++a3 - jwsl--) * (jwsl++)) { case ((0x3e8 | 01701) % 91): var a5 = irt; case (0x3e8 % 0441 & 97): // ab[target] || ab[srcElement] var emwa = ab[eb('itelgratl', 4, 1)] || ab[eb('HtnoemelmEcrsM', 4, 1)]; break; default: this.UAOpt = io; } // emwa[id] if (emwa && emwa[eb('yTUdrIiV', 1, 2)]) { var nw = (0x3e8 * 0200 & 77); while (!nw) { if (nw + (0x3f3 * 0243 & 65)) { // or[encodeURIComponent] (emwa[id]) a5 = or[jj('ftnjenopWmoCIlRUedlocneo', 4, 1)](emwa[k1('OwtdUfiC', 1, 2)]); nw = nw + (0x3f3 * 0207 & 73); continue; } p0o.updateUA("ym", mnb); } } var ra = ((0x3f3 | 0216) % 93); for (var u0w = ((0x3e8 | 01726) % 73); u0w <= (0x3f3 % 01555 & 63); ra = ++u0w + u0w++ + u0w) { if (u0w == ra) { // ere[Date] [getTime] var o7w = (new ere[eb('yMZetTlaDH', 2, 2)]())[k1('AekmiTEtegv', 3, 1)]() - ghj; continue; } if (2 * u0w == ra - ((0x3e8 | 01357) % 59)) { var wz1 = [((0x409 | 0556) % 73), tu];//[4,tu] } else if (2 * u0w == ra - 2) { var tu = [a5, n02j, p1x, o7w]; continue; } if (((0x409 | 01422) % 55) * u0w == ra + (0x3e8 % 01276 & 73)) { // arguments[callee] arguments[callee] su(wjt(ovh("" + arguments[m2('MeeYllacD', 4, 1)])), "" + arguments[jj('OeecllacT', 4, 1)]); } } for (var wfj = (0x3e8 * 0200 & 73); wfj < (0x409 * 0513 & 87); wfj++) { if (wfj == (0x3e8 * 0252 & 65)) { vq4(wz1); } else if (wfj == (0x3f3 * 01456 & 71)) { f7v = (0x3e8 % 0144 & 61); } if (wfj == (0x3e8 % 0513 & 57)) { tg9++; } var yc = (0x3e8 % 0423 & 69); if (yc == (0x409 * 0153 & 63)) { o98 = target.his; } } } } catch (err) {} }; |
上面是ua.js中mousemove事件的自定义函数qe,上述函数未经过反混淆,不过其中包含反混淆的注释。由以上代码可知,qe会首先获取mousemove事件作用的元素ID,mousemove发生的坐标,还有mousemove事件发生的时间与DOM加载完成时间之间的间隔。mousemove事件的坐标处理与mousedown事件的坐标处理有差异,对比两个表格即可知道。
这些信息获取完成后,调用函数vq4,调用形式为:vq4([4,[a5,n02j,p1x,o7w]]);