LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

JavaScript前端代码的保护

admin
2024年12月28日 20:43 本文热度 78

一、为什么要保护JavaScript源代码

  • 安全性:公开的代码可能包含敏感信息(如 API 密钥),容易被恶意用户利用。

  • 知识产权:开发者希望保护自己的创意和实现方式,避免被抄袭或不当使用。

  • 防止篡改:保护代码可以防止他人修改代码,从而确保应用的完整性和功能。

  • 提高性能:通过压缩和混淆代码,可以减小文件大小,提升加载速度。

  • 控制用户体验:保护代码可以避免用户随意修改,从而维护产品的一致性和质量。


二、保护JavaScript代码方案

保护JavaScript 代码通常指的是在不直接暴露内部实现逻辑的情况下执行代码。这种方法可以提高代码的安全性和隐私性。

1.简单的变量名替换

混淆前

function add(firstNumber, secondNumber) {

    // 计算两个数字的和

    const sum = firstNumber + secondNumber;

    return sum;

}

console.log(add(1, 2));

混淆后

// 无意义的变量名

function a(b, c) {

    // 计算两个数字的和

    const d = b + c;

    return d;

}

console.log(a(1, 2));

// 肉眼容易识别错误的变量名

function ꄲ(ଠ, ꓳ) {

    // 计算两个数字的和

    const Ο = ଠ + ꓳ;

    return Ο;

}

console.log(ꄲ(1, 2));

常见的变量压缩工具:UglifyJS,Terser,Babel,Webpack等

2.JS运行环境自带的原生方法eval、Function,eval和 Function是JavaScript中两种动态执行代码的方法

const result = eval("2 + 2");

console.log(result); // 输出 4


const add= new Function("a", "b", "return a + b");

console.log(add(2, 3)); // 输出 5

eval方式简单混淆

// 混淆前
console.log("JS代码混淆");

// 混淆后
eval(function (p, a, c, k, e, d) {
   e = function (c) {
       return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
   };
   if (!''.replace(/^/, String)) {
       while (c--) d[e(c)] = k[c] || e(c);
       k = [function (e) {
           return d[e]
       }];
       e = function () {
           return '\\w+'
       };
       c = 1
   }
   while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]);
   return p
}('1.2("0代码混淆")', 62, 3, 'JS|console|log'.split('|'), 0, {}));

上述混淆方案已经隐藏了原始代码,但专业的逆向人员可以快速hook定位到原始代码(最终执行还是要经过eval方法,因此可以通过hook eval函数得到原始的js代码)

3.成熟的混淆工具:JavaScript Obfuscator Tool

官网:https://obfuscator.io/
GitHub: https://github.com/javascript-obfuscator/javascript-obfuscator
混淆前

function hi() {

  console.log("Hello World!");

}

hi();

混淆后

// 原始代码已经被隐藏了,逆向难度也大幅度的进行了增加。

(function(_0x797cec,_0x351d15){var _0xc07c30=_0x2a25,_0x2c1de7=_0x797cec();while(!![]){try{var _0xea6350=-parseInt(_0xc07c30(0x14f))/0x1+parseInt(_0xc07c30(0x15f))/0x2*(parseInt(_0xc07c30(0x15a))/0x3)+-parseInt(_0xc07c30(0x148))/0x4+-parseInt(_0xc07c30(0x15d))/0x5*(-parseInt(_0xc07c30(0x155))/0x6)+parseInt(_0xc07c30(0x14c))/0x7*(-parseInt(_0xc07c30(0x158))/0x8)+-parseInt(_0xc07c30(0x147))/0x9+parseInt(_0xc07c30(0x160))/0xa;if(_0xea6350===_0x351d15)break;else _0x2c1de7['push'](_0x2c1de7['shift']());}catch(_0x131c32){_0x2c1de7['push'](_0x2c1de7['shift']());}}}(_0x2af1,0xe8af2));function hi(){var _0x13f3e6=_0x2a25,_0x266dcf=(function(){var _0x36d674=!![];return function(_0x1b775e,_0x35bbc9){var _0x54b388=_0x36d674?function(){if(_0x35bbc9){var _0x26e639=_0x35bbc9['apply'](_0x1b775e,arguments);return _0x35bbc9=null,_0x26e639;}}:function(){};return _0x36d674=![],_0x54b388;};}()),_0x3e0598=_0x266dcf(this,function(){var _0x311e06=_0x2a25;return _0x3e0598[_0x311e06(0x156)]()[_0x311e06(0x15b)](_0x311e06(0x14b))[_0x311e06(0x156)]()[_0x311e06(0x15c)](_0x3e0598)['search']('(((.+)+)+)+$');});_0x3e0598();var _0x16383c=(function(){var _0x216d4f=!![];return function(_0x2e3d05,_0x2c5ca2){var _0x1f2768=_0x216d4f?function(){var _0x11bda5=_0x2a25;if(_0x2c5ca2){var _0x5a926f=_0x2c5ca2[_0x11bda5(0x14d)](_0x2e3d05,arguments);return _0x2c5ca2=null,_0x5a926f;}}:function(){};return _0x216d4f=![],_0x1f2768;};}()),_0x566c06=_0x16383c(this,function(){var _0x3764d4=_0x2a25,_0x5d41b9=function(){var _0x5d69e3=_0x2a25,_0xdee8cc;try{_0xdee8cc=Function(_0x5d69e3(0x162)+_0x5d69e3(0x159)+');')();}catch(_0x3fdade){_0xdee8cc=window;}return _0xdee8cc;},_0x8f6df0=_0x5d41b9(),_0x3b6296=_0x8f6df0[_0x3764d4(0x153)]=_0x8f6df0[_0x3764d4(0x153)]||{},_0x36b8d7=[_0x3764d4(0x14e),_0x3764d4(0x161),_0x3764d4(0x154),_0x3764d4(0x149),_0x3764d4(0x151),_0x3764d4(0x15e),_0x3764d4(0x157)];for(var _0x676b0d=0x0;_0x676b0d<_0x36b8d7[_0x3764d4(0x150)];_0x676b0d++){var _0x444451=_0x16383c['constructor'][_0x3764d4(0x14a)][_0x3764d4(0x152)](_0x16383c),_0x267b28=_0x36b8d7[_0x676b0d],_0x1b6006=_0x3b6296[_0x267b28]||_0x444451;_0x444451[_0x3764d4(0x163)]=_0x16383c['bind'](_0x16383c),_0x444451[_0x3764d4(0x156)]=_0x1b6006[_0x3764d4(0x156)][_0x3764d4(0x152)](_0x1b6006),_0x3b6296[_0x267b28]=_0x444451;}});_0x566c06(),console[_0x13f3e6(0x14e)](_0x13f3e6(0x146));}function _0x2a25(_0x519e2a,_0x41d08f){var _0x3e8458=_0x2af1();return _0x2a25=function(_0x5083fa,_0x32635e){_0x5083fa=_0x5083fa-0x146;var _0x577a5e=_0x3e8458[_0x5083fa];return _0x577a5e;},_0x2a25(_0x519e2a,_0x41d08f);}function _0x2af1(){var _0x5d2ba9=['7176700leprVC','error','prototype','(((.+)+)+)+$','167930puTNra','apply','log','589597JEdZxZ','length','exception','bind','console','info','42STsqJw','toString','trace','416QiACAb','{}.constructor(\x22return\x20this\x22)(\x20)','354LpPUvI','search','constructor','96835uQhLEk','table','7438CroYlb','53499490WOFDGj','warn','return\x20(function()\x20','__proto__','Hello\x20World!','12060306bHNOfz'];_0x2af1=function(){return _0x5d2ba9;};return _0x2af1();}hi();

JavaScript Obfuscator Tool 混淆的大致思路如下,仅供参考。

// 最初混淆前
console.log("混淆加固");
// 混淆1:
console["log"]("混淆加固");
// 混淆2:
this["console"]["log"]("混淆加固");// 此this为全局对象,window,globalThis
// 混淆3:
var arr = ["console","log","混淆加固"];
this[arr[0]][arr[1]](arr[2]);
// 混淆4:
// 数组打乱顺序
// 混淆5:
// 对数组内的字符串进行加密
// 混淆6:
// 数值混淆
...

