js-confuser 1.7.2 → 2.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug_report.md +6 -4
- package/.github/workflows/node.js.yml +1 -1
- package/CHANGELOG.md +105 -0
- package/Migration.md +57 -0
- package/README.md +23 -913
- package/dist/constants.js +69 -13
- package/dist/index.js +108 -152
- package/dist/obfuscator.js +316 -118
- package/dist/options.js +1 -109
- package/dist/order.js +30 -30
- package/dist/presets.js +47 -45
- package/dist/probability.js +25 -32
- package/dist/templates/bufferToStringTemplate.js +9 -0
- package/dist/templates/deadCodeTemplates.js +9 -0
- package/dist/templates/getGlobalTemplate.js +19 -0
- package/dist/templates/integrityTemplate.js +30 -0
- package/dist/templates/setFunctionLengthTemplate.js +9 -0
- package/dist/templates/stringCompressionTemplate.js +10 -0
- package/dist/templates/tamperProtectionTemplates.js +21 -0
- package/dist/templates/template.js +213 -93
- package/dist/transforms/astScrambler.js +100 -0
- package/dist/transforms/calculator.js +70 -127
- package/dist/transforms/controlFlowFlattening.js +1182 -0
- package/dist/transforms/deadCode.js +62 -577
- package/dist/transforms/dispatcher.js +300 -309
- package/dist/transforms/extraction/duplicateLiteralsRemoval.js +88 -189
- package/dist/transforms/extraction/objectExtraction.js +131 -215
- package/dist/transforms/finalizer.js +56 -59
- package/dist/transforms/flatten.js +275 -276
- package/dist/transforms/functionOutlining.js +230 -0
- package/dist/transforms/identifier/globalConcealing.js +217 -103
- package/dist/transforms/identifier/movedDeclarations.js +167 -91
- package/dist/transforms/identifier/renameVariables.js +240 -187
- package/dist/transforms/lock/integrity.js +61 -184
- package/dist/transforms/lock/lock.js +263 -303
- package/dist/transforms/minify.js +431 -436
- package/dist/transforms/opaquePredicates.js +65 -118
- package/dist/transforms/pack.js +160 -0
- package/dist/transforms/plugin.js +179 -0
- package/dist/transforms/preparation.js +263 -163
- package/dist/transforms/renameLabels.js +132 -56
- package/dist/transforms/rgf.js +142 -240
- package/dist/transforms/shuffle.js +52 -145
- package/dist/transforms/string/encoding.js +45 -173
- package/dist/transforms/string/stringCompression.js +81 -126
- package/dist/transforms/string/stringConcealing.js +189 -224
- package/dist/transforms/string/stringEncoding.js +32 -40
- package/dist/transforms/string/stringSplitting.js +54 -55
- package/dist/transforms/variableMasking.js +232 -0
- package/dist/utils/ControlObject.js +125 -0
- package/dist/utils/IntGen.js +46 -0
- package/dist/utils/NameGen.js +106 -0
- package/dist/utils/ast-utils.js +560 -0
- package/dist/utils/function-utils.js +56 -0
- package/dist/utils/gen-utils.js +48 -0
- package/dist/utils/node.js +77 -0
- package/dist/utils/object-utils.js +21 -0
- package/dist/utils/random-utils.js +91 -0
- package/dist/utils/static-utils.js +64 -0
- package/dist/validateOptions.js +122 -0
- package/index.d.ts +1 -17
- package/package.json +27 -22
- package/src/constants.ts +139 -77
- package/src/index.ts +70 -163
- package/src/obfuscationResult.ts +43 -0
- package/src/obfuscator.ts +328 -135
- package/src/options.ts +154 -623
- package/src/order.ts +14 -14
- package/src/presets.ts +39 -34
- package/src/probability.ts +21 -36
- package/src/templates/{bufferToString.ts → bufferToStringTemplate.ts} +5 -54
- package/src/templates/deadCodeTemplates.ts +1185 -0
- package/src/templates/getGlobalTemplate.ts +72 -0
- package/src/templates/integrityTemplate.ts +69 -0
- package/src/templates/setFunctionLengthTemplate.ts +11 -0
- package/src/templates/stringCompressionTemplate.ts +42 -0
- package/src/templates/tamperProtectionTemplates.ts +116 -0
- package/src/templates/template.ts +183 -92
- package/src/transforms/astScrambler.ts +99 -0
- package/src/transforms/calculator.ts +96 -224
- package/src/transforms/controlFlowFlattening.ts +1594 -0
- package/src/transforms/deadCode.ts +85 -628
- package/src/transforms/dispatcher.ts +431 -636
- package/src/transforms/extraction/duplicateLiteralsRemoval.ts +147 -299
- package/src/transforms/extraction/objectExtraction.ts +160 -333
- package/src/transforms/finalizer.ts +63 -64
- package/src/transforms/flatten.ts +439 -557
- package/src/transforms/functionOutlining.ts +225 -0
- package/src/transforms/identifier/globalConcealing.ts +261 -189
- package/src/transforms/identifier/movedDeclarations.ts +228 -142
- package/src/transforms/identifier/renameVariables.ts +252 -258
- package/src/transforms/lock/integrity.ts +84 -260
- package/src/transforms/lock/lock.ts +342 -491
- package/src/transforms/minify.ts +523 -663
- package/src/transforms/opaquePredicates.ts +90 -229
- package/src/transforms/pack.ts +195 -0
- package/src/transforms/plugin.ts +185 -0
- package/src/transforms/preparation.ts +337 -215
- package/src/transforms/renameLabels.ts +176 -77
- package/src/transforms/rgf.ts +293 -386
- package/src/transforms/shuffle.ts +80 -254
- package/src/transforms/string/encoding.ts +26 -129
- package/src/transforms/string/stringCompression.ts +118 -236
- package/src/transforms/string/stringConcealing.ts +255 -339
- package/src/transforms/string/stringEncoding.ts +28 -47
- package/src/transforms/string/stringSplitting.ts +61 -75
- package/src/transforms/variableMasking.ts +257 -0
- package/src/utils/ControlObject.ts +141 -0
- package/src/utils/IntGen.ts +33 -0
- package/src/utils/NameGen.ts +106 -0
- package/src/utils/ast-utils.ts +667 -0
- package/src/utils/function-utils.ts +50 -0
- package/src/utils/gen-utils.ts +48 -0
- package/src/utils/node.ts +78 -0
- package/src/utils/object-utils.ts +21 -0
- package/src/utils/random-utils.ts +79 -0
- package/src/utils/static-utils.ts +66 -0
- package/src/validateOptions.ts +256 -0
- package/tsconfig.json +13 -8
- package/babel.config.js +0 -12
- package/dev.js +0 -8
- package/dist/compiler.js +0 -34
- package/dist/parser.js +0 -59
- package/dist/precedence.js +0 -66
- package/dist/templates/bufferToString.js +0 -108
- package/dist/templates/crash.js +0 -59
- package/dist/templates/es5.js +0 -137
- package/dist/templates/functionLength.js +0 -34
- package/dist/templates/globals.js +0 -9
- package/dist/transforms/antiTooling.js +0 -88
- package/dist/transforms/controlFlowFlattening/controlFlowFlattening.js +0 -1281
- package/dist/transforms/controlFlowFlattening/expressionObfuscation.js +0 -131
- package/dist/transforms/es5/antiClass.js +0 -164
- package/dist/transforms/es5/antiDestructuring.js +0 -193
- package/dist/transforms/es5/antiES6Object.js +0 -185
- package/dist/transforms/es5/antiSpreadOperator.js +0 -35
- package/dist/transforms/es5/antiTemplate.js +0 -66
- package/dist/transforms/es5/es5.js +0 -123
- package/dist/transforms/extraction/classExtraction.js +0 -83
- package/dist/transforms/identifier/globalAnalysis.js +0 -70
- package/dist/transforms/identifier/variableAnalysis.js +0 -104
- package/dist/transforms/lock/antiDebug.js +0 -76
- package/dist/transforms/stack.js +0 -343
- package/dist/transforms/transform.js +0 -350
- package/dist/traverse.js +0 -110
- package/dist/util/compare.js +0 -145
- package/dist/util/gen.js +0 -564
- package/dist/util/guard.js +0 -9
- package/dist/util/identifiers.js +0 -355
- package/dist/util/insert.js +0 -362
- package/dist/util/math.js +0 -19
- package/dist/util/object.js +0 -40
- package/dist/util/random.js +0 -130
- package/dist/util/scope.js +0 -20
- package/docs/ControlFlowFlattening.md +0 -595
- package/docs/Countermeasures.md +0 -63
- package/docs/ES5.md +0 -197
- package/docs/Integrity.md +0 -75
- package/docs/RGF.md +0 -419
- package/samples/example.js +0 -15
- package/samples/high.js +0 -1
- package/samples/input.js +0 -3
- package/samples/javascriptobfuscator.com.js +0 -8
- package/samples/jscrambler_advanced.js +0 -1894
- package/samples/jscrambler_light.js +0 -1134
- package/samples/low.js +0 -1
- package/samples/medium.js +0 -1
- package/samples/obfuscator.io.js +0 -1686
- package/samples/preemptive.com.js +0 -16
- package/src/compiler.ts +0 -35
- package/src/parser.ts +0 -49
- package/src/precedence.ts +0 -61
- package/src/templates/crash.ts +0 -55
- package/src/templates/es5.ts +0 -131
- package/src/templates/functionLength.ts +0 -32
- package/src/templates/globals.ts +0 -3
- package/src/transforms/antiTooling.ts +0 -102
- package/src/transforms/controlFlowFlattening/controlFlowFlattening.ts +0 -2146
- package/src/transforms/controlFlowFlattening/expressionObfuscation.ts +0 -179
- package/src/transforms/es5/antiClass.ts +0 -272
- package/src/transforms/es5/antiDestructuring.ts +0 -294
- package/src/transforms/es5/antiES6Object.ts +0 -267
- package/src/transforms/es5/antiSpreadOperator.ts +0 -56
- package/src/transforms/es5/antiTemplate.ts +0 -98
- package/src/transforms/es5/es5.ts +0 -149
- package/src/transforms/extraction/classExtraction.ts +0 -168
- package/src/transforms/identifier/globalAnalysis.ts +0 -85
- package/src/transforms/identifier/variableAnalysis.ts +0 -118
- package/src/transforms/lock/antiDebug.ts +0 -112
- package/src/transforms/stack.ts +0 -551
- package/src/transforms/transform.ts +0 -453
- package/src/traverse.ts +0 -120
- package/src/types.ts +0 -131
- package/src/util/compare.ts +0 -181
- package/src/util/gen.ts +0 -651
- package/src/util/guard.ts +0 -7
- package/src/util/identifiers.ts +0 -494
- package/src/util/insert.ts +0 -419
- package/src/util/math.ts +0 -15
- package/src/util/object.ts +0 -39
- package/src/util/random.ts +0 -141
- package/src/util/scope.ts +0 -21
- package/test/code/Cash.src.js +0 -1011
- package/test/code/Cash.test.ts +0 -49
- package/test/code/Dynamic.src.js +0 -118
- package/test/code/Dynamic.test.ts +0 -49
- package/test/code/ES6.src.js +0 -235
- package/test/code/ES6.test.ts +0 -42
- package/test/code/NewFeatures.test.ts +0 -19
- package/test/code/StrictMode.src.js +0 -65
- package/test/code/StrictMode.test.js +0 -37
- package/test/compare.test.ts +0 -104
- package/test/index.test.ts +0 -249
- package/test/options.test.ts +0 -132
- package/test/presets.test.ts +0 -22
- package/test/probability.test.ts +0 -44
- package/test/templates/template.test.ts +0 -14
- package/test/transforms/antiTooling.test.ts +0 -52
- package/test/transforms/calculator.test.ts +0 -78
- package/test/transforms/controlFlowFlattening/controlFlowFlattening.test.ts +0 -1274
- package/test/transforms/controlFlowFlattening/expressionObfuscation.test.ts +0 -192
- package/test/transforms/deadCode.test.ts +0 -85
- package/test/transforms/dispatcher.test.ts +0 -457
- package/test/transforms/es5/antiClass.test.ts +0 -427
- package/test/transforms/es5/antiDestructuring.test.ts +0 -157
- package/test/transforms/es5/antiES6Object.test.ts +0 -245
- package/test/transforms/es5/antiTemplate.test.ts +0 -116
- package/test/transforms/es5/es5.test.ts +0 -110
- package/test/transforms/extraction/classExtraction.test.ts +0 -86
- package/test/transforms/extraction/duplicateLiteralsRemoval.test.ts +0 -200
- package/test/transforms/extraction/objectExtraction.test.ts +0 -491
- package/test/transforms/flatten.test.ts +0 -721
- package/test/transforms/hexadecimalNumbers.test.ts +0 -62
- package/test/transforms/identifier/globalConcealing.test.ts +0 -72
- package/test/transforms/identifier/movedDeclarations.test.ts +0 -275
- package/test/transforms/identifier/renameVariables.test.ts +0 -621
- package/test/transforms/lock/antiDebug.test.ts +0 -66
- package/test/transforms/lock/browserLock.test.ts +0 -129
- package/test/transforms/lock/countermeasures.test.ts +0 -100
- package/test/transforms/lock/integrity.test.ts +0 -161
- package/test/transforms/lock/lock.test.ts +0 -204
- package/test/transforms/lock/osLock.test.ts +0 -312
- package/test/transforms/lock/selfDefending.test.ts +0 -68
- package/test/transforms/minify.test.ts +0 -575
- package/test/transforms/opaquePredicates.test.ts +0 -43
- package/test/transforms/preparation.test.ts +0 -157
- package/test/transforms/renameLabels.test.ts +0 -95
- package/test/transforms/rgf.test.ts +0 -378
- package/test/transforms/shuffle.test.ts +0 -135
- package/test/transforms/stack.test.ts +0 -573
- package/test/transforms/string/stringCompression.test.ts +0 -120
- package/test/transforms/string/stringConcealing.test.ts +0 -299
- package/test/transforms/string/stringEncoding.test.ts +0 -95
- package/test/transforms/string/stringSplitting.test.ts +0 -135
- package/test/transforms/transform.test.ts +0 -66
- package/test/traverse.test.ts +0 -139
- package/test/util/compare.test.ts +0 -34
- package/test/util/gen.test.ts +0 -121
- package/test/util/identifiers.test.ts +0 -253
- package/test/util/insert.test.ts +0 -142
- package/test/util/math.test.ts +0 -5
- package/test/util/random.test.ts +0 -71
- /package/dist/{types.js → obfuscationResult.js} +0 -0
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
// Job ID: kvfcj22weki4
|
|
2
|
-
let nYuib;
|
|
3
|
-
!(function () {
|
|
4
|
-
const s2jN = Array.prototype.slice.call(arguments);
|
|
5
|
-
return eval(
|
|
6
|
-
"(function QCni(zSu){const bqx=jCeb(zSu,zU1(QCni.toString()));try{let bs4=eval(bqx);return bs4.apply(null,s2jN);}catch(DZ6){var XmZ=(0x21786%3);while(XmZ<(80176-0o234266))switch(XmZ){case (0o1000131%0x10013):XmZ=(0o204610-67854);{console.log('Error: the code has been tampered!');return}break;case (0x75bcd15-0O726746425):XmZ=DZ6 instanceof SyntaxError?(0o400065%65556):(0x40236%0o200157);break;}throw DZ6;}function zU1(ThU){let vPW=1842049150;var PcP=(0x40137%0o200101);{let rKR;while(PcP<(0o227720-77640)){switch(PcP){case (0o1000467%65601):PcP=(0o400342%0x10048);rKR=(0x21786%3);break;case (0o600502%65616):PcP=rKR<ThU.length?(0O334664274-0x37368B9):(0o222460-0x124A8);break;case (0O334664274-0x37368B9):PcP=(1011010-0O3666474);{vPW^=(ThU.charCodeAt(rKR)*(15658734^0O73567354)+ThU.charCodeAt(rKR>>>(0O73567354%6)))^1195825704;}break;case (72559687&0O312111266):PcP=(0o213154-0x1161A);rKR++;break;}}}let rMob=\"\";var Tjrb=(0o600475%65611);{let nHjb;while(Tjrb<(0x20171%0o200152)){switch(Tjrb){case (0O3153050563-0x19AC516B):Tjrb=(0o203150-0x10616);nHjb++;break;case (0x10BF4-0o205701):Tjrb=(0O3153050563-0x19AC516B);{const Pemb=vPW%(0o400131%0x1001B);vPW=Math.floor(vPW/(131173%0o200041));rMob+=Pemb>=(0o203030-0x105FE)?String.fromCharCode((0o212120-70671)+(Pemb-(0x3006E%0o200034))):String.fromCharCode((131261%0o200056)+Pemb);}break;case (0o214450-0x118CC):Tjrb=(0o400336%0x10046);nHjb=(0x21786%3);break;case (72916-0o216202):Tjrb=nHjb<(0O3153050563-0x19AC516B)?(0o206762-0x10DBF):(0o203042-66949);break;}}}return rMob;}function jCeb(L9gb,fx9){L9gb=decodeURI(L9gb);let H4bb=(0x75bcd15-0O726746425);let Xk2ub=\"\";var zS4ub=(0o210100-0x11020);{let TfXub;while(zS4ub<(0x13ED0-0o237112)){switch(zS4ub){case (0o201356-0x102A3):zS4ub=(0o203650-67398);{Xk2ub+=String.fromCharCode(L9gb.charCodeAt(TfXub)^fx9.charCodeAt(H4bb));H4bb++;var vNZub=(0o210376-0x110A7);while(vNZub<(0x302A4%0o200253))switch(vNZub){case (0o400120%65563):vNZub=(76946-0o225757);{H4bb=(0x21786%3);}break;case (262523%0o200111):vNZub=H4bb>=fx9.length?(68396-0o205422):(0o1001517%65707);break;}}break;case (69876-0o210266):zS4ub=TfXub<L9gb.length?(70036-0o210511):(0o1001242%65671);break;case (262240%0o200020):zS4ub=(72976-0o216322);TfXub=(0x75bcd15-0O726746425);break;case (0o223110-0x125E6):zS4ub=(0o400322%65610);TfXub++;break;}}}return Xk2ub;}})(\"%5C%15%1C%1D%00%15%0B%0E%1A%5B@%08%05%14%0C%02%00%1A%06%1DC%12%1B,%18%5B@%08%11%04%16%14%06%1DI%5B%17%18%12%04%1B%15I(%3EH9J/.4%0E%05%14%0C%02%00%1A%06%1DC%121%1B%19%5B@%08%11%04%16%14%06%1DI%5BB:?J/.@(H:?%3C%09%15%1C%1D%00%15%0B%0E%1AS%3C'%20%0CJH%0F%01%0C%07%16%13%0CA%5CR2.H:?H/XHX8%3CI@_(4.%1E%07%17%0F%17%07%00%1C%0DA%0D1%00%1EAZ%18%13%07%15%01%01%07SK@C:)X2.J:I@_(4XBJ9%3C_RB(%3E%3C%1F%07%01%1D%0A%07%0A%0E%0CA%25%22%1E%1EKH%19%13%11%07%1C%01%0DAJ%02%0D=%03%5BJH98%1D%1A%05%5BJ%3CJH%09%15%1C%1D%00%15%0B%0E%1AS%02%3E%0D%0CJH%0F%01%0C%07%16%13%0CAS/%1CCSUQF%09%15%1C%1D%00%15%0B%0E%1AS$=%12%0CJH%0F%01%0C%07%16%13%0CA%5C%14%01%14%09IKH_%5B(:%09%08JH%5D%0E%07*%16%08%00%5C%0F%0ER%15%16%0F%01%15%1D%1C%07S%04+%0A%0C%5CZ%12%01%06%15%17%13%1ASA%5B%088/%0A%5CZ@YK%16%0A%07%18%5B@ZJJJ%06%1C%14%03%5BJH%1F%07%01%1D%0A%07%0A%0E%0CA=8%02%1EKH%19%13%11%07%1C%01%0DAJ@/.B(%3EH9JUX2.%3E%1C%04%14%1A%10%1D%1A%0C%0FB(%11*%04%5BJ%1A%10%04%00%06%1B%1DCI%05%09%13%19AZJJJ,.#%02%5BJH%1F%07%01%1D%0A%07%0A%0E%0CA%1F%14%0B%1DKH%19%13%11%07%1C%01%0DAJJ_(B(%3E%3C9J/.4XKJI:_(4.8J9%3C)Z@XK%20+%0B%1D%5B@Z%1E%07%17%0F%17%07%00%1C%0DA'%03'%1EAZ%18%13%07%15%01%01%07SK%15%1B%11%11%1C%0FSB:?H/X2.%3E%1C%04%14%1A%10%1D%1A%0C%0FB%06%10%25%04%5BJ%1A%10%04%00%06%1B%1DCIJ%20-?%04%5BJHHI%13%07/%1BKHKH_%5BBRH:?H%09%15%1C%1D%00%15%0B%0E%1AS(*/%0CJH%0F%01%0C%07%16%13%0CA%5CXB(H:?%3C/X2.%3EJJJ_(B(%3E%3C9J/.4ZJJJJ/(B(8JCJ/.4X8J9%3C).B(%3E%3C9J/.4(H:?%3C)Z%14%15%16%0F%01%15%1D%1C%07S%00%002%0C%5CZ%12%01%06%15%17%13%1ASAXH:I:).2X8%3C?L_RB(%3EHII%5C%3E'%02%0EIKH%5E%5BB%5B8J9:UX2.H@I:).B(H:?%3C).B(%3EH9J/(B(8J9%3C)X2X8%3C?%3C_(4.8J9%3C)(BRH:?%3C).@Z%1E%07%17%0F%17%07%00%1C%0DA%1572%1EAZ%18%13%07%15%01%01%07SK%0A3%18%1D%5B@Z8%0A%09%0C%1E%5B@.K%06,%12%1D%5B@Z%1E%07%17%0F%17%07%00%1C%0DA;6=%1EAZ%18%13%07%15%01%01%07SK:?:/.4X8%3CK:_X2XH:9%3C)(B(%3E%3C?:_(4.%3E%1C%04%14%1A%10%1D%1A%0C%0FB%20%038%03%5BJ%1A%10%04%00%06%1B%1DCI'%1B%25%19AZJ:;%08%1D%1FAZ%3EIK%1C%12%06%07%10%17%08%0D%0FT%10%10=%09IK%1A%06%16%1D%06%11%0FBI%13=%1A%1AKHK:%1F%18%04%19KH?I%178%04%1AKHK%1C%12%06%07%10%17%08%0D%0FT%04%1D6%09IK%1A%06%16%1D%06%11%0FB%15%1C%1A%1A(K%12%13%18%1E%5B@ZHI'%137%1BAZJ%3CY%1C%12%06%07%10%17%08%0D%0FT*%1C;%09IK%1A%06%16%1D%06%11%0FBI_(2X8:I:).B(H:?%3C)X2.%3E:I:).2XBJ9%3C).@XKI%09$.%19AZJKJ,:%02%04%5BJHK%1C%1A*%1C%1A%01O%12%5C%5CBTNDPEHO%15%1C%1D%00%15%0B%0E%1AS%1A%02%1A%0BJH%0F%01%0C%07%16%13%0CA!%01+%19KHI(%1D%19%03%5BJJ'%1B%25%19AZH%0E*%07%1F%5B@X&%031%0C%5CZ%14%15%16%0F%01%15%1D%1C%07S6%13%20%0B%5CZ%12%01%06%15%17%13%1ASA&7%22%0FI%5DZ2*%0A%08%0EI%5D.AZ%1E%07%17%0F%17%07%00%1C%0DA%0D%0F%07%19AZ%18%13%07%15%01%01%07SK%06%205%1E%5B@Z8%0A%09%0C%1E%5B@.K,%1A.%1C%5B@Z%1E%07%17%0F%17%07%00%1C%0DA3%0E%02%19AZ%18%13%07%15%01%01%07SK4%04%02%18%5B@Z88%0B%08%18%5B@.KH%1F%07%01%1D%0A%07%0A%0E%0CA%25:%00%18KH%19%13%11%07%1C%01%0DAJ%15%0D%03%0C%1C%05AJ:)X2.JH9JUX2.H@I:)XHX8%3CI@_(4XBJ9%3C)%0E%0F%06%0D%02%16%08%1B%1DI%00(%0D%09I%5D%08%1B%16%17%14%10%0FT%5BBRH:?JUX2.JJJ%06%10%25%04%5BJH%1F%07%01%1D%0A%07%0A%0E%0CA95%0A%18KH%19%13%11%07%1C%01%0DAJ@U(4X8%3CK:_RB(%3E%3C%1F%07%01%1D%0A%07%0A%0E%0CA%1B;%0F%18KH%19%13%11%07%1C%01%0DAJ%15%0D%03%0C%1C%05AJ:)X2.JH9JUX2.H@I:)XHX8%3C?%1C%12%06%07%10%17%08%0D%0FT:*$%09IK%1A%06%16%1D%06%11%0FBI%07%0A$%1FKHK:-%1A%00%1FKH?I%5D%0E%0F%06%0D%02%16%08%1B%1DI%18&;%08I%5D%08%1B%16%17%14%10%0FT%5BBX8J9%3C)(B(%3E%3CKJ%5CX2.H@I:)XAXH:I:).2X8%3CI:).@ZHIIJ/X2.%3E:I:).B%5BHJ9J/.4(H:?%3C%5DZ%14%15%16%0F%01%15%1D%1C%07S&%1B3%0B%5CZ%12%01%06%15%17%13%1ASAR8%3CI:)Z2XBJ9%3C_RB(%3EJCJ/.4%0E%05%14%0C%02%00%1A%06%1DC%06%205%1E%5B@%08%11%04%16%14%06%1DI%5B%088/%0A%5CZ@XK(%078%19%5B@Z%1E%07%17%0F%17%07%00%1C%0DA%0573%18AZ%18%13%07%15%01%01%07SK85(%19%5B@Z88%0B%08%18%5B@.KH%1F%07%01%1D%0A%07%0A%0E%0CA=$#%18KH%19%13%11%07%1C%01%0DAJI9=%18%1EKHKK%5C2%20%19%0AIKH%5DXAXBJ9%3C_RB(%3EH%1F%17%15%01I%100%20%09%5C/%5BY%0BRSSUL%5EY%1CQSRUDB@_KQ%0DUDC%5BCVDR%19ECYB&HNID%1C%5DCSSWPQE%5CF%5BPKM%5CBZBQRQDD%1C%5BCSQVV%5D_AC%1BPPS7GDC%0CSPPEFZZ%3EZ%04%14%1A%10%1D%1A%0C%0FB$%207%02%5BJ%1A%10%04%00%06%1B%1DCI;&%13%1AAZJ:;%08%1D%1FAZ%3EIK%1C%12%06%07%10%17%08%0D%0FT*&%06%08IK%1A%06%16%1D%06%11%0FBF(%06YCTQE%1C%12%06%07%10%17%08%0D%0FT28%0B%08IK%1A%06%16%1D%06%11%0FB%06%224%02%5BJJ%0D)%12%18AZH4.%0E%1F%5B@X%0C)%04%0A%5CZB6%012%0FI%5D%0E%0F%06%0D%02%16%08%1B%1DI&/%0E%09I%5D%08%1B%16%17%14%10%0FT%5B0%3C%16%0AJH%5D(0%1A%0A%0DJH)%5B@%0E%05%14%0C%02%00%1A%06%1DC%16,%13%1F%5B@%08%11%04%16%14%06%1DI%5BK%06%16'%1C%5B@ZIIII/X2(BJ9%3C_RB(%3E%3CI:_(4.%3E%3CI:)Z2X8:I:/X2.%3EJ9J/.4.H:?%3C/X2.%3E:I@_(4.%3E%3CKH_%5BBX8J9%3C)(B(%3E%3CII_X2X8%3C?:_(4.JLI@_(4Z%1E%07%17%0F%17%07%00%1C%0DA%15%09%12%1FAZ%18%13%07%15%01%01%07SKJI:_(4.8J9%3C)ZB%5BHI9J/(HX8%3CI@_(4.H:I:).4.H:?H/X2.%3EHII_RB(%3EJCJ/.@%0E%05%14%0C%02%00%1A%06%1DC8%0B%08%18%5B@%08%11%04%16%14%06%1DI%10%06%00%08I%5DX%1A%0A.%0DJH_%1C%13!%0BIKJ-%3C%1C%18KHI8;%06%02%5BJJ%0D1%00%1EAZH,$%02%1F%5B@X%08,%0C%0C%5CZB:(%0A%0FI%5DX,%092%0BJH_%1C9%07%0EIK%1C%12%06%07%10%17%08%0D%0FT%00%0C)%08IK%1A%06%16%1D%06%11%0FBI/.2(%3E%3CI:)Z2X8%3CI@_(4.%1E%07%17%0F%17%07%00%1C%0DA7%07%17%1FAZ%18%13%07%15%01%01%07SK%16,%13%1F%5B@Z8%0A%09%0C%1E%5B@.K%06(%09%19%5B@Z%1E%07%17%0F%17%07%00%1C%0DA%0D%03%20%18AZ%18%13%07%15%01%01%07S2%0E%14%0B%5CZB&7%22%0FI%5DX%1A%169%0AJH_%1C!%15%08IKJ1%11:%1EKHI0%1B%05%03%5BJJ%11%04.%18AZH%0E%183%1C%5B@X%0C)%04%0A%5CZB6%012%0FI%5D%0E%0F%06%0D%02%16%08%1B%1DI%22%006%09I%5D%08%1B%16%17%14%10%0FT%22%06%05%09IKJ!'*%1EKHI%12%11)%02%5BJJ%0D)%12%18AZH$%002%19%5B@%0E%05%14%0C%02%00%1A%06%1DC%0A;,%1F%5B@%08%11%04%16%14%06%1DI%5BH@I:)XHX8%3CKK%5CXB(H:?%3C/X2.%3EHII_RB(%3EJJJ_(B(%3E%3C9J/.4ZJ%1C%04%14%1A%10%1D%1A%0C%0FB,.#%02%5BJ%1A%10%04%00%06%1B%1DCII:)XHX8%3CKJ%5C%5B%02%14%01%0FJH%5DYAXBJ9%3C_%5BBX8J9%3C)(B(%3E%3CKH%5D%0E%0F%06%0D%02%16%08%1B%1DI%1C%193%0AI%5D%08%1B%16%17%14%10%0FTT5%06SQWTS%0E%0F%06%0D%02%16%08%1B%1DI%22%224%0AI%5D%08%1B%16%17%14%10%0FT%5B$=%12%0CJH%5DXA%14%17'%0AI%5DZ%14%05%02%13B%0A%03?%01N8IR.GCYAPTVR@%5E%5CCWPPREB@_KQ-P@G_FTUVV*C%11BZRW'FC@_KQ%0DUDCYGRDTTAG%5EZOITW@G_%5ES%0EPQEEYBJMJQ%1BGYCRQSDD%0BXCSPZH)H%0F%06%0D%02%16%08%1B%1DI%3E%1B.%0AI%5D%08%1B%16%17%14%10%0FT%5BA%18&;%08I%5DZC%5B%22(%08%08%5CZ@ZHII:)XHX8%3CK%1C%12%06%07%10%17%08%0D%0FT%14%1D5%0BIK%1A%06%16%1D%06%11%0FBI%1F*$%18KHKJ%5C%180%3E%08IKH%09%15%1C%1D%00%15%0B%0E%1AS%20%06*%09JH%0F%01%0C%07%16%13%0CA%5CX2(H:9J/.4X8J9%3C).B(%3E%3C9J/.4(H@I:).4ZHIJJ_(B(%3E%3C9J/.4XKJI:_(4.8J9%3C)Z@YK,81%1F%5B@ZJ%1C%04%14%1A%10%1D%1A%0C%0FB%02%05%09%01%5BJ%1A%10%04%00%06%1B%1DCI#(%1E%1AAZJJJ%02%15#%04%5BJH%1F%07%01%1D%0A%07%0A%0E%0CA1%01*%1BKH%19%13%11%07%1C%01%0DA%112%0E%1EAZH(!6%1E%5B@X%0C%0F%11%0B%5CZB%1C+%07%09I%5DX,%110%0CJH%09%15%1C%1D%00%15%0B%0E%1AS,?%13%08JH%0F%01%0C%07%16%13%0CA%12%06%07%10%17%08%0D%0F%5CZ%12%0EX%1C%04%14%1A%10%1D%1A%0C%0FB%06:%00%00%5BJ%1A%10%04%00%06%1B%1DCIJJUX2.H@I:)ZC%5B2%207%09%5CZ@ZHII:/X2(H@9%3C_RB(%3E%3CI:_(4.%3EJ9%3C)(B(%3E%3C9J/.4.J%1C%04%14%1A%10%1D%1A%0C%0FB%20=%19%00%5BJ%1A%10%04%00%06%1B%1DCIII/X2(BJ9%3C_RB(%3E%3CI:_(4.%3E%3CI:)Z2X8%3C?H%5E%5BBRH:?H_%5BBRH:?J%5CXB(H:?%3C/X2.%3EHK%1C%12%06%07%10%17%08%0D%0FT%10%22%1E%0AIK%1A%06%16%1D%06%11%0FBI%5CXA(H:9@_(4XBJ9%3C)X2X8%3C?%3C)X2.J:I:/X2(H:?%3C_(B(%3E%3C?J/.4(H:?%3C/XHX8%3C?%3C)ZC%5B%00%10%18%09%5CZ@ZHII:)Z%14%15%16%0F%01%15%1D%1C%07S%14'%06%08%5CZ%12%01%06%15%17%13%1ASAXK:I:/RB(%3EJCJ/.4X8J9%3C).4X8%3CK:_(2X8:I:).B(H:?%3C)X2.%3E:I:).2XBJ9%3C).4ZHI+6%3E%18AZJ%1C%04%14%1A%10%1D%1A%0C%0FB83%14%00%5BJ%1A%10%04%00%06%1B%1DCI%15'%10%1AAZJ:%09%0A%19%19AZ%3EI;%14%3C%19AZJ%1C%04%14%1A%10%1D%1A%0C%0FB%127+%01%5BJ%1A%0125%182&;/%0BI%5D.T%1D:%14%0B%03O%10:2%08:%0D%03%20%18AZ%3E%5C%15%151%192&'%00%0BI%5D.A%100%20%09HO%18%1E?%0B%5C%0125%182%5B2%025%0A%5CZ@XK(-%17%1D%5B@Z%3EIKZ%1F%04%25%1B8I/%0D%04%19AZJJJ%20%25%0B%02%5BJH?%5C/.R%0E%05%14%0C%02%00%1A%06%1DC4&%00%1D%5B@%08%11%04%16%14%06%1DI6%012%0FI%5DX%06;%05%0AJH_%00%0C)%08IKJ-$%20%1EKH%1F%07%01%1D%0A%07%0A%0E%0CA!+'%1AKH%19%13%11%07%1C%01%0DA7%136%19AZH(%0B%0B%1E%5B@X&%1B3%0B%5CZB%1C+%07%09I%5DX,%110%0CJH_%00:%09%0EIKJ=0%3E%19KHI%0E%1A%00%03%5BJJ%0D)%12%18AZH$%002%19%5B@%0E%0D8%17%08%16%5D%18NK%07%17%0F%17%07%00%1C%0DI%15;%25%1A@%08%0F%04%16A%25&!%1A%5EC@Z%17%1C%07%00%17A%116?%1AT%1D:%14%0B%03Z%03V%5BS%19UT%16%10%0DBVLR.CA_DWWVSAZS%5BS.WVDEYFRWOQ%0C%11%0AERU%06HO%05%08%01C,0#%1DNAC%0CPRQD@ZAFWWTLC@H%18%0D%07%15T%1C=6%0AZ%15%09%1D%1F%0C%5B.3%20%08H%5BY%1CUQRSBALEVTVV%5DZ%12%00%14%08%16%02%1C%5B$!!%08K%1A%17%12%1A%16CIPWF@XCFQ%0DSDCY@THX,&1%00NKQ%1APDEY6NQ%0DSDA%5EFTHY%0E%206%00NKQ%1ASEDQEFRKZ%16%01%0C%12%08Z%01%00%07%16I%5BS%0EPQFGYCNWTYDC@I.3%20%08I%5B_D%5BTTLD%1C%5BCWRPW%5DH%12%226)%0BJI%20%1D%01%0A%0F%05O%12%01%06%1E%20%09%03%137%1C%0D%16K%1680%1D%5D%0A%1B%02%13!%0E%10%16(%07K%0E6$%1DZ7%5BKWUUGEDC%0CSRRA@XZH%125*%1DZ@H%1E%03%10%04%15%18R%10%02%12%07A%5CC%11BS%22S%22YC%06ASTUVAZS%3E1#%0B%5C%1B',%1A_%1680%1D%5D%05%16%0D%06%16%09K%5BY%0BPQRRCVY%1CQQRQEF@IKQ%0DS@B%5EDSLR%19EGZETHY%03%06%16%08%18X%02%03%12%11SAC%1BURQCALC%0CSRQDB_ZY,0#%1DNAC%0CSRUED%5B%5EUVTVAZR%1C7$%0BJ_H%0B%01%06%00%09Z%09%0E%14%01%06%15%17%13%1AS8&+%08Y%1C%5DH%0F%06%0D%02%16%08%1B%1DI:,%17%0BI%5D%08%1B%16%17%14%10%0FT%22%06%05%09IKJ%07%163%18KHI%0E%0E!%01%5BJJ%0D)%12%18AZH$%002%19%5B@%0E%05%14%0C%02%00%1A%06%1DC%0A3%18%1D%5B@%08%11%04%16%14%06%1DI%5BH:9J/(BR8%3CI@_(4.H:I:).4X8%3C?:_(4.8J9%3C).@XKI%09%06%16%1DAZJKJ%20-?%04%5BJHK%1C%12%06%07%10%17%08%0D%0FT%18%02%1E%09IK%1A%06%16%1D%06%11%0FB%02%11%12%03%5BJJ%11%189%1FAZH%20%15*%1E%5B@X%00%04%03%0B%5CZB%3E%25%02%09I%5DX%06;%05%0AJH_%00%0C)%08IKJ%25:%00%18KH%1F%07%01%1D%0A%07%0A%0E%0CA9%1F%19%19KH%19%13%11%07%1C%01%0DA%1572%1EAZH03%16%19%5B@X&5&%0A%5CZB%1C+%07%09I%5DX,%110%0CJH%09%15%1C%1D%00%15%0B%0E%1AS%0E%1B%04%0BJH%0F%01%0C%07%16%13%0CA%5CXA(H:9@_(4XBJ9%3C)X2X8%3C?%3C)X2.J:I:).@XKJCJ/.@%0E%05%14%0C%02%00%1A%06%1DC(%0B%0B%1E%5B@%08%11%04%16%14%06%1DI%5B*%14+%09%5CZ@(%08%0A%0F%0B%5CZ4%5B%10*%0E%0A%5CZ@%0E%05%14%0C%02%00%1A%06%1DC%02%07%00%1E%5B@%08%11%04%16%14%06%1DI%5B%17%18%12%04%1B%15I%5B8%3CI:)Z@(H@I:).%14%0EJ\")"
|
|
7
|
-
);
|
|
8
|
-
})();
|
|
9
|
-
const Efdj = nYuib.q("\x7F|t");
|
|
10
|
-
const YaUi = nYuib.q("\x22383\x223z`3");
|
|
11
|
-
const AcXi = nYuib.q("G{v3`|fapv3p|wv3z`3|}\x7Fj3g{avv3\x7Fz}v`3\x7F|}t2");
|
|
12
|
-
var cCYf = 0o57060516 - 0xbc614d + (0o57060516 - 0xbc614d);
|
|
13
|
-
!(function () {
|
|
14
|
-
if (nYuib.p) console[Efdj](YaUi + cCYf);
|
|
15
|
-
})();
|
|
16
|
-
console[Efdj](AcXi);
|
package/src/compiler.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { ok } from "assert";
|
|
2
|
-
import { writeFileSync } from "fs";
|
|
3
|
-
import { ObfuscateOptions } from "./options";
|
|
4
|
-
import { Node } from "./util/gen";
|
|
5
|
-
|
|
6
|
-
const escodegen = require("escodegen");
|
|
7
|
-
|
|
8
|
-
export default async function compileJs(tree: any, options: ObfuscateOptions) {
|
|
9
|
-
return compileJsSync(tree, options);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function compileJsSync(tree: any, options: ObfuscateOptions): string {
|
|
13
|
-
var api: any = {
|
|
14
|
-
format: {
|
|
15
|
-
...escodegen.FORMAT_MINIFY,
|
|
16
|
-
},
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
if (!options.compact) {
|
|
20
|
-
api = {};
|
|
21
|
-
|
|
22
|
-
if (options.indent && options.indent != 4) {
|
|
23
|
-
api.format = {};
|
|
24
|
-
api.format.indent = {
|
|
25
|
-
style: { 2: " ", tabs: "\t" }[options.indent] || " ",
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
if (options.debugComments) {
|
|
31
|
-
api.comment = true;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return escodegen.generate(tree, api);
|
|
35
|
-
}
|
package/src/parser.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import * as assert from "assert";
|
|
2
|
-
import { Node } from "./util/gen";
|
|
3
|
-
|
|
4
|
-
const acorn = require("acorn");
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Uses `acorn` to parse Javascript Code. Returns an AST tree.
|
|
8
|
-
* @param code
|
|
9
|
-
* @returns
|
|
10
|
-
*/
|
|
11
|
-
export default async function parseJS(code: string): Promise<{
|
|
12
|
-
type: "Program";
|
|
13
|
-
body: Node[];
|
|
14
|
-
}> {
|
|
15
|
-
assert.ok(typeof code === "string", "code must be a string");
|
|
16
|
-
|
|
17
|
-
try {
|
|
18
|
-
var parsed = parseSync(code);
|
|
19
|
-
return parsed as any;
|
|
20
|
-
} catch (e) {
|
|
21
|
-
throw e;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Parses a snippet code. Returns an AST Tree.
|
|
27
|
-
* @param code
|
|
28
|
-
* @returns
|
|
29
|
-
*/
|
|
30
|
-
export function parseSnippet(code: string): Node {
|
|
31
|
-
return acorn.parse(code, {
|
|
32
|
-
ecmaVersion: "latest",
|
|
33
|
-
allowReturnOutsideFunction: true,
|
|
34
|
-
sourceType: "module",
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Parses synchronously. Attempts to parse as a es-module, then fallbacks to a script.
|
|
40
|
-
* @param code
|
|
41
|
-
* @returns
|
|
42
|
-
*/
|
|
43
|
-
export function parseSync(code): Node {
|
|
44
|
-
try {
|
|
45
|
-
return acorn.parse(code, { ecmaVersion: "latest", sourceType: "module" });
|
|
46
|
-
} catch (e) {
|
|
47
|
-
return acorn.parse(code, { ecmaVersion: "latest", sourceType: "script" });
|
|
48
|
-
}
|
|
49
|
-
}
|
package/src/precedence.ts
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
export const OPERATOR_PRECEDENCE = {
|
|
2
|
-
"||": 3,
|
|
3
|
-
"&&": 4,
|
|
4
|
-
"|": 5,
|
|
5
|
-
"^": 6,
|
|
6
|
-
"&": 7,
|
|
7
|
-
"==": 8,
|
|
8
|
-
"!=": 8,
|
|
9
|
-
"===": 8,
|
|
10
|
-
"!==": 8,
|
|
11
|
-
"<": 9,
|
|
12
|
-
">": 9,
|
|
13
|
-
"<=": 9,
|
|
14
|
-
">=": 9,
|
|
15
|
-
in: 9,
|
|
16
|
-
instanceof: 9,
|
|
17
|
-
"<<": 10,
|
|
18
|
-
">>": 10,
|
|
19
|
-
">>>": 10,
|
|
20
|
-
"+": 11,
|
|
21
|
-
"-": 11,
|
|
22
|
-
"*": 12,
|
|
23
|
-
"%": 12,
|
|
24
|
-
"/": 12,
|
|
25
|
-
"**": 13,
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
// Enables parenthesis regardless of precedence
|
|
29
|
-
export const NEEDS_PARENTHESES = 17;
|
|
30
|
-
|
|
31
|
-
export const EXPRESSIONS_PRECEDENCE = {
|
|
32
|
-
// Definitions
|
|
33
|
-
ArrayExpression: 20,
|
|
34
|
-
TaggedTemplateExpression: 20,
|
|
35
|
-
ThisExpression: 20,
|
|
36
|
-
Identifier: 20,
|
|
37
|
-
Literal: 18,
|
|
38
|
-
TemplateLiteral: 20,
|
|
39
|
-
Super: 20,
|
|
40
|
-
SequenceExpression: 20,
|
|
41
|
-
// Operations
|
|
42
|
-
MemberExpression: 19,
|
|
43
|
-
ChainExpression: 19,
|
|
44
|
-
CallExpression: 19,
|
|
45
|
-
NewExpression: 19,
|
|
46
|
-
// Other definitions
|
|
47
|
-
ArrowFunctionExpression: NEEDS_PARENTHESES,
|
|
48
|
-
ClassExpression: NEEDS_PARENTHESES,
|
|
49
|
-
FunctionExpression: NEEDS_PARENTHESES,
|
|
50
|
-
ObjectExpression: NEEDS_PARENTHESES,
|
|
51
|
-
// Other operations
|
|
52
|
-
UpdateExpression: 16,
|
|
53
|
-
UnaryExpression: 15,
|
|
54
|
-
AwaitExpression: 15,
|
|
55
|
-
BinaryExpression: 14,
|
|
56
|
-
LogicalExpression: 13,
|
|
57
|
-
ConditionalExpression: 4,
|
|
58
|
-
AssignmentExpression: 3,
|
|
59
|
-
YieldExpression: 2,
|
|
60
|
-
RestElement: 1,
|
|
61
|
-
};
|
package/src/templates/crash.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import Template from "./template";
|
|
2
|
-
|
|
3
|
-
export const CrashTemplate1 = Template(`
|
|
4
|
-
var {var} = "a";
|
|
5
|
-
while(1){
|
|
6
|
-
{var} = {var} += "a";
|
|
7
|
-
}
|
|
8
|
-
`);
|
|
9
|
-
|
|
10
|
-
export const CrashTemplate2 = Template(`
|
|
11
|
-
while(true) {
|
|
12
|
-
var {var} = 99;
|
|
13
|
-
for({var} = 99; {var} == {var}; {var} *= {var}) {
|
|
14
|
-
!{var} && console.log({var});
|
|
15
|
-
if ({var} <= 10){
|
|
16
|
-
break;
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
if({var} === 100) {
|
|
20
|
-
{var}--
|
|
21
|
-
}
|
|
22
|
-
};`);
|
|
23
|
-
|
|
24
|
-
export const CrashTemplate3 = Template(`
|
|
25
|
-
try {
|
|
26
|
-
function {$2}(y, x){
|
|
27
|
-
return x;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
var {$1} = {$2}(this, function () {
|
|
31
|
-
var {$3} = function () {
|
|
32
|
-
var regExp = {$3}
|
|
33
|
-
.constructor('return /" + this + "/')()
|
|
34
|
-
.constructor('^([^ ]+( +[^ ]+)+)+[^ ]}');
|
|
35
|
-
|
|
36
|
-
return !regExp.call({$1});
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
return {$3}();
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
{$1}();
|
|
43
|
-
} catch ( {$1}e ) {
|
|
44
|
-
while({$1}e ? {$1}e : !{$1}e){
|
|
45
|
-
var {$1}b;
|
|
46
|
-
var {$1}c = 0;
|
|
47
|
-
({$1}e ? !{$1}e : {$1}e) ? (function({$1}e){
|
|
48
|
-
{$1}c = {$1}e ? 0 : !{$1}e ? 1 : 0;
|
|
49
|
-
})({$1}e) : {$1}b = 1;
|
|
50
|
-
|
|
51
|
-
if({$1}b&&{$1}c){break;}
|
|
52
|
-
if({$1}b){continue;}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
`);
|
package/src/templates/es5.ts
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import Template from "./template";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Provides ES5 polyfills for Array methods
|
|
5
|
-
*
|
|
6
|
-
* Source: https://vanillajstoolkit.com/polyfills/
|
|
7
|
-
*/
|
|
8
|
-
export const ES5Template = Template(`
|
|
9
|
-
if (!Array.prototype.forEach) {
|
|
10
|
-
Array.prototype.forEach = function forEach (callback, thisArg) {
|
|
11
|
-
if (typeof callback !== 'function') {
|
|
12
|
-
throw new TypeError(callback + ' is not a function');
|
|
13
|
-
}
|
|
14
|
-
var array = this;
|
|
15
|
-
thisArg = thisArg || this;
|
|
16
|
-
for (var i = 0, l = array.length; i !== l; ++i) {
|
|
17
|
-
callback.call(thisArg, array[i], i, array);
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
if (!Array.prototype.filter)
|
|
22
|
-
Array.prototype.filter = function(func, thisArg) {
|
|
23
|
-
'use strict';
|
|
24
|
-
if ( ! ((typeof func === 'Function' || typeof func === 'function') && this) )
|
|
25
|
-
throw new TypeError();
|
|
26
|
-
|
|
27
|
-
var len = this.length >>> 0,
|
|
28
|
-
res = new Array(len), // preallocate array
|
|
29
|
-
t = this, c = 0, i = -1;
|
|
30
|
-
if (thisArg === undefined)
|
|
31
|
-
while (++i !== len)
|
|
32
|
-
// checks to see if the key was set
|
|
33
|
-
if (i in this)
|
|
34
|
-
if (func(t[i], i, t))
|
|
35
|
-
res[c++] = t[i];
|
|
36
|
-
else
|
|
37
|
-
while (++i !== len)
|
|
38
|
-
// checks to see if the key was set
|
|
39
|
-
if (i in this)
|
|
40
|
-
if (func.call(thisArg, t[i], i, t))
|
|
41
|
-
res[c++] = t[i];
|
|
42
|
-
|
|
43
|
-
res.length = c; // shrink down array to proper size
|
|
44
|
-
return res;
|
|
45
|
-
};
|
|
46
|
-
if (!Array.prototype.map) {
|
|
47
|
-
Array.prototype.map = function(callback, thisArg) {
|
|
48
|
-
var T, A, k;
|
|
49
|
-
|
|
50
|
-
if (this == null) {
|
|
51
|
-
throw new TypeError('this is null or not defined');
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// 1. Let O be the result of calling ToObject passing the |this|
|
|
55
|
-
// value as the argument.
|
|
56
|
-
var O = Object(this);
|
|
57
|
-
|
|
58
|
-
// 2. Let lenValue be the result of calling the Get internal
|
|
59
|
-
// method of O with the argument "length".
|
|
60
|
-
// 3. Let len be ToUint32(lenValue).
|
|
61
|
-
var len = O.length >>> 0;
|
|
62
|
-
|
|
63
|
-
// 4. If IsCallable(callback) is false, throw a TypeError exception.
|
|
64
|
-
// See: http://es5.github.com/#x9.11
|
|
65
|
-
if (typeof callback !== 'function') {
|
|
66
|
-
throw new TypeError(callback + ' is not a function');
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
|
|
70
|
-
if (arguments.length > 1) {
|
|
71
|
-
T = arguments[1];
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// 6. Let A be a new array created as if by the expression new Array(len)
|
|
75
|
-
// where Array is the standard built-in constructor with that name and
|
|
76
|
-
// len is the value of len.
|
|
77
|
-
A = new Array(len);
|
|
78
|
-
|
|
79
|
-
// 7. Let k be 0
|
|
80
|
-
k = 0;
|
|
81
|
-
|
|
82
|
-
// 8. Repeat, while k < len
|
|
83
|
-
while (k < len) {
|
|
84
|
-
|
|
85
|
-
var kValue, mappedValue;
|
|
86
|
-
|
|
87
|
-
// a. Let Pk be ToString(k).
|
|
88
|
-
// This is implicit for LHS operands of the in operator
|
|
89
|
-
// b. Let kPresent be the result of calling the HasProperty internal
|
|
90
|
-
// method of O with argument Pk.
|
|
91
|
-
// This step can be combined with c
|
|
92
|
-
// c. If kPresent is true, then
|
|
93
|
-
if (k in O) {
|
|
94
|
-
|
|
95
|
-
// i. Let kValue be the result of calling the Get internal
|
|
96
|
-
// method of O with argument Pk.
|
|
97
|
-
kValue = O[k];
|
|
98
|
-
|
|
99
|
-
// ii. Let mappedValue be the result of calling the Call internal
|
|
100
|
-
// method of callback with T as the this value and argument
|
|
101
|
-
// list containing kValue, k, and O.
|
|
102
|
-
mappedValue = callback.call(T, kValue, k, O);
|
|
103
|
-
|
|
104
|
-
// iii. Call the DefineOwnProperty internal method of A with arguments
|
|
105
|
-
// Pk, Property Descriptor
|
|
106
|
-
// { Value: mappedValue,
|
|
107
|
-
// Writable: true,
|
|
108
|
-
// Enumerable: true,
|
|
109
|
-
// Configurable: true },
|
|
110
|
-
// and false.
|
|
111
|
-
|
|
112
|
-
// In browsers that support Object.defineProperty, use the following:
|
|
113
|
-
// Object.defineProperty(A, k, {
|
|
114
|
-
// value: mappedValue,
|
|
115
|
-
// writable: true,
|
|
116
|
-
// enumerable: true,
|
|
117
|
-
// configurable: true
|
|
118
|
-
// });
|
|
119
|
-
|
|
120
|
-
// For best browser support, use the following:
|
|
121
|
-
A[k] = mappedValue;
|
|
122
|
-
}
|
|
123
|
-
// d. Increase k by 1.
|
|
124
|
-
k++;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// 9. return A
|
|
128
|
-
return A;
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
`);
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import Template from "./template";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Helper function to set `function.length` property.
|
|
5
|
-
*/
|
|
6
|
-
export const FunctionLengthTemplate = Template(
|
|
7
|
-
`
|
|
8
|
-
function {name}(functionObject, functionLength){
|
|
9
|
-
{ObjectDefineProperty}(functionObject, "length", {
|
|
10
|
-
"value": functionLength,
|
|
11
|
-
"configurable": true
|
|
12
|
-
});
|
|
13
|
-
return functionObject;
|
|
14
|
-
}
|
|
15
|
-
`,
|
|
16
|
-
`
|
|
17
|
-
function {name}(functionObject, functionLength){
|
|
18
|
-
return {ObjectDefineProperty}(functionObject, "length", {
|
|
19
|
-
"value": functionLength,
|
|
20
|
-
"configurable": true
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
`,
|
|
24
|
-
`
|
|
25
|
-
function {name}(functionObject, functionLength){
|
|
26
|
-
return {ObjectDefineProperty}["call"](null, functionObject, "length", {
|
|
27
|
-
"value": functionLength,
|
|
28
|
-
"configurable": true
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
`
|
|
32
|
-
);
|
package/src/templates/globals.ts
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { ObfuscateOrder } from "../order";
|
|
2
|
-
import Template from "../templates/template";
|
|
3
|
-
import { isBlock } from "../traverse";
|
|
4
|
-
import {
|
|
5
|
-
Node,
|
|
6
|
-
ExpressionStatement,
|
|
7
|
-
CallExpression,
|
|
8
|
-
Identifier,
|
|
9
|
-
} from "../util/gen";
|
|
10
|
-
import { prepend } from "../util/insert";
|
|
11
|
-
import Transform from "./transform";
|
|
12
|
-
|
|
13
|
-
// JsNice.org tries to separate sequence expressions into multiple lines, this stops that.
|
|
14
|
-
export default class AntiTooling extends Transform {
|
|
15
|
-
fnName: string;
|
|
16
|
-
|
|
17
|
-
constructor(o) {
|
|
18
|
-
super(o, ObfuscateOrder.AntiTooling);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
apply(tree: Node) {
|
|
22
|
-
super.apply(tree);
|
|
23
|
-
|
|
24
|
-
if (typeof this.fnName === "string") {
|
|
25
|
-
prepend(
|
|
26
|
-
tree,
|
|
27
|
-
Template(`
|
|
28
|
-
function {fnName}(){
|
|
29
|
-
}
|
|
30
|
-
`).single({ fnName: this.fnName })
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
match(object, parents) {
|
|
36
|
-
return isBlock(object) || object.type == "SwitchCase";
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
transform(object, parents) {
|
|
40
|
-
return () => {
|
|
41
|
-
var exprs: Node[] = [];
|
|
42
|
-
var deleteExprs: Node[] = [];
|
|
43
|
-
|
|
44
|
-
var body: Node[] =
|
|
45
|
-
object.type == "SwitchCase" ? object.consequent : object.body;
|
|
46
|
-
|
|
47
|
-
const end = () => {
|
|
48
|
-
function flatten(expr: Node) {
|
|
49
|
-
if (expr.type == "ExpressionStatement") {
|
|
50
|
-
flatten(expr.expression);
|
|
51
|
-
} else if (expr.type == "SequenceExpression") {
|
|
52
|
-
expr.expressions.forEach(flatten);
|
|
53
|
-
} else {
|
|
54
|
-
flattened.push(expr);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
var flattened = [];
|
|
59
|
-
exprs.forEach(flatten);
|
|
60
|
-
|
|
61
|
-
if (flattened.length > 1) {
|
|
62
|
-
flattened[0] = { ...flattened[0] };
|
|
63
|
-
|
|
64
|
-
if (!this.fnName) {
|
|
65
|
-
this.fnName = this.getPlaceholder();
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// (expr1,expr2,expr3) -> F(expr1, expr2, expr3)
|
|
69
|
-
this.replace(
|
|
70
|
-
exprs[0],
|
|
71
|
-
ExpressionStatement(
|
|
72
|
-
CallExpression(Identifier(this.fnName), [...flattened])
|
|
73
|
-
)
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
deleteExprs.push(...exprs.slice(1));
|
|
77
|
-
}
|
|
78
|
-
exprs = [];
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
body.forEach((stmt, i) => {
|
|
82
|
-
if (stmt.hidden || stmt.directive) {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
if (stmt.type == "ExpressionStatement") {
|
|
86
|
-
exprs.push(stmt);
|
|
87
|
-
} else {
|
|
88
|
-
end();
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
end();
|
|
93
|
-
|
|
94
|
-
deleteExprs.forEach((expr) => {
|
|
95
|
-
var index = body.indexOf(expr);
|
|
96
|
-
if (index !== -1) {
|
|
97
|
-
body.splice(index, 1);
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
}
|