js-confuser 1.7.3 → 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/CHANGELOG.md +70 -0
- package/Migration.md +57 -0
- package/README.md +23 -929
- package/dist/constants.js +65 -14
- package/dist/index.js +108 -160
- package/dist/obfuscator.js +316 -118
- package/dist/options.js +1 -119
- 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 +199 -184
- 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 -587
- package/dist/transforms/dispatcher.js +300 -313
- 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 +214 -135
- package/dist/transforms/identifier/movedDeclarations.js +167 -91
- package/dist/transforms/identifier/renameVariables.js +239 -193
- package/dist/transforms/lock/integrity.js +61 -184
- package/dist/transforms/lock/lock.js +261 -387
- 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 +261 -173
- package/dist/transforms/renameLabels.js +132 -56
- package/dist/transforms/rgf.js +140 -267
- package/dist/transforms/shuffle.js +52 -145
- package/dist/transforms/string/encoding.js +44 -175
- package/dist/transforms/string/stringCompression.js +79 -155
- package/dist/transforms/string/stringConcealing.js +189 -225
- 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 -82
- package/src/index.ts +70 -165
- package/src/obfuscationResult.ts +43 -0
- package/src/obfuscator.ts +328 -135
- package/src/options.ts +149 -658
- package/src/order.ts +14 -14
- package/src/presets.ts +39 -34
- package/src/probability.ts +21 -36
- package/src/templates/bufferToStringTemplate.ts +57 -0
- 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 +149 -157
- package/src/transforms/astScrambler.ts +99 -0
- package/src/transforms/calculator.ts +96 -226
- package/src/transforms/controlFlowFlattening.ts +1594 -0
- package/src/transforms/deadCode.ts +85 -676
- package/src/transforms/dispatcher.ts +431 -640
- package/src/transforms/extraction/duplicateLiteralsRemoval.ts +147 -295
- 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 +255 -266
- package/src/transforms/identifier/movedDeclarations.ts +228 -142
- package/src/transforms/identifier/renameVariables.ts +250 -271
- package/src/transforms/lock/integrity.ts +85 -263
- package/src/transforms/lock/lock.ts +338 -579
- 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 -231
- package/src/transforms/renameLabels.ts +176 -77
- package/src/transforms/rgf.ts +293 -424
- package/src/transforms/shuffle.ts +80 -254
- package/src/transforms/string/encoding.ts +20 -126
- package/src/transforms/string/stringCompression.ts +117 -307
- package/src/transforms/string/stringConcealing.ts +254 -342
- 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 -129
- package/dist/templates/core.js +0 -35
- package/dist/templates/crash.js +0 -28
- 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 -1287
- 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 -83
- package/dist/transforms/identifier/variableAnalysis.js +0 -104
- package/dist/transforms/lock/antiDebug.js +0 -76
- package/dist/transforms/stack.js +0 -349
- package/dist/transforms/transform.js +0 -372
- 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 -14
- 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 -156
- package/dist/util/scope.js +0 -20
- package/docs/ControlFlowFlattening.md +0 -595
- package/docs/Countermeasures.md +0 -70
- package/docs/ES5.md +0 -197
- package/docs/Integrity.md +0 -82
- package/docs/RGF.md +0 -424
- package/docs/RenameVariables.md +0 -116
- package/docs/TamperProtection.md +0 -100
- package/docs/Template.md +0 -117
- 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/bufferToString.ts +0 -136
- package/src/templates/core.ts +0 -29
- package/src/templates/crash.ts +0 -23
- 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 -2153
- package/src/transforms/controlFlowFlattening/expressionObfuscation.ts +0 -179
- package/src/transforms/es5/antiClass.ts +0 -276
- 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 -102
- package/src/transforms/identifier/variableAnalysis.ts +0 -118
- package/src/transforms/lock/antiDebug.ts +0 -112
- package/src/transforms/stack.ts +0 -557
- package/src/transforms/transform.ts +0 -441
- package/src/traverse.ts +0 -120
- package/src/types.ts +0 -133
- package/src/util/compare.ts +0 -181
- package/src/util/gen.ts +0 -651
- package/src/util/guard.ts +0 -17
- 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 -221
- package/src/util/scope.ts +0 -21
- package/test/code/Cash.src.js +0 -1011
- package/test/code/Cash.test.ts +0 -132
- 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 -150
- package/test/presets.test.ts +0 -22
- package/test/probability.test.ts +0 -44
- package/test/templates/template.test.ts +0 -224
- 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 -142
- package/test/transforms/identifier/movedDeclarations.test.ts +0 -275
- package/test/transforms/identifier/renameVariables.test.ts +0 -695
- 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/lock/tamperProtection.test.ts +0 -336
- 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
package/src/order.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Describes the order of transformations.
|
|
3
3
|
*/
|
|
4
|
-
export enum
|
|
4
|
+
export enum Order {
|
|
5
5
|
Preparation = 0,
|
|
6
6
|
|
|
7
7
|
ObjectExtraction = 1,
|
|
8
8
|
|
|
9
9
|
Flatten = 2,
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Lock = 3,
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
RGF = 4,
|
|
14
14
|
|
|
15
15
|
Dispatcher = 6,
|
|
16
16
|
|
|
@@ -18,10 +18,6 @@ export enum ObfuscateOrder {
|
|
|
18
18
|
|
|
19
19
|
Calculator = 9,
|
|
20
20
|
|
|
21
|
-
ControlFlowFlattening = 10,
|
|
22
|
-
|
|
23
|
-
Eval = 11,
|
|
24
|
-
|
|
25
21
|
GlobalConcealing = 12,
|
|
26
22
|
|
|
27
23
|
OpaquePredicates = 13,
|
|
@@ -32,25 +28,29 @@ export enum ObfuscateOrder {
|
|
|
32
28
|
|
|
33
29
|
StringCompression = 18,
|
|
34
30
|
|
|
35
|
-
|
|
31
|
+
VariableMasking = 20,
|
|
36
32
|
|
|
37
33
|
DuplicateLiteralsRemoval = 22,
|
|
38
34
|
|
|
39
|
-
Shuffle =
|
|
35
|
+
Shuffle = 23,
|
|
36
|
+
|
|
37
|
+
ControlFlowFlattening = 24,
|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
MovedDeclarations = 25,
|
|
42
40
|
|
|
43
|
-
|
|
41
|
+
FunctionOutlining = 26,
|
|
44
42
|
|
|
45
43
|
RenameLabels = 27,
|
|
46
44
|
|
|
47
45
|
Minify = 28,
|
|
48
46
|
|
|
49
|
-
|
|
47
|
+
AstScrambler = 29,
|
|
50
48
|
|
|
51
49
|
RenameVariables = 30,
|
|
52
50
|
|
|
53
|
-
ES5 = 31,
|
|
54
|
-
|
|
55
51
|
Finalizer = 35,
|
|
52
|
+
|
|
53
|
+
Pack = 36,
|
|
54
|
+
|
|
55
|
+
Integrity = 37, // Must run last
|
|
56
56
|
}
|
package/src/presets.ts
CHANGED
|
@@ -1,27 +1,17 @@
|
|
|
1
1
|
import { ObfuscateOptions } from "./options";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* - High Obfuscation preset
|
|
5
|
-
* - **Average 90% performance reduction.**
|
|
4
|
+
* - High Obfuscation preset
|
|
6
5
|
*
|
|
7
|
-
*
|
|
8
|
-
* 1. Variable renaming
|
|
9
|
-
* 2. Control flow obfuscation
|
|
10
|
-
* 3. String concealing
|
|
11
|
-
* 4. Opaque predicates
|
|
12
|
-
* 5. Dead code
|
|
13
|
-
* 6. Dispatcher
|
|
14
|
-
* 7. Moved declarations
|
|
15
|
-
* 8. Object extraction
|
|
16
|
-
* 9. Global concealing
|
|
17
|
-
* 10. Minified output
|
|
6
|
+
* **This preset is unsafe and may break your code.**
|
|
18
7
|
*
|
|
19
|
-
*
|
|
20
|
-
* - `rgf` Use at your own risk!
|
|
8
|
+
* Security risks:
|
|
21
9
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
10
|
+
* - Function constructor (`Pack`)
|
|
11
|
+
* - Escapes strict-mode constraints (`Pack`)
|
|
12
|
+
* - Use of `with` statement (`Control Flow Flattening`)
|
|
13
|
+
* - Object.prototype pollution (`Opaque Predicates`)
|
|
14
|
+
* - Bloats file size (`Dead Code` and `String Compression` can add up to 50kb)
|
|
25
15
|
*/
|
|
26
16
|
const highPreset: ObfuscateOptions = {
|
|
27
17
|
target: "node",
|
|
@@ -30,8 +20,8 @@ const highPreset: ObfuscateOptions = {
|
|
|
30
20
|
calculator: true,
|
|
31
21
|
compact: true,
|
|
32
22
|
hexadecimalNumbers: true,
|
|
33
|
-
controlFlowFlattening: 0.
|
|
34
|
-
deadCode: 0.
|
|
23
|
+
controlFlowFlattening: 0.5,
|
|
24
|
+
deadCode: 0.25,
|
|
35
25
|
dispatcher: true,
|
|
36
26
|
duplicateLiteralsRemoval: 0.75,
|
|
37
27
|
flatten: true,
|
|
@@ -43,20 +33,33 @@ const highPreset: ObfuscateOptions = {
|
|
|
43
33
|
opaquePredicates: 0.75,
|
|
44
34
|
renameVariables: true,
|
|
45
35
|
renameGlobals: true,
|
|
46
|
-
shuffle:
|
|
47
|
-
|
|
36
|
+
shuffle: true,
|
|
37
|
+
variableMasking: 0.75,
|
|
48
38
|
stringConcealing: true,
|
|
49
39
|
stringCompression: true,
|
|
50
40
|
stringEncoding: true,
|
|
51
41
|
stringSplitting: 0.75,
|
|
42
|
+
astScrambler: true,
|
|
43
|
+
|
|
44
|
+
// Experimental
|
|
45
|
+
// functionOutlining: false,
|
|
52
46
|
|
|
53
|
-
//
|
|
54
|
-
|
|
47
|
+
// Security risks
|
|
48
|
+
pack: true,
|
|
55
49
|
};
|
|
56
50
|
|
|
57
51
|
/**
|
|
58
|
-
* - Medium Obfuscation preset
|
|
59
|
-
*
|
|
52
|
+
* - Medium Obfuscation preset
|
|
53
|
+
*
|
|
54
|
+
* **This preset is unsafe and may break your code.**
|
|
55
|
+
*
|
|
56
|
+
* Security risks:
|
|
57
|
+
*
|
|
58
|
+
* - Function constructor (`Pack`)
|
|
59
|
+
* - Escapes strict-mode constraints (`Pack`)
|
|
60
|
+
* - Use of `with` statement (`Control Flow Flattening`)
|
|
61
|
+
* - Object.prototype pollution (`Opaque Predicates`)
|
|
62
|
+
* - Bloats file size (`Dead Code` can add up to 50kb)
|
|
60
63
|
*/
|
|
61
64
|
const mediumPreset: ObfuscateOptions = {
|
|
62
65
|
target: "node",
|
|
@@ -66,7 +69,7 @@ const mediumPreset: ObfuscateOptions = {
|
|
|
66
69
|
compact: true,
|
|
67
70
|
hexadecimalNumbers: true,
|
|
68
71
|
controlFlowFlattening: 0.25,
|
|
69
|
-
deadCode: 0.
|
|
72
|
+
deadCode: 0.1,
|
|
70
73
|
dispatcher: 0.5,
|
|
71
74
|
duplicateLiteralsRemoval: 0.5,
|
|
72
75
|
globalConcealing: true,
|
|
@@ -74,18 +77,21 @@ const mediumPreset: ObfuscateOptions = {
|
|
|
74
77
|
minify: true,
|
|
75
78
|
movedDeclarations: true,
|
|
76
79
|
objectExtraction: true,
|
|
77
|
-
opaquePredicates: 0.5,
|
|
78
80
|
renameVariables: true,
|
|
79
81
|
renameGlobals: true,
|
|
80
82
|
shuffle: true,
|
|
81
|
-
|
|
83
|
+
variableMasking: 0.5,
|
|
82
84
|
stringConcealing: true,
|
|
83
85
|
stringSplitting: 0.25,
|
|
86
|
+
astScrambler: true,
|
|
87
|
+
pack: true,
|
|
84
88
|
};
|
|
85
89
|
|
|
86
90
|
/**
|
|
87
|
-
* - Low Obfuscation preset
|
|
88
|
-
*
|
|
91
|
+
* - Low Obfuscation preset
|
|
92
|
+
*
|
|
93
|
+
* A balanced preset that provides basic obfuscation.
|
|
94
|
+
*
|
|
89
95
|
*/
|
|
90
96
|
const lowPreset: ObfuscateOptions = {
|
|
91
97
|
target: "node",
|
|
@@ -94,18 +100,17 @@ const lowPreset: ObfuscateOptions = {
|
|
|
94
100
|
calculator: true,
|
|
95
101
|
compact: true,
|
|
96
102
|
hexadecimalNumbers: true,
|
|
97
|
-
|
|
98
|
-
deadCode: 0.01,
|
|
103
|
+
deadCode: 0.05,
|
|
99
104
|
dispatcher: 0.25,
|
|
100
105
|
duplicateLiteralsRemoval: 0.5,
|
|
101
106
|
identifierGenerator: "randomized",
|
|
102
107
|
minify: true,
|
|
103
108
|
movedDeclarations: true,
|
|
104
109
|
objectExtraction: true,
|
|
105
|
-
opaquePredicates: 0.1,
|
|
106
110
|
renameVariables: true,
|
|
107
111
|
renameGlobals: true,
|
|
108
112
|
stringConcealing: true,
|
|
113
|
+
astScrambler: true,
|
|
109
114
|
};
|
|
110
115
|
|
|
111
116
|
/**
|
package/src/probability.ts
CHANGED
|
@@ -1,55 +1,37 @@
|
|
|
1
1
|
import { ok } from "assert";
|
|
2
|
-
import { createObject } from "./
|
|
3
|
-
|
|
4
|
-
type Stringed<V> = (V extends string ? V : never) | "true" | "false";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Configurable probabilities for obfuscator options.
|
|
8
|
-
* - **`false`** = this feature is disabled
|
|
9
|
-
* - **`true`** = this feature is enabled, use default mode
|
|
10
|
-
* - **`0.5`** = 50% chance
|
|
11
|
-
* - **`"mode"`** = enabled, use specified mode
|
|
12
|
-
* - **`["mode1", "mode2"]`** - enabled, choose random mode each occurrence
|
|
13
|
-
* - **`{"mode1": 0.5, "mode2": 0.5}`** - enabled, choose based on specified probabilities
|
|
14
|
-
* - **`{"mode1": 50, "mode2": 50}`** - enabled, each is divided based on total
|
|
15
|
-
* - **`function(x){ return "custom_implementation" }`** - enabled, use specified function
|
|
16
|
-
*/
|
|
17
|
-
export type ProbabilityMap<T> =
|
|
18
|
-
| false
|
|
19
|
-
| true
|
|
20
|
-
| number
|
|
21
|
-
| T
|
|
22
|
-
| T[]
|
|
23
|
-
| { [key in Stringed<T>]?: number }
|
|
24
|
-
| ((...params: any[]) => any);
|
|
2
|
+
import { createObject } from "./utils/object-utils";
|
|
3
|
+
import { ProbabilityMap } from "./options";
|
|
25
4
|
|
|
26
5
|
/**
|
|
27
6
|
* Evaluates a ProbabilityMap.
|
|
28
7
|
* @param map The setting object.
|
|
29
|
-
* @param runner Custom function to determine return value
|
|
30
8
|
* @param customFnArgs Args given to user-implemented function, such as a variable name.
|
|
31
9
|
*/
|
|
32
|
-
export function
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
10
|
+
export function computeProbabilityMap<
|
|
11
|
+
T,
|
|
12
|
+
F extends (...args: any[]) => any = (...args: any[]) => any
|
|
13
|
+
>(
|
|
14
|
+
map: ProbabilityMap<T, F>,
|
|
15
|
+
...customImplementationArgs: F extends (...args: infer P) => any ? P : never
|
|
16
|
+
): boolean | string {
|
|
37
17
|
if (!map) {
|
|
38
|
-
return
|
|
18
|
+
return false;
|
|
39
19
|
}
|
|
40
20
|
if (map === true || map === 1) {
|
|
41
|
-
return
|
|
21
|
+
return true;
|
|
42
22
|
}
|
|
43
23
|
if (typeof map === "number") {
|
|
44
|
-
return
|
|
24
|
+
return Math.random() < map;
|
|
45
25
|
}
|
|
46
26
|
|
|
47
27
|
if (typeof map === "function") {
|
|
48
|
-
return (map as
|
|
28
|
+
return (map as Function)(...customImplementationArgs);
|
|
49
29
|
}
|
|
30
|
+
|
|
50
31
|
if (typeof map === "string") {
|
|
51
|
-
return
|
|
32
|
+
return map;
|
|
52
33
|
}
|
|
34
|
+
|
|
53
35
|
var asObject: { [mode: string]: number } = {};
|
|
54
36
|
if (Array.isArray(map)) {
|
|
55
37
|
map.forEach((x: any) => {
|
|
@@ -70,7 +52,7 @@ export function ComputeProbabilityMap<T>(
|
|
|
70
52
|
var count = 0;
|
|
71
53
|
var winner = null;
|
|
72
54
|
Object.keys(percentages).forEach((key) => {
|
|
73
|
-
var x =
|
|
55
|
+
var x = Number(percentages[key]);
|
|
74
56
|
|
|
75
57
|
if (ticket >= count && ticket < count + x) {
|
|
76
58
|
winner = key;
|
|
@@ -78,7 +60,7 @@ export function ComputeProbabilityMap<T>(
|
|
|
78
60
|
count += x;
|
|
79
61
|
});
|
|
80
62
|
|
|
81
|
-
return
|
|
63
|
+
return winner;
|
|
82
64
|
}
|
|
83
65
|
|
|
84
66
|
/**
|
|
@@ -111,6 +93,9 @@ export function isProbabilityMapProbable<T>(map: ProbabilityMap<T>): boolean {
|
|
|
111
93
|
}
|
|
112
94
|
}
|
|
113
95
|
if (typeof map === "object") {
|
|
96
|
+
if (map instanceof Date) return true;
|
|
97
|
+
if (map instanceof RegExp) return true;
|
|
98
|
+
|
|
114
99
|
var keys = Object.keys(map);
|
|
115
100
|
ok(
|
|
116
101
|
keys.length != 0,
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import Template from "./template";
|
|
2
|
+
|
|
3
|
+
export const BufferToStringTemplate = new Template(`
|
|
4
|
+
{GetGlobalTemplate}
|
|
5
|
+
|
|
6
|
+
var __globalObject = {getGlobalFnName}() || {};
|
|
7
|
+
var __TextDecoder = __globalObject["TextDecoder"];
|
|
8
|
+
var __Uint8Array = __globalObject["Uint8Array"];
|
|
9
|
+
var __Buffer = __globalObject["Buffer"];
|
|
10
|
+
var __String = __globalObject["String"] || String;
|
|
11
|
+
var __Array = __globalObject["Array"] || Array;
|
|
12
|
+
|
|
13
|
+
var utf8ArrayToStr = (function () {
|
|
14
|
+
var charCache = new __Array(128); // Preallocate the cache for the common single byte chars
|
|
15
|
+
var charFromCodePt = __String["fromCodePoint"] || __String["fromCharCode"];
|
|
16
|
+
var result = [];
|
|
17
|
+
|
|
18
|
+
return function (array) {
|
|
19
|
+
var codePt;
|
|
20
|
+
var byte1;
|
|
21
|
+
var buffLen = array["length"];
|
|
22
|
+
|
|
23
|
+
result["length"] = 0;
|
|
24
|
+
|
|
25
|
+
for (var i = 0; i < buffLen;) {
|
|
26
|
+
byte1 = array[i++];
|
|
27
|
+
|
|
28
|
+
if (byte1 <= 0x7F) {
|
|
29
|
+
codePt = byte1;
|
|
30
|
+
} else if (byte1 <= 0xDF) {
|
|
31
|
+
codePt = ((byte1 & 0x1F) << 6) | (array[i++] & 0x3F);
|
|
32
|
+
} else if (byte1 <= 0xEF) {
|
|
33
|
+
codePt = ((byte1 & 0x0F) << 12) | ((array[i++] & 0x3F) << 6) | (array[i++] & 0x3F);
|
|
34
|
+
} else if (__String["fromCodePoint"]) {
|
|
35
|
+
codePt = ((byte1 & 0x07) << 18) | ((array[i++] & 0x3F) << 12) | ((array[i++] & 0x3F) << 6) | (array[i++] & 0x3F);
|
|
36
|
+
} else {
|
|
37
|
+
codePt = 63; // Cannot convert four byte code points, so use "?" instead
|
|
38
|
+
i += 3;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
result["push"](charCache[codePt] || (charCache[codePt] = charFromCodePt(codePt)));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return result["join"]('');
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
|
|
48
|
+
function {BufferToString}(buffer){
|
|
49
|
+
if(typeof __TextDecoder !== "undefined" && __TextDecoder) {
|
|
50
|
+
return new __TextDecoder()["decode"](new __Uint8Array(buffer));
|
|
51
|
+
} else if(typeof __Buffer !== "undefined" && __Buffer) {
|
|
52
|
+
return __Buffer["from"](buffer)["toString"]("utf-8");
|
|
53
|
+
} else {
|
|
54
|
+
return utf8ArrayToStr(buffer);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
`);
|