4.控制流混淆

控制流混淆是一种代码保护技术,通过改变程序的控制流结构,使得代码逻辑变得复杂和难以理解。它包括重排执行顺序、插入虚假分支、碎片化代码等手段,旨在阻止逆向工程和保护知识产权。这种方法提高了攻击者分析代码的难度,从而增强了软件的安全性。
简单混淆原理

  • 原始代码

// 原始代码

console.log("开始");

for(i=1;i<6;i++){

    console.log(i);

}

console.log("结束");


// 依次输出

// 开始

// 1

// 2

// 3

// 4

// 5

// 结束

...

  • 拆分原始代码,并给原始代码打上对应标签

标签拆分后的代码
1console.log(“开始”);
2i=1;
3i<6;
4i++;
5console.log(i);
6console.log(“结束”);
  • 添加next指向(即每行语句接下来可能的标签位置)

标签拆分后的代码next指向的标签
1console.log(“开始”);2:i=1;
2i=1;3:i<6;
3i<6;5:console.log(i); 6:console.log(“结束”);
4i++;3:i<6;
5console.log(i);4:i++;
6console.log(“结束”);结束:return
  • 转成控制流形式如下

!function (){

    var next = 1;// 初始化

    while(1){

        switch(next){

            case 1:

                console.log("开始");

                next = 2;

                break;

            case 2:

                i=1;

                next = 3;

                break;

            case 3:

                if(i<6){//分支跳转语句

                    next = 5;

                }else{

                    next = 6;

                }

                break;

            case 4:

                i++;

                next = 3;

                break;

            case 5:

                console.log(i);

                next = 4;

                break;

            case 6:

                console.log("结束");

                return;// 结束

        }

    }

}();

  • 进一步混淆:if else 分支语句,转成三目运算;多行表达式语句合并成逗号表达式。

!function (){

    var next = 1;// 初始化

    while(1){

        switch(next){

            case 1:

                console.log("开始"),next = 2;

                break;

            case 2:

                i=1,next = 3;

                break;

            case 3:

                next = i<6 ?next = 5:next = 6;//分支跳转语句

                break;

            case 4:

                i++,next = 3;

                break;

            case 5:

                console.log(i),next = 4;

                break;

            case 6:

                console.log("结束");

                return;// 结束

        }

    }

}();

  • 继续混淆:case块顺序打乱,case语句标签随机。

!function (){

    var next = 666;// 初始化

    while(1){

        switch(next){

            case 89:

                console.log("结束");

                return;// 结束

            case 128:

                i++,next = 856;

                break;

            case 312:

                console.log(i),next = 128;

                break;

            case 666:

                console.log("开始"),next = 963;

                break;

            case 856:

                next = i<6 ?next = 312:next = 89;//分支跳转语句

                break;

            case 963:

                i=1,next = 856;

                break;

        }

    }

}();

  • 继续混淆:switch case转if else语句

!function (){

    var next = 666;// 初始化

    while(1){

        if(next < 100){

            console.log("结束");

            return;// 结束

        }else{

            if(next < 200){

                i++,next = 856;

            }else if(next < 800){

                if(next < 500){

                    console.log(i),next = 128;

                }else{

                    console.log("开始"),next = 963;

                }

            }else{

                if(next < 900){

                    next = i<6 ?next = 312:next = 89;

                }else{

                    i=1,next = 856;

                }

            }

        }

    }

}();

  • 最后还可以将if else语句混淆成条件表达式(三目运算)或逻辑表达式。

// 以转成三目运算为例

!function () {

    var next = 666; // 初始化

    while (1)

        if (next < 100)

            return console.log("结束");// 结束

         else

            next < 200 ? (i++, next = 856) : next < 800 ? next < 500 ? (console.log(i), next = 128) : (console.log("开始"), next = 963) : next < 900 ? next = i < 6 ? next = 312 : next = 89 : (i = 1, next = 856);

}();

  • 以上像console.log语句可以拆分成更多的语句块,增加case语句块数量,增加复杂程度。

// 以转成三目运算为例

// 以console.log(i)为例;

1. obj = console;

2. key = "log";

3. arg = i;

4. obj[key](arg);

至此已很难分辨出最初的for循环语句形式

5.JSVMP-JavaScript虚拟机保护

JSVMP(JavaScript Virtual Machine Protection)是一种针对 JavaScript 代码的保护技术,旨在防止代码被逆向工程和盗用。它通过将原始 JavaScript 代码转换成虚拟机指令或其他中间格式,从而增加代码的安全性。
通过案例简述原理

// 原始代码

console.log(2 * 5 + 8);

  • a.根据执行流程拆分语句

// 1. 2 * 5

// 2. 10 + 8

// 3. console.log(18)

  • b.将拆分后的语句转换成汇编形式

// 1. mul 2, 5    ;  2 乘 5

// 2. add 10, 8   ;  10 加 8

// 3. print 18    ;  打印输出18

  • c.转换成操作栈的形式,需要将常量及执行过程中的值入栈

// 1. push 2     ;  常量2入栈

// 2. push 5     ;  常量5入栈

// 3. mul        ;  取出栈顶两个元素进行乘法运算,并将结果入栈

// 4. push 8     ;  常量8入栈

// 5. add        ;  取出栈顶两个元素进行加法运算,并将结果入栈

// 6. print      ;  将栈顶元素取出,并进行打印输出

  • d.给指令进行编号

// 1 -> push     ; 1 代表push入栈指令

// 2 -> mul      ; 2 代表mul乘法指令

// 3 -> add      ; 3 代表add加法指令

// 4 -> print    ; 4 代表print打印输出指令

  • e. 生成数值指令集

// 1. push 2     ;  1 2

// 2. push 5     ;  1 5

// 3. mul        ;  2

// 4. push 8     ;  1 8

// 5. add        ;  3

// 6. print      ;  4


// instList = [1,2,1,5,2,1,8,3,4];//最终指令集

  • f. 构建解释器

// 1.实现一个简单的解释器

function vmFunc(instList){

    function vm(pc, stack){// pc:当前指令执行的位置,stack:栈

        stack = stack || [];

        let left,right,top;

        while(1){

            let inst = instList[pc++];// 读取指令

            if(inst === undefined){break;}// 超出指令下标时,读取到undefined,退出。

            switch (inst){

                case 1:// push指令:将数值常量入栈

                    stack.push(instList[pc++]);

                    break;

                case 2:// mul指令:取出栈顶两个元素进行乘法运算,并将结果入栈

                    right = stack.pop();

                    left = stack.pop();

                    stack.push(left * right);

                    break;

                case 3:// add指令:取出栈顶两个元素进行加法运算,并将结果入栈

                    right = stack.pop();

                    left = stack.pop();

                    stack.push(left + right);

                    break;

                case 4:// print指令:将栈顶元素取出,并进行打印输出

                    top = stack.pop();

                    console.log(top);

                    break;

                default:// 未实现的指令

                    console.log(`${inst} 未实现`);

                    throw {};

            }

        }

    }

    vm(0);// 初始指令下标位置

}

vmFunc([1,2,1,5,2,1,8,3,4]);// 传入指令集执行

  • g.详细可以看此视频:实现简易版解释器

  • h.增加jsvmp混淆强度

从jsvmp解释器上增强混淆强度:变量名替换,switch语句转成三目运算等等
指令级混淆:动态指令,虚假分支,指令重排等等


三、喵喵盾JS代码混淆加密

喵喵盾是一款专为 JavaScript 代码提供混淆和加密保护的工具,旨在帮助开发者防止代码被逆向工程和盗用。通过高效的混淆算法,喵喵盾能够显著提升代码的安全性,使其在发布后更难被理解和破解。
网址:https://m.ldvmp.com/

功能介绍

    • 1.变量名多种格式

    • a.普通变量名

      b.中文变量名

      c.气泡变量名

      d.标点变量名

      e.特殊变量名

    • 2.格式化字符串,效果如下

  • 3.代码自校验

