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/test/code/Cash.test.ts
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync } from "fs";
|
|
2
|
-
import { join } from "path";
|
|
3
|
-
import JsConfuser from "../../src/index";
|
|
4
|
-
|
|
5
|
-
var CASH_JS = readFileSync(join(__dirname, "./Cash.src.js"), "utf-8");
|
|
6
|
-
|
|
7
|
-
test("Variant #1: Cash.js on High Preset (Strict Mode)", async () => {
|
|
8
|
-
var output = await JsConfuser(CASH_JS, {
|
|
9
|
-
target: "node",
|
|
10
|
-
preset: "high",
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
// Make the required document variables for initialization
|
|
14
|
-
var document = {
|
|
15
|
-
documentElement: {},
|
|
16
|
-
createElement: () => {
|
|
17
|
-
return { style: {} };
|
|
18
|
-
},
|
|
19
|
-
} as any as Document;
|
|
20
|
-
var window = {
|
|
21
|
-
document,
|
|
22
|
-
Array,
|
|
23
|
-
Object,
|
|
24
|
-
Symbol,
|
|
25
|
-
Number,
|
|
26
|
-
parseInt,
|
|
27
|
-
JSON,
|
|
28
|
-
setTimeout,
|
|
29
|
-
encodeURIComponent,
|
|
30
|
-
RegExp,
|
|
31
|
-
String,
|
|
32
|
-
$: false,
|
|
33
|
-
} as any;
|
|
34
|
-
window.window = window;
|
|
35
|
-
global.window = window;
|
|
36
|
-
for (var key in window) {
|
|
37
|
-
global[key] = window[key];
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
try {
|
|
41
|
-
eval(output);
|
|
42
|
-
} catch (e) {
|
|
43
|
-
console.error(e);
|
|
44
|
-
writeFileSync("dev.output.js", output, {
|
|
45
|
-
encoding: "utf-8",
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
expect(true).toStrictEqual(false);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
expect(window).toHaveProperty("cash");
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
test("Variant #2: Cash.js on High Preset + Integrity + Self Defending + RGF + Tamper Protection", async () => {
|
|
55
|
-
// Make the required document variables for initialization
|
|
56
|
-
var document = {
|
|
57
|
-
documentElement: {},
|
|
58
|
-
createElement: () => {
|
|
59
|
-
return { style: {} };
|
|
60
|
-
},
|
|
61
|
-
} as any as Document;
|
|
62
|
-
var window = {
|
|
63
|
-
document,
|
|
64
|
-
Array,
|
|
65
|
-
Object,
|
|
66
|
-
Symbol,
|
|
67
|
-
Number,
|
|
68
|
-
parseInt,
|
|
69
|
-
JSON,
|
|
70
|
-
setTimeout,
|
|
71
|
-
encodeURIComponent,
|
|
72
|
-
RegExp,
|
|
73
|
-
String,
|
|
74
|
-
$: false,
|
|
75
|
-
} as any;
|
|
76
|
-
window.window = window;
|
|
77
|
-
global.window = window;
|
|
78
|
-
for (var key in window) {
|
|
79
|
-
global[key] = window[key];
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
var output = await JsConfuser(CASH_JS, {
|
|
83
|
-
target: "node",
|
|
84
|
-
preset: "high",
|
|
85
|
-
rgf: true,
|
|
86
|
-
lock: {
|
|
87
|
-
integrity: true,
|
|
88
|
-
selfDefending: true,
|
|
89
|
-
tamperProtection: true,
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
try {
|
|
94
|
-
// new Function() runs in non-strict mode
|
|
95
|
-
new Function(output)();
|
|
96
|
-
} catch (e) {
|
|
97
|
-
var helperCode = `var document = {
|
|
98
|
-
documentElement: {},
|
|
99
|
-
createElement: () => {
|
|
100
|
-
return { style: {} };
|
|
101
|
-
},
|
|
102
|
-
};
|
|
103
|
-
var window = {
|
|
104
|
-
document,
|
|
105
|
-
Array,
|
|
106
|
-
Object,
|
|
107
|
-
Symbol,
|
|
108
|
-
Number,
|
|
109
|
-
parseInt,
|
|
110
|
-
JSON,
|
|
111
|
-
setTimeout,
|
|
112
|
-
encodeURIComponent,
|
|
113
|
-
RegExp,
|
|
114
|
-
String,
|
|
115
|
-
$: false,
|
|
116
|
-
};
|
|
117
|
-
window.window = window;
|
|
118
|
-
global.window = window;
|
|
119
|
-
for (var key in window) {
|
|
120
|
-
global[key] = window[key];
|
|
121
|
-
}`;
|
|
122
|
-
|
|
123
|
-
console.error(e);
|
|
124
|
-
writeFileSync("dev.output.js", helperCode + "\n" + output, {
|
|
125
|
-
encoding: "utf-8",
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
expect(true).toStrictEqual(false);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
expect(window).toHaveProperty("cash");
|
|
132
|
-
});
|
package/test/code/Dynamic.src.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
function MyFunction() {
|
|
2
|
-
var fillerVar1;
|
|
3
|
-
var fillerVar2;
|
|
4
|
-
var fillerVar3;
|
|
5
|
-
var fillerVar4;
|
|
6
|
-
var fillerVar5;
|
|
7
|
-
|
|
8
|
-
// Filler keys for testing for syntax errors
|
|
9
|
-
class TEST_CLASS {
|
|
10
|
-
// Tests Stack
|
|
11
|
-
10() {
|
|
12
|
-
return 10;
|
|
13
|
-
}
|
|
14
|
-
9() {
|
|
15
|
-
return 9;
|
|
16
|
-
}
|
|
17
|
-
8() {
|
|
18
|
-
return 8;
|
|
19
|
-
}
|
|
20
|
-
7() {
|
|
21
|
-
return 7;
|
|
22
|
-
}
|
|
23
|
-
6() {
|
|
24
|
-
return 6;
|
|
25
|
-
}
|
|
26
|
-
5() {
|
|
27
|
-
return 5;
|
|
28
|
-
}
|
|
29
|
-
4() {
|
|
30
|
-
return 4;
|
|
31
|
-
}
|
|
32
|
-
3() {
|
|
33
|
-
return 3;
|
|
34
|
-
}
|
|
35
|
-
2() {
|
|
36
|
-
return 2;
|
|
37
|
-
}
|
|
38
|
-
1() {
|
|
39
|
-
return 2;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Tests String Concealing
|
|
43
|
-
MyMethod1() {
|
|
44
|
-
return 1;
|
|
45
|
-
}
|
|
46
|
-
MyMethod2() {
|
|
47
|
-
return 2;
|
|
48
|
-
}
|
|
49
|
-
MyMethod3() {
|
|
50
|
-
return 3;
|
|
51
|
-
}
|
|
52
|
-
MyMethod4() {
|
|
53
|
-
return 4;
|
|
54
|
-
}
|
|
55
|
-
MyMethod5() {
|
|
56
|
-
return 5;
|
|
57
|
-
}
|
|
58
|
-
MyMethod6() {
|
|
59
|
-
return 6;
|
|
60
|
-
}
|
|
61
|
-
MyMethod7() {
|
|
62
|
-
return 7;
|
|
63
|
-
}
|
|
64
|
-
MyMethod8() {
|
|
65
|
-
return 8;
|
|
66
|
-
}
|
|
67
|
-
MyMethod9() {
|
|
68
|
-
return 9;
|
|
69
|
-
}
|
|
70
|
-
MyMethod10() {
|
|
71
|
-
return 10;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
var a = (function (cbRunner, obj) {
|
|
76
|
-
var num1;
|
|
77
|
-
var num2 = get30();
|
|
78
|
-
var num3 = 8;
|
|
79
|
-
|
|
80
|
-
num1 = obj["1700"];
|
|
81
|
-
|
|
82
|
-
var _num4 = 1000;
|
|
83
|
-
var _num5 = 1001;
|
|
84
|
-
var _num6 = 1002;
|
|
85
|
-
|
|
86
|
-
var decimal = 0.1738;
|
|
87
|
-
|
|
88
|
-
cbRunner(() => {
|
|
89
|
-
return num1 + num2 + num3 + decimal;
|
|
90
|
-
});
|
|
91
|
-
var _num7 = 1003;
|
|
92
|
-
|
|
93
|
-
function get30() {
|
|
94
|
-
return 30;
|
|
95
|
-
}
|
|
96
|
-
})(
|
|
97
|
-
function (cb) {
|
|
98
|
-
input(cb());
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
1700: 1700,
|
|
102
|
-
|
|
103
|
-
// Filler keys for testing for syntax errors
|
|
104
|
-
10: 10,
|
|
105
|
-
9: 9,
|
|
106
|
-
8: 8,
|
|
107
|
-
7: 7,
|
|
108
|
-
6: 6,
|
|
109
|
-
5: 5,
|
|
110
|
-
4: 4,
|
|
111
|
-
3: 3,
|
|
112
|
-
2: 2,
|
|
113
|
-
1: 1,
|
|
114
|
-
}
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
MyFunction();
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync } from "fs";
|
|
2
|
-
import { join } from "path";
|
|
3
|
-
import JsConfuser from "../../src/index";
|
|
4
|
-
import { ObfuscateOptions } from "../../src/options";
|
|
5
|
-
|
|
6
|
-
var SOURCE_JS = readFileSync(join(__dirname, "./Dynamic.src.js"), "utf-8");
|
|
7
|
-
|
|
8
|
-
test.concurrent("Variant #1: Dynamic.src.js on High Preset", async () => {
|
|
9
|
-
// `input` is an embedded variable, therefore globalConcealing must be turned off
|
|
10
|
-
var output = await JsConfuser(SOURCE_JS, {
|
|
11
|
-
target: "browser",
|
|
12
|
-
preset: "high",
|
|
13
|
-
globalConcealing: false,
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
var value = "never_called";
|
|
17
|
-
function input(x) {
|
|
18
|
-
value = x;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
eval(output);
|
|
22
|
-
|
|
23
|
-
expect(value).toStrictEqual(1738.1738);
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
test.concurrent("Variant #2: Dynamic.src.js on 2x High Preset", async () => {
|
|
27
|
-
var options: ObfuscateOptions = {
|
|
28
|
-
target: "node",
|
|
29
|
-
preset: "high",
|
|
30
|
-
globalConcealing: false,
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
var output = await JsConfuser(SOURCE_JS, options);
|
|
34
|
-
|
|
35
|
-
// writeFileSync("./dev.error.1.js", output, "utf-8");
|
|
36
|
-
|
|
37
|
-
var doublyObfuscated = await JsConfuser(output, options);
|
|
38
|
-
|
|
39
|
-
// writeFileSync("./dev.error.2.js", doublyObfuscated, "utf-8");
|
|
40
|
-
|
|
41
|
-
var value = "never_called";
|
|
42
|
-
function input(x) {
|
|
43
|
-
value = x;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
eval(doublyObfuscated);
|
|
47
|
-
|
|
48
|
-
expect(value).toStrictEqual(1738.1738);
|
|
49
|
-
});
|
package/test/code/ES6.src.js
DELETED
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
// Variant #1 Using `let`
|
|
4
|
-
let myVariable = 1;
|
|
5
|
-
|
|
6
|
-
expect(myVariable).toStrictEqual(1);
|
|
7
|
-
|
|
8
|
-
// Variant #2 Destructing variable from object (ObjectPattern)
|
|
9
|
-
let { key } = { key: 2 };
|
|
10
|
-
|
|
11
|
-
expect(key).toStrictEqual(2);
|
|
12
|
-
|
|
13
|
-
// Variant #3 Destructing variable and using differing output name (ObjectPattern)
|
|
14
|
-
let { key: customName } = { key: 3 };
|
|
15
|
-
|
|
16
|
-
expect(customName).toStrictEqual(3);
|
|
17
|
-
|
|
18
|
-
// Variant #4 Destructing variable from array (ArrayPattern)
|
|
19
|
-
let [element] = [4];
|
|
20
|
-
|
|
21
|
-
expect(element).toStrictEqual(4);
|
|
22
|
-
|
|
23
|
-
// Variant #5 Destructing computed property from nested pattern
|
|
24
|
-
let [{ ["key"]: deeplyNestedKey }] = [{ key: 5 }];
|
|
25
|
-
|
|
26
|
-
expect(deeplyNestedKey).toStrictEqual(5);
|
|
27
|
-
|
|
28
|
-
// Variant #6 Make sure arrow functions work
|
|
29
|
-
const arrowFn = () => 6;
|
|
30
|
-
|
|
31
|
-
expect(arrowFn()).toStrictEqual(6);
|
|
32
|
-
|
|
33
|
-
// Variant #7 Make sure inline methods on object work
|
|
34
|
-
let es6Object = {
|
|
35
|
-
method() {
|
|
36
|
-
return 7;
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
expect(es6Object.method()).toStrictEqual(7);
|
|
41
|
-
|
|
42
|
-
// Variant #8 Make sure getters on object work
|
|
43
|
-
es6Object = {
|
|
44
|
-
get getter() {
|
|
45
|
-
return 8;
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
expect(es6Object.getter).toStrictEqual(8);
|
|
50
|
-
|
|
51
|
-
// Variant #9 Make sure getters with computed properties work
|
|
52
|
-
let customKey = "myGetter";
|
|
53
|
-
es6Object = {
|
|
54
|
-
get [customKey]() {
|
|
55
|
-
return 9;
|
|
56
|
-
},
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
expect(es6Object.myGetter).toStrictEqual(9);
|
|
60
|
-
|
|
61
|
-
// Variant #10 Make sure constructor method works
|
|
62
|
-
var value;
|
|
63
|
-
class MyClass {
|
|
64
|
-
constructor(x) {
|
|
65
|
-
value = x;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
var myInstance = new MyClass(10);
|
|
70
|
-
expect(value).toStrictEqual(10);
|
|
71
|
-
|
|
72
|
-
// Variant #11 Make sure for-loop initializers work
|
|
73
|
-
var sum = 0;
|
|
74
|
-
for (var x of [3, 3, 5]) {
|
|
75
|
-
sum += x;
|
|
76
|
-
}
|
|
77
|
-
expect(sum).toStrictEqual(11);
|
|
78
|
-
|
|
79
|
-
// Variant #12 More complex for-loop initializer
|
|
80
|
-
var outside = 12;
|
|
81
|
-
for (
|
|
82
|
-
var myFunction = function () {
|
|
83
|
-
return outside;
|
|
84
|
-
};
|
|
85
|
-
false;
|
|
86
|
-
|
|
87
|
-
) {}
|
|
88
|
-
|
|
89
|
-
var TEST_OUTPUT = myFunction();
|
|
90
|
-
|
|
91
|
-
expect(TEST_OUTPUT).toStrictEqual(12);
|
|
92
|
-
|
|
93
|
-
function noLexicalVariables() {
|
|
94
|
-
// Variant #13 For-in statement
|
|
95
|
-
var object = { 100: true, "-87": true, 1000: false };
|
|
96
|
-
var sumOfKeys = 0;
|
|
97
|
-
for (var propertyName in object) {
|
|
98
|
-
if (object[propertyName] === true) {
|
|
99
|
-
sumOfKeys += parseInt(propertyName);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
expect(sumOfKeys).toStrictEqual(13);
|
|
104
|
-
|
|
105
|
-
// Variant #14 For-of statement
|
|
106
|
-
var values = [10, 20, 30, 40, -86];
|
|
107
|
-
var sumOfValues = 0;
|
|
108
|
-
for (var value of values) {
|
|
109
|
-
sumOfValues += value;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
expect(sumOfValues).toStrictEqual(14);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
noLexicalVariables();
|
|
116
|
-
|
|
117
|
-
function useStrictFunction() {
|
|
118
|
-
"use strict";
|
|
119
|
-
|
|
120
|
-
function testThis() {
|
|
121
|
-
// Ensure 'this' behaves like strict mode
|
|
122
|
-
function fun() {
|
|
123
|
-
return this;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
expect(fun() === undefined).toStrictEqual(true);
|
|
127
|
-
expect(fun.call(2) === 2).toStrictEqual(true);
|
|
128
|
-
expect(fun.apply(null) === null).toStrictEqual(true);
|
|
129
|
-
expect(fun.call(undefined) === undefined).toStrictEqual(true);
|
|
130
|
-
expect(fun.bind(true)() === true).toStrictEqual(true);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
testThis();
|
|
134
|
-
|
|
135
|
-
function testArguments() {
|
|
136
|
-
// Ensure arguments behaves like strict-mode
|
|
137
|
-
expect(() => useStrictFunction.arguments).toThrow();
|
|
138
|
-
expect(() => useStrictFunction.caller).toThrow();
|
|
139
|
-
expect(() => arguments.callee).toThrow();
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
testArguments();
|
|
143
|
-
|
|
144
|
-
function testEval() {
|
|
145
|
-
var __NO_JS_CONFUSER_RENAME__myOuterVariable = "Initial Value";
|
|
146
|
-
|
|
147
|
-
// Eval will not leak names
|
|
148
|
-
eval("var __NO_JS_CONFUSER_RENAME__myOuterVariable = 'Incorrect Value';");
|
|
149
|
-
|
|
150
|
-
expect(__NO_JS_CONFUSER_RENAME__myOuterVariable).toStrictEqual(
|
|
151
|
-
"Initial Value"
|
|
152
|
-
);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
testEval();
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
useStrictFunction();
|
|
159
|
-
|
|
160
|
-
function labeledBreaksAndContinues() {
|
|
161
|
-
var flag = true;
|
|
162
|
-
|
|
163
|
-
label_1: for (var i = 0; i < 20; i++) {
|
|
164
|
-
b: switch (i) {
|
|
165
|
-
case 15:
|
|
166
|
-
c: do {
|
|
167
|
-
if (i !== 15) {
|
|
168
|
-
break c;
|
|
169
|
-
}
|
|
170
|
-
flag = true;
|
|
171
|
-
|
|
172
|
-
break label_1;
|
|
173
|
-
|
|
174
|
-
var fillerVar1;
|
|
175
|
-
var fillerVar2;
|
|
176
|
-
var fillerVar3;
|
|
177
|
-
} while (i == 15);
|
|
178
|
-
|
|
179
|
-
break;
|
|
180
|
-
|
|
181
|
-
case 10:
|
|
182
|
-
continue label_1;
|
|
183
|
-
|
|
184
|
-
default:
|
|
185
|
-
flag = false;
|
|
186
|
-
break b;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
var fillerVar1;
|
|
190
|
-
var fillerVar2;
|
|
191
|
-
var fillerVar3;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
var fillerVar1;
|
|
195
|
-
var fillerVar2;
|
|
196
|
-
var fillerVar3;
|
|
197
|
-
|
|
198
|
-
if (flag) {
|
|
199
|
-
return i;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
var variant15 = labeledBreaksAndContinues();
|
|
204
|
-
expect(variant15).toStrictEqual(15);
|
|
205
|
-
|
|
206
|
-
// Variant #16: Function.length property
|
|
207
|
-
var variant16 = function (
|
|
208
|
-
n1,
|
|
209
|
-
n2,
|
|
210
|
-
n3,
|
|
211
|
-
n4,
|
|
212
|
-
n5,
|
|
213
|
-
n6,
|
|
214
|
-
n7,
|
|
215
|
-
n8,
|
|
216
|
-
n9,
|
|
217
|
-
n10,
|
|
218
|
-
n11,
|
|
219
|
-
n12,
|
|
220
|
-
n13,
|
|
221
|
-
n14,
|
|
222
|
-
n15,
|
|
223
|
-
n16
|
|
224
|
-
) {
|
|
225
|
-
var _ = true;
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
expect(variant16.length).toStrictEqual(16);
|
|
229
|
-
|
|
230
|
-
// Set 'ranAllTest' to TRUE
|
|
231
|
-
ranAllTest = true;
|
|
232
|
-
|
|
233
|
-
function countermeasures() {
|
|
234
|
-
throw new Error("Countermeasures function called.");
|
|
235
|
-
}
|
package/test/code/ES6.test.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync } from "fs";
|
|
2
|
-
import { join } from "path";
|
|
3
|
-
import JsConfuser from "../../src/index";
|
|
4
|
-
|
|
5
|
-
var ES6_JS = readFileSync(join(__dirname, "./ES6.src.js"), "utf-8");
|
|
6
|
-
|
|
7
|
-
test.concurrent("Variant #1: ES6 code on High Preset", async () => {
|
|
8
|
-
var output = await JsConfuser(ES6_JS, {
|
|
9
|
-
target: "node",
|
|
10
|
-
preset: "high",
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
// Ensure 'use strict' directive is preserved
|
|
14
|
-
expect(output.startsWith("'use strict'")).toStrictEqual(true);
|
|
15
|
-
|
|
16
|
-
var ranAllTest = false;
|
|
17
|
-
eval(output);
|
|
18
|
-
|
|
19
|
-
// 'ranAllTest' is set to TRUE by the evaluated code
|
|
20
|
-
expect(ranAllTest).toStrictEqual(true);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
test.concurrent(
|
|
24
|
-
"Variant #2: ES6 code on High Preset + RGF + Self Defending",
|
|
25
|
-
async () => {
|
|
26
|
-
var output = await JsConfuser(ES6_JS, {
|
|
27
|
-
target: "node",
|
|
28
|
-
preset: "high",
|
|
29
|
-
rgf: true,
|
|
30
|
-
lock: {
|
|
31
|
-
selfDefending: true,
|
|
32
|
-
countermeasures: "countermeasures",
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
var ranAllTest = false;
|
|
37
|
-
eval(output);
|
|
38
|
-
|
|
39
|
-
// 'ranAllTest' is set to TRUE by the evaluated code
|
|
40
|
-
expect(ranAllTest).toStrictEqual(true);
|
|
41
|
-
}
|
|
42
|
-
);
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import JsConfuser from "../../src/index";
|
|
2
|
-
|
|
3
|
-
// https://github.com/MichaelXF/js-confuser/issues/79
|
|
4
|
-
test("Variant #1: Support BigInt Literals (1n)", async () => {
|
|
5
|
-
var code = `
|
|
6
|
-
TEST_OUTPUT = 1n;
|
|
7
|
-
`;
|
|
8
|
-
|
|
9
|
-
var output = await JsConfuser(code, {
|
|
10
|
-
target: "node",
|
|
11
|
-
renameVariables: true,
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
var TEST_OUTPUT;
|
|
15
|
-
eval(output);
|
|
16
|
-
|
|
17
|
-
expect(typeof TEST_OUTPUT).toStrictEqual("bigint");
|
|
18
|
-
expect(TEST_OUTPUT).toStrictEqual(1n);
|
|
19
|
-
});
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function TestStrictMode() {
|
|
4
|
-
"use strict";
|
|
5
|
-
|
|
6
|
-
var isStrictMode = () => {
|
|
7
|
-
try {
|
|
8
|
-
undefined = true;
|
|
9
|
-
} catch (E) {
|
|
10
|
-
return true;
|
|
11
|
-
}
|
|
12
|
-
return false;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
// filler code to make transformations more likely to affect this function
|
|
16
|
-
var x, y, z;
|
|
17
|
-
var string1 = "Hello World";
|
|
18
|
-
var string2 = "use strict";
|
|
19
|
-
|
|
20
|
-
var chars = string2.split("");
|
|
21
|
-
var count = 0;
|
|
22
|
-
for (var char of chars) {
|
|
23
|
-
count++;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
expect(count).toStrictEqual(10);
|
|
27
|
-
|
|
28
|
-
// This function should be in strict mode
|
|
29
|
-
expect(isStrictMode()).toStrictEqual(true);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
var isStrictMode = () => {
|
|
33
|
-
try {
|
|
34
|
-
undefined = true;
|
|
35
|
-
} catch (E) {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
return false;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
// Global level should be in strict mode
|
|
42
|
-
expect(isStrictMode()).toStrictEqual(true);
|
|
43
|
-
TestStrictMode();
|
|
44
|
-
|
|
45
|
-
// Direct vs. Indirect eval usage
|
|
46
|
-
var evalString = `
|
|
47
|
-
var isStrictMode = () => {
|
|
48
|
-
try {
|
|
49
|
-
undefined = true;
|
|
50
|
-
} catch (E) {
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
return false;
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
isStrictMode();`;
|
|
57
|
-
|
|
58
|
-
// Direct eval -> Preserve global strict-mode
|
|
59
|
-
var directEvalResult = eval(evalString);
|
|
60
|
-
expect(directEvalResult).toStrictEqual(true);
|
|
61
|
-
|
|
62
|
-
// Indirect eval -> Does not inherit context strict-mode
|
|
63
|
-
var _eval_ = eval;
|
|
64
|
-
var indirectEvalResult = _eval_(evalString);
|
|
65
|
-
expect(indirectEvalResult).toStrictEqual(false);
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync } from "fs";
|
|
2
|
-
import { join } from "path";
|
|
3
|
-
import JsConfuser from "../../src/index";
|
|
4
|
-
|
|
5
|
-
var StrictMode_JS = readFileSync(
|
|
6
|
-
join(__dirname, "./StrictMode.src.js"),
|
|
7
|
-
"utf-8"
|
|
8
|
-
);
|
|
9
|
-
|
|
10
|
-
test("Variant #1: StrictMode on High Preset", async () => {
|
|
11
|
-
var output = await JsConfuser(StrictMode_JS, {
|
|
12
|
-
target: "node",
|
|
13
|
-
preset: "high",
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
//writeFileSync("./dev.output.js", output);
|
|
17
|
-
|
|
18
|
-
eval(output);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
test("Variant #2: StrictMode on 2x High Preset", async () => {
|
|
22
|
-
var output = await JsConfuser(StrictMode_JS, {
|
|
23
|
-
target: "node",
|
|
24
|
-
preset: "high",
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
//writeFileSync("./dev.output1.js", output);
|
|
28
|
-
|
|
29
|
-
var output2 = await JsConfuser(output, {
|
|
30
|
-
target: "node",
|
|
31
|
-
preset: "high",
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
//writeFileSync("./dev.output2.js", output2);
|
|
35
|
-
|
|
36
|
-
eval(output2);
|
|
37
|
-
});
|