// 混淆前

function add(a, b){// 函数名会被重置

    return a + b;

}

console.log(add(3, 5));

globalThis.hash = function(str) {// 导出函数,函数名会被保留

   var arr = [],ret=0;

   for (var i=0;i < str.length;i++) {

       arr.push(str.charCodeAt(i) << 16 | str.charCodeAt(++i));

   }

   for(i=0;i < arr.length;i++){

       ret = 0 | (ret << 5) - ret + arr[i];

   }

   return ret.toString(36);

}

console.log(hash("LDVMP")==="b3tmzb");


// 混淆后

;(function YY(Na,PY,JA,AY,LJ,xy,LP){function YA(Ay,ha){var AJ=Ay^ha,NY=PY[AJ],JH=69663-AJ,Am=[];if(LP[JH]!==\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064)return LP[JH];for(var ZA=0;ZA<NY.\u006c\u0065\u006e\u0067\u0074\u0068;ZA++)Am.\u0070\u0075\u0073\u0068(NY.\u0063\u0068\u0061\u0072\u0043\u006f\u0064\u0065\u0041\u0074(ZA)-ZA-ha);return LP[JH]=\u0053\u0074\u0072\u0069\u006e\u0067.\u0066\u0072\u006f\u006d\u0043\u0068\u0061\u0072\u0043\u006f\u0064\u0065.\u0061\u0070\u0070\u006c\u0079(null,Am);}(function Ah(NH,TT,JT,Yi,PH){TT=TT||[],JT=JT||[],Yi=Yi||[];for(var N=JT.\u006c\u0065\u006e\u0067\u0074\u0068,Ta,LY;LY=Na[NH++];)if(LY>103)113>LY&&(LY<107&&((105<LY--||((104>LY||(JT[N++ + ++LY-106]=new(xy(JT[N-- -("",2)])())(),\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064))&&(JT[N++ +LY++-109]=xy(JT[N++ +LY-- -110],JT[(N-=59)-LY++ +154],JT[++N+LY++-52])(JT[(N-=LY--)+158],JT[N-- - --LY+262],JT[(N+=157)+LY-99])()),0))&&(JT[(N-=46)+LY++-60]=JT[(N+=46)-++LY+106]==Na[NH++]-(56080+NH)),!false)||(109>LY||((LY>110||(--LY>108&&(JT[++N+--LY-109]=Na[(JT[N++- --LY+107]={},NH++)]-(LY+39925+NH),!\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064)||(JT[(N-=93)+ ++LY-20]=xy(JT[N++-LY--+199])(JT[--N+LY-- -19],JT[N++-LY--+("",198)],JT[(N+=89)+ ++LY-105])(Na[NH++]-(LY++ +34815+NH))),\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064))&&(LY<112||(JT[N+--LY-111]=Na[(JT[(N+=2)+--LY-111]=\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064,NH++)]-(LY--+11006+NH),false))&&(JT[N+LY++-112]+=Na[NH++]-(-LY+("",48497)+NH)),""))&&(108>LY||(JT[N++-++LY+109]=Na[NH++]-(LY+37593+NH),void 0))&&(NH=Na[(Ta=++NH,--NH)]^++LY+("",8527)+ ++NH),!null)||LY>128&&(135<LY&&(JT[N++ +LY-139]=TT[JT[--N+LY++-139]]=JT[N++-2]-JT[(N-=3)+LY++-("",136)],!null)||(LY>133||(LY>131&&((LY<133||(JT[++N+ ++LY-135]=YA(Na[NH++]^++LY+23050+NH,Na[NH++]^-LY++ +("",56389)+NH),void 0))&&(JT[N++-LY--+130]-=TT[JT[(N-=2)-LY--+("",131)]]),!0)||(LY>130||(LY<130&&(JT[--N- --LY+129]=Na[(JT[(N+=3)-LY--+127]=[],NH++)]-(LY+24390+NH),{})||(JT[++N-LY--+126]=Yi[Yi.\u006c\u0065\u006e\u0067\u0074\u0068-JT[++N+--LY-132]][JT[N+LY-- -133]]=JT[(N-=4)+LY-126]),void 0))&&(JT[--N-LY--+131]=JT[++N+LY-131]<Na[NH++]-(- --LY+48763+NH)),\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064))&&(135>LY||(JT[++N+--LY-135]=[],![]))&&(JT[N++-LY--+134]=PY),!0)||LY<121&&(LY<116&&((114>LY||((115>LY||(JT[(N+=68)- --LY+41]=JT[++N-LY+40][JT[(N-=LY)+41]]=xy(JT[(N-=13)-LY--+170],JT[(N-=68)+LY+10])(JT[(N+=122)-++LY+117])(),!{}))&&(JT[N++ +--LY-113]=[]),!{}))&&(JT[--N- --LY+112]=JT[++N+--LY-112]>Na[NH++]-(--LY+64939+NH)),1)||(LY<118||((LY<120||(JT[(N-=21)+--LY-100]=JT[++N-LY++ +137]!==JT[(N+=19)- --LY+119],0))&&(LY<119&&(xy(JT[N++-LY+117])(JT[N-=3])(),[])||(JT[++N- --LY+114]=LJ(JT[--N-++LY+117],(JT[(N-=96)+--LY-23][0]=JT[(N+=LY--)-25],JT[(N-=24)+("",1)]))())),!true))&&(LY>116||(JT[--N+LY++-117]-=JT[N],!true))&&(JT[(N-=100)-++LY+215]=JT[N+LY-- -21][JT[++N+LY++-20]]=TT[JT[(N+=97)-LY+119]]),!false)||(LY<124||(LY<126&&((125>LY||(JT[++N-LY++ +124]={}[{}],!true))&&(JT[++N+ ++LY-127]=JT[N-- -LY+123][Na[NH++]-(-LY--+("",24379)+NH)]),1)||(LY<128||(JT[(N-=LY)+125]=TT[JT[++N+LY-- -4]]=JT[(N+=38)+87][JT[(N+=87)+1]],null))&&(127>LY||(JT[N-1]*=Na[NH++]-(++LY+52661+NH),!{}))&&(JT[N+ ++LY-128]%=Na[NH++]-(-LY--+24211+NH)),false))&&(122>LY&&(JT[(NH++,N-- -LY++ +120)]&&(NH=Na[--NH]^--LY+20402+ ++NH),!false)||LY<123&&(JT[N--+ ++LY-126]=JT[N--+LY-125][JT[N-++LY+124]]=JT[N+ ++LY-124],{})||(JT[N- --LY+119]=LJ(JT[N-- -LY--+120],[JT[N-- -LY++ +119]])(JT[N+--LY-120])));else if(LY<36){if(LY<10){if(LY<4)(LY>2||((1<LY++||(xy(JT[--N-1],JT[N-- -LY])()(JT[N--+("",1)]),null))&&(JT[N++-++LY+4]={}),0))&&xy(JT[(N-=103)+ ++LY+97],JT[--N-++LY+("",106)])()(JT[(N+=101)-LY--+7]);else if(LY>7)LY<9&&(JT[N-LY+4]=xy(JT[++N+LY-12],JT[N-- -5])()(JT[N--+LY-- -10],JT[(N-=2)+LY++-5]),1)||(JT[(N-=112)+ ++LY+100]=TT[JT[(N-=111)+LY+211]]=+JT[N+=222]);else if(6>LY){if(LY>4)return JT[(N+=2)-++LY+3];else JT[--N-LY+5]=Na[(JT[(N+=3)+--LY-4]=null,NH++)]-(-LY++ +61428+NH);}else++LY<8&&(JT[(N+=18)+--LY-27]=xy(JT[N+ ++LY-("",27)])(JT[N-++LY-("",13)])(TT[JT[(N-=20)- --LY+8]]),!\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064)||(JT[N-- -LY++ +7]=+JT[++N-LY--+8]);}else(LY<18||((26>LY||((LY>32||((LY<29||((LY<31||(LY>31&&((JT[(N-=6)+LY-- -28]||(NH=JT[N-LY++ +36]),(N+=4)+LY++ +13),!false)||(JT[N--+--LY-("",29)]=Na[(JT[(N+=3)-LY--+28]=Na[NH++]-(LY++ +54540+NH),NH++)]^-++LY+3161+NH),\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064))&&(29<LY||(NH=Ta,!true))&&(JT[--N+LY-- -31]-=JT[N]),!1))&&(LY<27&&(JT[(N+=110)-++LY-85]=JT[N-- -112][JT[(N-=110)- --LY+26]]=Na[NH++]-(-LY--+62097+NH),[])||(LY<28||(JT[N-- -2]+=JT[N+LY-("",28)],null))&&(JT[N++-LY--+19]=xy(JT[++N-9])(JT[N--+LY-("",36)],JT[N--+LY++-("",33)],JT[(N+=108)+LY++-140],JT[--N-111])(JT[N++ +LY-- -138],JT[N+LY-137],JT[(N-=115)+LY-21]))),!{}))&&(34<LY||((LY<34||(LJ(JT[N++-LY+31],[JT[N--+LY-39],JT[N--+LY++-36]])(JT[(N-=3)+3]),null))&&(JT[N--+--LY-40]=function(hs,iH,Nm,hP,ia,Z,hL,TY){var PA=Yi.\u0063\u006f\u006e\u0063\u0061\u0074([TT]);return function hJ(){var HZ=\u0061\u0072\u0067\u0075\u006d\u0065\u006e\u0074\u0073.\u006c\u0065\u006e\u0067\u0074\u0068>iH.\u006c\u0065\u006e\u0067\u0074\u0068?iH.\u006c\u0065\u006e\u0067\u0074\u0068:\u0061\u0072\u0067\u0075\u006d\u0065\u006e\u0074\u0073.\u006c\u0065\u006e\u0067\u0074\u0068,Zi=[];for(var ZA=0;ZA<HZ;ZA++)Zi[iH[ZA]]=\u0061\u0072\u0067\u0075\u006d\u0065\u006e\u0074\u0073[ZA];return hL&&(Zi[Z]=\u0061\u0072\u0067\u0075\u006d\u0065\u006e\u0074\u0073),TY&&(Zi[hP]=this),Nm&&\u004f\u0062\u006a\u0065\u0063\u0074.\u0064\u0065\u0066\u0069\u006e\u0065\u0050\u0072\u006f\u0070\u0065\u0072\u0074\u0079(Zi,hs,{\u0076\u0061\u006c\u0075\u0065:hJ,\u0077\u0072\u0069\u0074\u0061\u0062\u006c\u0065:!1}),Ah(ia,Zi,[],PA);};}(JT[(N-=62)+LY+30],JT[(N+=73)-LY+15],JT[N+LY-- -44],JT[(N+=127)-LY-- -109],JT[++N-LY-116],JT[N-- - --LY-114],JT[(N-=108)+--LY-63],JT[(N-=36)-++LY+32])),!1))&&(JT[N--+LY-42]=xy(JT[N+LY-- -40],JT[N-6],JT[(N+=--LY)-37],JT[(N-=82)+46],JT[++N+--LY+("",14)])(JT[--N+LY+16])(JT[(N+=44)+LY-- -("",27)])),\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064))&&(24<LY&&(JT[--N- --LY+23]=Yi[Yi.\u006c\u0065\u006e\u0067\u0074\u0068-JT[(N+=43)-LY-- -19]][JT[(N-=43)+LY++-24]],{})||LY>22&&((23<LY||(JT[++N+ ++LY-27]=JT[N-- - --LY+20]<JT[N--+ ++LY-("",25)],0))&&(JT[++N+--LY-27]=LJ(JT[N++- --LY+("",19)],(JT[--N+LY++-24][0]=JT[N-4],JT[(N-=3)- --LY+23]))()),[])||LY>20&&((21<LY||(JT[++N+--LY-21]=Na[NH++]^LY--+("",54847)+NH,0))&&function(){debugger;}(),!\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064)||LY<19&&(JT[N+--LY-21]=AY(JT[(N+=72)+LY++-92],JT[(N+=LY--)-94])(JT[(N-=LY--)-75],TT[JT[(N-=76)+--LY-13]]),true)||(LY--<20||(JT[N++-1]=TT[JT[--N+LY-20]]=Na[NH++]-(13605+NH),!{}))&&(JT[N++]=Na[(JT[N++-LY++ +18]={},NH++)]-(++LY+22260+NH))),![]))&&(16<LY--&&(N--,!null)||LY<12&&(10>LY&&(YA=JT[--N+ ++LY-10],!"")||(11>LY||(JT[N-++LY+("",8)]=xy(JT[++N-LY--+8],JT[(N+=37)+LY-- -53])(JT[--N-LY++-29])(TT[JT[(N-=40)+LY-- -9]]),void 0))&&(JT[(N+=115)-117]+=TT[JT[(N-=116)+LY-- -("",10)]]),true)||(14>LY||(15>LY&&(JT[++N-LY++ +14]=JT[(JT[(N-=108)+ ++LY+91]=Na[NH++]-(-LY+("",37439)+NH),(N+=109)+ ++LY-20)],!"")||(JT[--N+ ++LY-16]=JT[N++ +LY-("",16)][YA(Na[NH++]^LY--+61273+NH,Na[NH++]^-LY++ +33369+NH)]),0))&&(++LY<14||(JT[N++ +LY-13]=Na[(JT[++N+LY++-16]=Na[NH++]-(LY+11610+NH),NH++)]^-LY+51478+NH,!1))&&(JT[N-- - --LY+9]=LJ(JT[++N-2],[JT[N++-3],TT[JT[(N-=3)+LY-11]]])()));}else if(70>LY){if(LY>60)(LY>67||((64>LY||((LY>65||((65>LY||(JT[(NH++,--N+LY++-65)]&&(NH=Na[--NH]^++LY+("",28023)+ ++NH),![]))&&(JT[N-- -LY+60]=LJ(JT[(N+=--LY)-65],[JT[N-66],JT[++N+--LY-127]|JT[(N-=66)+LY-60]])()),!true))&&(67>LY&&(NH=JT[(Ta=NH,--N-LY--+66)],true)||(JT[++N+ ++LY-69]=LP)),""))&&(61>--LY&&(JT[N++-LY++ +60]=null,1)||62>LY&&(JT[N-LY++ +61]=JT[N++-LY+61],!false)||(JT[++N+LY-65]=JT[N--+ ++LY-66]<TT[JT[--N+ ++LY-64]])),false))&&(68<LY++||(JT[N++ +--LY-71]=AY(JT[--N-LY--+66],JT[N-- -LY--+64])(JT[--N+--LY-64],Na[NH++]-(--LY+8350+NH)),!{}))&&(JT[++N+LY-- -73]=JT[N+ ++LY-73][JT[N-=2]]);else if(LY>52)56>LY++&&(54<--LY&&(LJ(JT[N++ +LY-56],[JT[N-=3]])(),{})||(54>LY||(JT[N-++LY+54]-=Na[NH++]-(LY--+39811+NH),false))&&(JT[N-- - --LY+50]=xy(JT[++N-LY+("",51)],JT[--N-LY++ +("",51)])()(Na[NH++]-(-LY--+22635+NH))),!"")||(LY>60||(--LY>57&&(LY>58&&(JT[N-LY--+("",58)]=TT[JT[N+LY++-59]],{})||(NH=JT[(Ta=NH,N--+--LY-58)]),!0)||57>LY&&(xy(JT[(N+=LY--)-59])(JT[N++-LY++-5],JT[(N-=LY--)-3])(JT[(N-=5)- --LY+57]),!null)||(JT[(JT[(N+=89)+LY-- -146]=[],N-88)]=JT[(N-=87)+ ++LY-59]),false))&&(JT[N++-++LY+("",62)]=Na[(JT[++N-LY++ +61]=[],NH++)]-(--LY+56354+NH));else if(44<LY){if(48>LY)(LY<46||((47>LY||(JT[N++ +LY-47]=JT[N-LY+43],!{}))&&(JT[N++ +LY-- -48]%=TT[JT[(N-=2)- --LY+("",44)]]),![]))&&(JT[N++-++LY+44]=JT[(N-=114)-LY--+157]<TT[JT[(N+=112)- --LY+44]]);else if(51<LY)NH=Na[(Ta=NH,NH++)]^46219+NH;else if(50>LY--)(47<LY--||(JT[(N-=121)-++LY+164]=AY(JT[(N+=--LY)+72],JT[--N-LY--+118])(JT[N- --LY+118],JT[(N+=73)+LY-42]),null))&&(JT[++N-4]+=JT[N--+LY-50][JT[(N-=2)-LY+48]]);else if(49>--LY)JT[(N-=57)+--LY+9]=!TT[JT[(N+=57)+LY-48]];else return PH.\u006d\u004e=JT[(N-=5)-LY++ +53],PH.\u004c\u0069=JT[(N+=7)+LY++-("",54)],PH.\u0061\u0073=0;}else if(42<LY)LY<44&&(JT[N-- -LY--+42]=TT[JT[++N-++LY+42]]=Na[NH++]-(-LY+("",61959)+NH),!"")||(JT[N-- -3][JT[N--+LY-- -45]]=JT[--N-LY--+45]);else if(LY>40)(LY<42||(JT[++N+--LY-44]=TT[JT[(N+=LY++)-44]]=JT[(N-=43)+--LY-41],0))&&(JT[++N-2]=JT[N-- -LY+39]===Na[NH++]-(- --LY+4972+NH));else if(38<LY)(39<LY||(JT[++N+--LY-40]=TT[JT[--N-1]],0))&&(JT[++N-1]=JA[YA(Na[NH++]^-++LY+17824+NH,Na[NH++]^--LY+45065+NH)]);else if(37<LY)try{var hY=JT[N++-4],YP=JT[N++-++LY+("",35)],HA=JT[N++ + ++LY-44],Zy=JT[(N-=7)-LY--+43],hh={\u0061\u0073:1},mh=Ah(NH,TT,[],Yi,hh);if(hh.\u0061\u0073)return mh;if(hh.\u006d\u004e!==void 0)if(hY=hh.\u006d\u004e,hh.\u004c\u0069>1)return PH.\u006d\u004e=hY,PH.\u004c\u0069=--hh.\u004c\u0069,PH.\u0061\u0073=0;}catch(xZ){TT[Zy]=xZ,hh={\u0061\u0073:1},mh=Ah(YP,TT,[],Yi,hh);if(hh.\u0061\u0073)return mh;if(hh.\u006d\u004e!==\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064)if(hY=hh.\u006d\u004e,hh.\u004c\u0069>1)return PH.\u006d\u004e=hY,PH.\u004c\u0069=--hh.\u004c\u0069,PH.\u0061\u0073=0;}finally{hh={\u0061\u0073:1},mh=Ah(HA,TT,[],Yi,hh);if(hh.\u0061\u0073)return PH&&(PH.\u0061\u0073=1),mh;if(hh.\u006d\u004e!==\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064){if(hY=hh.\u006d\u004e,hh.\u004c\u0069>1)return PH.\u006d\u004e=hY,PH.\u004c\u0069=--hh.\u004c\u0069,PH.\u0061\u0073=0;return Ah(hY,TT,[],Yi);}NH=hY;}else 37>LY&&(xy(JT[(N-=LY--)+32],JT[N--+LY-4],JT[N+=--LY])(JT[(N-=++LY)+36])(JT[(N+=33)+--LY-30]),[])||(JT[N++]=YA(Na[NH++]^LY+953+NH,Na[NH++]^LY--+("",65133)+NH));}else if(LY>94)--LY<97&&(95<LY++&&(JT[N++-LY++ +96]=Yi[Yi.\u006c\u0065\u006e\u0067\u0074\u0068-(Na[NH++]^("",7980)+NH)][JT[N-- -LY++ +96]],!false)||(LY++>95||(JT[--N+LY++-97]+=JT[N+LY-97],!true))&&(JT[(N-=15)-++LY+114]=Na[(JT[(N+=17)-LY++ +96]=YA(Na[NH++]^LY--+("",14201)+NH,Na[NH++]^39203+NH),NH++)]^- --LY+61854+NH),!0)||100<LY--&&((LY>100||(JT[N++- --LY+100]=YA(Na[(JT[N++ + ++LY-101]=Na[NH++]-(LY--+61291+NH),NH++)]^("",21762)+NH,Na[NH++]^-LY+40954+NH),\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064))&&(TT[JT[N++-LY+99]]=JT[(N-=3)+LY-- -("",100)]),!"")||98>LY--&&(LY<96&&(JT[++N+--LY-101]=xy(JT[N- --LY+87],JT[N--+LY-- -100],JT[++N+LY++-97],JT[N++ +LY++-97])(JT[N++-LY+90])(JT[(N-=8)-LY++ +98]),!false)||(JT[N++-++LY+("",95)]=Yi[Yi.\u006c\u0065\u006e\u0067\u0074\u0068-JT[N-LY--+95]][JT[(N-=2)+LY-- -97]]),{})||97<LY&&(JT[++N-LY--+96]=JT[--N+LY-98][YA(Na[NH++]^LY--+29549+NH,Na[NH++]^-LY+("",36107)+NH)],true)||(JT[(N-=11)+LY-88]^=TT[JT[(N+=10)-LY--+97]]);else if(LY<79)LY>76&&(76<--LY&&(JT[N+LY++-78]<<=Na[NH++]-(++LY+3707+NH),!"")||JT[(NH++,--N+LY-76)]||(NH=Na[--NH]^LY--+32342+ ++NH),!false)||LY<73&&(71>LY&&(JT[++N-++LY+71]=Na[(JT[N++ + ++LY-73]=Na[NH++]-(1652+NH),NH++)]-(++LY+32837+NH),!"")||(71<LY||(JT[--N-++LY+("",71)]=xy(JT[++N-LY++ +("",71)],JT[--N- --LY+71])()(YA(Na[NH++]^-LY+52174+NH,Na[NH++]^LY+8564+NH)),\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064))&&(NH=JT[--N- --LY+71]),!false)||LY>74&&(75<LY&&(JT[++N-4]=TT[JT[N+ ++LY-81]]=JT[N--+LY-80]|JT[(N-=2)-LY+78],1)||(JT[(N-=LY--)+72]=JT[++N-LY+145]<JT[++N+LY-3][JT[(N+=71)+LY-73]]),!false)||74>LY&&(JT[(N-=--LY)+73]=Na[(JT[(N+=74)-2]=Na[NH++]-(-LY++ +39655+NH),NH++)]-(-LY--+61441+NH),!0)||(JT[N-- -3]=TT[JT[++N- --LY+70]]=JT[--N-LY+72][JT[N--+ ++LY-74]]);else if(87>LY++)(86<LY||((83>LY||(85>LY--&&(LY<83&&(Yi[Yi.\u006c\u0065\u006e\u0067\u0074\u0068-JT[--N-LY--+81]][JT[++N-LY+78]]=JT[(N-=3)+LY-79],true)||(NH=JT[(Ta=NH,N-- -LY--+("",82))]),{})||LY<85&&(JT[N+LY-("",86)]=JT[++N+--LY-86]!==TT[JT[(N-=2)+ ++LY-84]],[])||class xY extends TT[JT[N-- -LY+84]]{},void 0))&&(LY>81||((81<++LY||(JT[(JT[N]=[],N++ +("",1))]=JT[++N-LY+79],!{}))&&(JT[++N-LY--+("",80)]=JT[--N+LY-("",82)]<Na[NH++]-(62136+NH)),\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064))&&(JT[N-2]=LJ(JT[--N],[JT[N+LY-83]])()),![]))&&(JT[--N+LY++-90]=AY(JT[N++ +LY-- -("",90)],JT[N++ +--LY-90],JT[++N-LY++ +82],JT[(N-=5)-LY+89])(Na[NH++]-(- --LY+35488+NH)));else if(93<--LY)return PH.\u0061\u0073=0;else LY<90&&(88>LY&&(JT[--N-LY++ +87]=JT[N++-LY--+88]>Na[NH++]-(-LY++ +35886+NH),!0)||(88>--LY||(JT[++N-("",1)]=TT[Na[NH++]^("",38826)+NH],\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064))&&(JT[(N-=101)-LY--+188]=Na[(JT[(N+=103)-1]=null,NH++)]-(("",40876)+NH)),{})||(LY>91||(LY>90&&(JT[N-LY++ +90]=JT[N-LY--+91]===YA(Na[NH++]^60945+NH,Na[NH++]^++LY+60945+NH),!\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064)||(JT[N--+ ++LY-94]=TT[JT[(N-=LY++)+89]]=JT[(N+=109)+LY++-111]-JT[(N-=19)+ ++LY-93]),null))&&(LY<93&&(JT[N-- -2]+=TT[JT[N-LY++ +92]],1)||(JT[++N-LY+92]=JT[N-++LY+92]));})(("",351));})([73,39587,61411,97,7987,54,39874,82,31,54580,3162,51,94,107,9689,31,54587,3163,51,94,94,107,9665,70,1679,32938,39,111,48415,52,48745,52,45872,52,45874,95,82,70,1706,32953,73,39665,61414,99,82,29,44,62,108,37756,26,62239,17,93,108,37763,29,89,38881,93,16,40091,61887,108,37769,29,83,31,54639,3286,107,9383,108,37776,33,103,108,37780,40,57412,5386,105,9,17,52,48520,108,37794,20,13696,17,22,108,37798,20,13736,17,108,37818,19,22383,82,108,37806,40,57442,5396,105,7,70,1763,33023,99,90,52,45838,17,89,38947,15,37546,111,48509,103,29,13,103,73,39721,61501,59,62,89,38932,69,89,38944,61,48,103,108,37883,107,10325,108,37853,13,103,108,37875,107,10317,108,37890,13,103,108,37872,107,10309,108,37910,13,103,31,54764,1791,52,46092,103,4,61603,89,38987,70,1936,33188,70,1941,33193,73,39881,61655,27,103,108,37900,107,11201,26,62302,17,62,108,37899,26,62308,17,62,108,37906,26,62314,17,93,108,37913,26,62326,17,62,108,37920,26,62329,17,93,108,37927,26,62333,17,52,47050,97,8204,2,93,70,1920,33143,25,21,55244,107,9219,108,37941,33,52,46205,73,39866,61615,70,1938,33160,25,108,37961,107,8852,73,39859,61626,25,5,107,8443,108,38001,52,45272,103,89,39088,62,89,39059,69,89,39102,108,38016,18,5,81,10,52,46269,89,39109,108,37993,11,5,107,10151,89,39116,108,37997,68,8713,1,40,22914,44653,96,26649,52052,61558,57,70,1957,33220,107,9572,108,38012,52,47067,66,108,38045,13,103,108,38053,107,10466,108,38056,6,103,108,38066,107,10522,108,38080,13,103,108,38064,107,10514,135,101,34379,32102,123,103,108,38082,107,10504,108,38095,52,45151,14,11978,52081,79,108,38059,26,62431,17,93,70,2016,33281,107,9378,73,39951,61737,33,103,61,21,54964,107,9623,108,38081,33,52,46876,108,38104,40,65339,2160,16,14023,17892,103,102,61797,52656,14872,52,46782,103,52,48173,70,2058,33318,97,8385,16,779,28676,103,73,40001,61784,59,101,34456,32175,103,70,2080,33337,59,107,11158,107,11028,107,10833,70,2104,33341,52,46015,40,58027,5227,89,39243,69,107,10955,26,62630,17,93,108,38149,26,62615,17,93,108,38156,26,62632,17,62,108,38163,26,62647,17,93,108,38170,26,62637,17,93,108,38177,26,62621,17,93,108,38184,26,62650,17,119,74,17,108,38216,107,10580,108,38306,52,48184,17,73,40086,61862,39,107,11228,89,39319,87,36349,62,65,28237,17,89,39343,80,62679,77,33444,107,9930,30,82,107,10589,107,10997,108,38246,52,45467,108,38266,88,41403,89,39356,81,70,2223,33443,99,28,82,29,108,38241,33,52,45820,60,56967,103,108,38258,43,62464,17,108,38255,20,14158,17,89,39380,89,39388,101,59816,4764,23,77,34367,89,39400,62,16,28710,1303,107,9166,6,78,4377,107,9157,108,38283,52,45071,44,36,61,73,40169,61957,99,70,2255,33503,25,70,2270,33507,99,2,93,29,103,89,39426,131,49244,77,34410,89,39436,106,56690,77,33646,107,8242,52,48960,89,39442,41,5554,77,33634,107,8248,52,45463,70,2295,33545,59,42,52,45973,108,38351,107,9139,70,2292,33567,33,52,46089,21,55841,21,55886,21,55844,108,38359,38,108,38370,85,107,11942,116,82,94,73,40250,62037,39,101,40133,26107,103,107,11955,28,52,46577,93,108,38385,26,62792,17,93,108,38392,26,62796,17,62,108,38399,26,62804,17,93,108,38406,26,62808,17,93,108,38413,26,62816,17,62,108,38420,26,62815,17,119,103,108,38455,43,62631,17,110,40770,16,8864,21889,16,11424,23430,103,108,38450,107,11565,108,38545,52,48918,82,88,41614,70,2429,33650,25,89,39573,73,40353,62114,99,8,54,40635,103,70,2420,33664,99,77,33633,89,39586,5,94,94,61,73,40372,62134,99,108,38484,6,70,2429,33683,25,69,5,103,61,21,53405,107,8812,108,38486,52,48732,62,70,2442,33700,107,9049,70,2446,33710,33,52,46767,70,2467,33717,39,108,38506,100,103,70,2476,103381,108,38528,132,103,73,40414,62184,99,89,39629,69,125,120,77,33510,73,40425,62195,99,89,39670,69,5,70,2497,33785,97,8817,89,39648,128,17,129,25364,103,73,40436,62226,59,73,40438,62219,25,128,17,4,62280,70,2532,33769,99,89,39691,70,2529,33775,25,48,103,70,2530,33788,59,89,39698,108,38593,92,108,38588,46,136,17,108,38588,43,62801,17,89,39713,108,38601,45,77,33161,61,70,2590,33808,25,89,39726,61,70,2592,33815,25,108,38609,6,34,89,39738,15,38339,111,49301,103,52,47956,88,41808,70,2601,33834,99,61,73,40545,62297,99,108,38633,13,73,40531,62304,99,8,103,108,38661,20,14547,17,89,39752,108,38657,45,77,33154,61,73,40568,62323,25,89,39778,61,70,2641,33872,99,89,39778,108,38687,12,108,38690,132,108,38675,132,108,38687,132,56,89,39790,15,38423,111,49369,103,52,48075,73,40588,62358,99,89,39835,61,73,40587,62365,25,108,38706,13,122,5,5,52,47487,32,107,8760,52,48245,89,39839,15,38438,111,49402,103,52,45479,107,8213,52,45468,89,39842,15,38459,111,49415,103,52,45464,70,2726,33946,73,40660,62407,25,108,38750,52,48234,70,2737,33958,70,2740,33961,25,111,49438,82,29,97,9038,123,103,73,40683,62431,70,2755,33976,99,29,5,94,108,38773,5,94,94,5,107,10213,5,55,61,21,57036,107,9042,108,38788,33,52,45809,31,55665,4594,107,8356,108,38797,33,52,47449,83,89,39933,93,16,30756,3358,53,23725,5,44,107,9070,40,6337,58767,71,47440,20658,91,5626,5469,3,5,59,108,38839,132,95,82,4,62562,73,40748,62503,25,73,40750,62507,99,123,103,88,42029,73,40760,62515,99,108,38897,107,8743,89,39981,108,38867,132,28,82,88,42051,73,40777,62532,99,70,2825,34078,99,52,49003,17,89,39985,131,49816,77,35465,89,40011,41,6113,21,56913,52,45187,21,54103,21,53318,21,54126,108,38901,38,107,8821,112,12327,103,70,2892,34113,89,40019,124,25459,82,31,55778,6488,51,107,8804,94,52,46075,39,108,38923,132,95,82,70,2915,34136,73,40849,62597,25,61,73,40826,62602,25,89,40053,107,11879,70,2902,34152,99,8,95,82,73,40844,62617,25,77,34665,70,2944,34165,73,40878,62626,99,89,40093,52,45908,70,2955,34176,108,39008,52,45914,92,82,5,118,61,21,56908,107,8220,108,38982,33,52,48655,61,21,56916,107,11454,108,38994,33,52,48866,108,38997,77,33984,107,8926,70,2958,34211,52,48117,25,2,93,70,2962,34221,99,73,40917,62683,99,44,36,89,40145,93,101,2346,57344,73,40914,62695,99,123,80,63471,77,34538,70,3025,34246,73,40959,62707,99,111,49733,130,107,11288,73,40968,62716,70,3040,34261,25,89,40184,52,48737,97,9338,21,57076,107,8623,108,39065,33,52,48261,73,40990,62739,73,40993,62742,99,108,39079,107,10040,73,40969,62750,25,5,44,36,73,40969,62799,97,9370,107,12254,42,52,47125,70,3087,34308,25,73,41022,62770,47,108,39106,29,40,10367,55080,93,101,3888,58461,61,29,25,2,93,73,41039,62789,99,21,56948,107,8687,108,39129,33,52,49029,73,41054,62803,73,41057,62806,99,108,39146,107,10104,73,41028,62814,25,5,44,36,107,11856,108,39154,52,47832,89,40287,15,38886,111,49845,103,29,6,103,108,39209,107,11624,108,39181,6,103,4,62924,89,40318,70,3161,34493,70,3247,34423,104,103,108,39202,20,15093,17,108,39208,20,15098,17,108,39238,134,103,61,21,56428,107,11749,108,39208,33,21,54717,52,47666,32,17,89,40346,41,6448,21,55730,32,107,8248,52,47490,89,40344,41,6460,93,77,33125,17,89,40367,41,6468,21,55889,52,48992,89,40360,41,6477,62,77,33445,17,89,40383,41,6485,21,57233,52,47472,99,123,103,88,42443,73,41177,62932,99,108,39286,107,9156,89,40387,108,39290,132,28,82,88,42471,73,41194,62949,99,70,3279,34495,99,123,103,88,42476,73,41206,62961,25,108,39330,107,9193,108,39319,52,48809,108,39317,40,22647,42431,103,88,42520,89,40423,70,3362,34628,73,41308,63084,104,103,88,42520,89,40467,73,41304,63105,70,3391,34646,108,39453,35,103,88,42511,89,40477,73,41320,63104,70,3401,34660,104,103,4,63073,89,40457,70,3420,34658,108,39463,52,45806,123,103,4,63089,70,3346,34574,99,108,39367,107,11296,89,40490,108,39389,132,95,82,4,63125,70,3363,34591,25,73,41309,63053,99,123,103,4,63119,70,3375,34603,25,108,39406,107,11333,108,39424,52,48130,114,73,41286,63072,70,3358,34617,108,39411,29,74,17,108,39423,107,8662,26,63905,17,93,108,39426,26,63906,17,62,73,41314,63180,107,10320,26,63918,17,93,108,39445,26,63915,17,62,108,39452,26,63926,17,62,108,39459,26,63925,17,24,103,70,3453,34697,52,46036,59,111,50148,42,123,64,107,10454,52,47453,108,39475,43,63689,17,89,40600,89,40596,101,59028,4064,23,77,33233,73,41379,63155,89,40621,78,5582,108,39505,132,89,40614,89,40626,49,76,107,10417,21,56242,52,49107,97,9790,2,62,73,41397,63183,25,70,3471,34729,25,107,10898,70,3476,34735,99,70,3486,34739,25,44,36,107,8663,70,3487,34747,52,48815,39,108,39548,132,28,82,4,63292,73,41463,63218,25,70,3508,34764,99,123,103,4,63283,70,3544,34772,99,70,3558,34776,99,123,103,70,3538,34782,25,133,45435,13194,67,44,70,3570,34791,70,3573,34794,25,89,40710,108,39611,132,95,82,108,39595,52,49115,111,50282,52,47522,73,41523,63271,25,131,50540,77,33560,108,39611,5,81,77,33127,107,9183,28,52,48008,107,9168,30,82,5,118,31,56527,4419,79,108,39631,52,48751,44,70,3586,34845,70,3589,34848,29,89,40760,15,39373,111,50331,103,17,29,108,39653,5,107,11599,94,107,11506,121,20595,107,11632,94,107,11637,94,31,56536,6746,51,21,55830,52,46506,116,82,70,4343,34897,84,77,36355,60,58412,93,108,39687,26,64058,17,103,21,54850,21,54863,21,54857,108,39703,38,73,41598,63369,103,89,40817,89,40846,73,41597,63379,99,75,77,36397,89,40839,89,40836,111,50405,108,39738,117,17,21,55855,52,46143,59,89,40832,74,17,29,17,89,40862,80,64175,121,22597,89,40868,113,67781,77,35897,70,3709,34961,59,127,55865,103,70,3713,34966,103,89,40883,108,39772,45,77,35868,107,8575,70,3737,34981,99,73,111318,63447,132,52,46625,72,89,40904,41,7015,62,77,36591,17,89,40919,41,7022,21,54862,32,107,11898,52,48960,89,40922,41,7034,93,77,36581,17,89,40941,41,7043,21,54993,52,46304,89,40938,41,7051,62,21,56177,52,47409,58,73,41722,63508,59,111,50514,52,47884,94,108,39836,5,94,94,73,41761,63509,99,5,88,43019,70,3830,35058,99,73,41752,63520,99,123,103,88,43034,73,41773,63528,25,108,39893,107,11824,108,39867,52,47549,73,41758,63540,25,128,17,29,44,62,108,39882,26,64365,17,93,73,41770,63664,107,10856,26,64371,17,62,108,39901,26,64382,17,93,108,39908,26,64393,17,93,108,39915,26,64390,17,62,108,39922,26,64385,17,24,103,73,41831,63607,59,101,41696,19394,103,52,47997,70,3920,35141,70,3923,35144,25,108,39941,11,82,29,59,89,41068,128,17,108,39981,40,63485,314,89,41057,69,16,12555,16930,103,108,39964,40,63369,198,89,41109,69,16,35231,64241,103,108,40017,40,63381,210,89,41113,69,16,61348,40147,103,108,40011,40,63393,222,89,41101,69,16,35686,63498,103,108,40038,52,48173,93,73,41888,63669,99,69,81,29,33,52,47482,108,40017,43,64226,17,108,40024,20,15923,17,89,41137,80,64462,77,33724,108,40032,43,64242,17,89,41157,80,64473,77,33856,108,40038,20,15945,17,89,41167,80,64484,77,33841,89,41173,41,7281,77,36813,107,11640,21,56439,52,46499,61,70,4011,35272,25,73,41976,63734,99,73,41971,63738,99,69,29,97,10355,123,103,4,63815,70,4064,35292,25,73,41969,63754,99,123,103,73,41976,63771,59,108,40095,132,103,107,9130,89,41229,41,7333,77,33538,107,11857,28,82,52,46836,21,54836,21,54852,21,54859,108,40133,38,61,89,41246,55,73,42022,63794,73,42055,63797,25,70,4104,35343,25,69,82,94,107,8619,95,82,94,94,5,55,61,21,55008,107,11752,108,40154,52,46815,58,94,73,42080,63828,73,42083,63831,99,111,50851,82,94,89,41281,41,7405,21,54864,32,107,12149,70,4144,35403,59,111,50867,52,48200,73,42074,63860,59,52,47394,61,89,41333,57,108,40198,29,33,52,47739,31,57076,8142,107,11559,108,40208,33,103,52,47723,73,42110,63883,25,77,33199,107,12000,95,82,5,21,58399,21,58396,21,58370,108,40249,38,88,43408,70,4219,35447,25,108,40262,52,46900,70,4311,35554,35,103,88,43461,89,41356,70,4306,35563,86,38072,103,73,42162,63956,59,89,41386,128,17,73,42166,63964,39,89,41367,74,17,70,4228,35514,107,11296,73,42169,63960,107,11323,73,42166,63972,39,37,22135,86822,52,47111,89,41436,62,89,41449,69,29,97,10577,89,41435,16,2656,32659,107,8990,70,4266,35521,99,49,82,108,40317,5,107,10750,5,118,31,57194,5477,57,108,40327,26,64708,17,93,108,40334,26,64711,17,52,48582,73,42336,64111,98,74,17,108,40393,107,9957,108,40461,109,37684,128,17,108,40400,40,5842,58267,89,41496,69,16,64904,35067,103,108,40378,40,5862,58263,89,41484,69,101,35647,25199,103,108,40405,107,9773,108,40429,52,49018,135,70,4339,35598,70,4342,35601,108,40396,29,61,73,42299,64068,25,89,41521,126,26915,115,17,70,4365,35624,59,111,51097,52,46892,70,4370,35626,103,89,41546,108,40425,63,77,33768,107,9427,70,4383,35642,59,111,51118,52,46501,5,52,46677,107,10365,21,59044,21,59048,21,59045,108,40458,38,108,40453,77,36606,70,4408,35665,103,89,41586,131,51402,77,36592,108,40468,50,121,23277,89,41593,41,7714,77,35170,21,57663,21,57633,21,57658,108,40496,38,108,40526,52,49005,17,70,4456,35702,108,40495,82,29,73,42419,64166,70,4491,35711,25,108,40506,29,40,2408,57889,89,41654,69,61,89,41652,108,40629,29,17,73,42418,64190,108,40524,82,4,64265,70,4512,35740,99,70,4501,35744,99,123,103,88,43727,73,42455,64210,25,108,40591,107,10438,89,41671,108,40566,132,28,82,88,43747,70,4541,35769,99,70,4540,35773,52,47528],["\uBA16\uBA38\uBA37\uBA2F\uBA35\uBA2F","\uC691\uC69E\uC69C\uC69B\uC672\uC698\uC692\uC6A4\uC676\uC6A3\uC699\uC69B","","\uD0F9\uD0FA\uD10C\uD10F\uD10D\uD113\uD10F\uD100\uD101","\uDEFB\uDF08\uDF08\uDF0E\uDF10\uDF0F\uDF13\uDF02\uDF14\uDF10\uDF14","\u141B\u142F\u1431\u1438\u1432\u1431\u1443","\u5BEC\u5BEE\u5BF0\u5BF4\u5BFA\u5BF2\u5BDE\u5C01\u5BFF\u5C01\u5BF7\u5C05\u5C08\u5C0E","\uC9AD\uC9AB\uC9A8\uC9A6\uC9B2","\u723E\u7244\u723B\u723D\u7251\u7229\u7241","\u1856\u1849\u1846\u1858\u184A\u1850","\u7399\u739F\u7399\u73AB\u737D\u73AA\u73A0\u73A2\u737F\u73B3","\uA5CC\uA5EA\uA5FE\uA5F0","\u594A\u597C\u597D\u596D\u5986","\u04BC\u04B0\u04C2\u04B2\u04C0\u04C2\u04B5","\uF5E6\uF5E0\uF5E6\uF5DC\uF5DE\uF5DC\uF5EB","\uF3D0\uF3D6\uF3D1\uF3D7","\uEB2A\uEB23\uEB32\uEB33\uEB22\uEB29\uEB28","\uF448\uF447\uF453\uF454\uF44E\uF45C","\u944C\u943F\u9447\u944D\u944F\u9452\u944C","\uA820\uA827\uA823","\u50F6\u50EB\u50E9\u50D4\u50EB\u50DF\u50DF\u50EB\u50E7\u50E1","\u82B0\u82B3\u82BD\u82AA","\uCDEA\uCDF0\uCDF1\uCDFC\uCDEE\uCDF4","\uB34D\uB347\uB342\uB34C","\uBD3F\uBD40\uBD1E\uBD39\uBD3D\uBD37\uBD3D\uBD37","\uA83F\uA847\uA834\uA83B\uA843","\u1908\u1936\u193B\u1952\u1944\u194A"],function(){return typeof \u0067\u006c\u006f\u0062\u0061\u006c\u0054\u0068\u0069\u0073==="undefined"&&(\u0067\u006c\u006f\u0062\u0061\u006c\u0054\u0068\u0069\u0073=typeof \u0077\u0069\u006e\u0064\u006f\u0077==="undefined"?typeof \u0067\u006c\u006f\u0062\u0061\u006c!=="undefined"?\u0067\u006c\u006f\u0062\u0061\u006c:this:\u0077\u0069\u006e\u0064\u006f\u0077),typeof \u0065\u0078\u0070\u006f\u0072\u0074\u0073==="undefined"||(\u0067\u006c\u006f\u0062\u0061\u006c\u0054\u0068\u0069\u0073.\u0065\u0078\u0070\u006f\u0072\u0074\u0073=\u0065\u0078\u0070\u006f\u0072\u0074\u0073),typeof \u0072\u0065\u0071\u0075\u0069\u0072\u0065==="undefined"||(\u0067\u006c\u006f\u0062\u0061\u006c\u0054\u0068\u0069\u0073.\u0072\u0065\u0071\u0075\u0069\u0072\u0065=\u0072\u0065\u0071\u0075\u0069\u0072\u0065),typeof \u006d\u006f\u0064\u0075\u006c\u0065==="undefined"||(\u0067\u006c\u006f\u0062\u0061\u006c\u0054\u0068\u0069\u0073.\u006d\u006f\u0064\u0075\u006c\u0065=\u006d\u006f\u0064\u0075\u006c\u0065),typeof \u005f\u005f\u0066\u0069\u006c\u0065\u006e\u0061\u006d\u0065==="undefined"||(\u0067\u006c\u006f\u0062\u0061\u006c\u0054\u0068\u0069\u0073.\u005f\u005f\u0066\u0069\u006c\u0065\u006e\u0061\u006d\u0065=\u005f\u005f\u0066\u0069\u006c\u0065\u006e\u0061\u006d\u0065),typeof \u005f\u005f\u0064\u0069\u0072\u006e\u0061\u006d\u0065==="undefined"||(\u0067\u006c\u006f\u0062\u0061\u006c\u0054\u0068\u0069\u0073.\u005f\u005f\u0064\u0069\u0072\u006e\u0061\u006d\u0065=\u005f\u005f\u0064\u0069\u0072\u006e\u0061\u006d\u0065),\u0067\u006c\u006f\u0062\u0061\u006c\u0054\u0068\u0069\u0073;}(),\u004f\u0062\u006a\u0065\u0063\u0074.\u0063\u0061\u006c\u006c.\u0062\u0069\u006e\u0064(\u0041\u0072\u0072\u0061\u0079.\u0062\u0069\u006e\u0064),\u0041\u0072\u0072\u0061\u0079.\u0061\u0070\u0070\u006c\u0079.\u0062\u0069\u006e\u0064(\u004e\u0075\u006d\u0062\u0065\u0072.\u0062\u0069\u006e\u0064),\u004e\u0075\u006d\u0062\u0065\u0072.\u0062\u0069\u006e\u0064.\u0062\u0069\u006e\u0064(\u004f\u0062\u006a\u0065\u0063\u0074.\u0062\u0069\u006e\u0064),[]);

;

  • 4.其他功能如下

其他高级混淆功能介绍:喵喵盾JS代码混淆加固

b站:https://www.bilibili.com/video/BV1XZpEexEbu/

在线JSVMP混淆加固:https://m.ldvmp.com


阅读原文:原文链接


该文章在 2024/12/30 15:48:08 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved