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,427 +0,0 @@
|
|
|
1
|
-
import JsConfuser from "../../../src/index";
|
|
2
|
-
|
|
3
|
-
it("should convert class declarations to variable declarations", async () => {
|
|
4
|
-
var output = await JsConfuser(
|
|
5
|
-
`
|
|
6
|
-
class Person {
|
|
7
|
-
constructor(name){this.name = name}
|
|
8
|
-
getName(){return this.name}
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
var person = new Person("John");
|
|
12
|
-
|
|
13
|
-
TEST_VARIABLE = person.name`,
|
|
14
|
-
{
|
|
15
|
-
target: "node",
|
|
16
|
-
es5: true,
|
|
17
|
-
}
|
|
18
|
-
);
|
|
19
|
-
|
|
20
|
-
expect(output).not.toContain("class");
|
|
21
|
-
|
|
22
|
-
var TEST_VARIABLE;
|
|
23
|
-
eval(output);
|
|
24
|
-
|
|
25
|
-
expect(TEST_VARIABLE).toStrictEqual("John");
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it("should convert class expressions to function expressions", async () => {
|
|
29
|
-
var output = await JsConfuser(
|
|
30
|
-
`
|
|
31
|
-
|
|
32
|
-
var PersonClass = (class Person { constructor(name){this.name = name} getName(){return this.name} });
|
|
33
|
-
var person = new PersonClass("John");
|
|
34
|
-
TEST_VARIABLE = person.getName()`,
|
|
35
|
-
{
|
|
36
|
-
target: "node",
|
|
37
|
-
es5: true,
|
|
38
|
-
}
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
expect(output).not.toContain("class");
|
|
42
|
-
|
|
43
|
-
var TEST_VARIABLE;
|
|
44
|
-
eval(output);
|
|
45
|
-
|
|
46
|
-
expect(TEST_VARIABLE).toStrictEqual("John");
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it("should support static methods", async () => {
|
|
50
|
-
var output = await JsConfuser(
|
|
51
|
-
`
|
|
52
|
-
class Person {
|
|
53
|
-
static createPerson(name){
|
|
54
|
-
return new Person(name)
|
|
55
|
-
}
|
|
56
|
-
constructor(name){
|
|
57
|
-
this.name = name
|
|
58
|
-
}
|
|
59
|
-
getName(){
|
|
60
|
-
return this.name
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
var person = Person.createPerson("John");
|
|
65
|
-
|
|
66
|
-
TEST_VARIABLE = person.name;
|
|
67
|
-
`,
|
|
68
|
-
{
|
|
69
|
-
target: "node",
|
|
70
|
-
es5: true,
|
|
71
|
-
}
|
|
72
|
-
);
|
|
73
|
-
|
|
74
|
-
expect(output).not.toContain("class");
|
|
75
|
-
|
|
76
|
-
var TEST_VARIABLE;
|
|
77
|
-
eval(output);
|
|
78
|
-
|
|
79
|
-
expect(TEST_VARIABLE).toStrictEqual("John");
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
it("should support computed property names", async () => {
|
|
83
|
-
var output = await JsConfuser(
|
|
84
|
-
`
|
|
85
|
-
|
|
86
|
-
var constructorKey = "constructor";
|
|
87
|
-
var getNameKey = "getName";
|
|
88
|
-
|
|
89
|
-
class Person {
|
|
90
|
-
static createPerson(name){
|
|
91
|
-
return new Person(name)
|
|
92
|
-
}
|
|
93
|
-
[constructorKey](name){
|
|
94
|
-
this.name = name
|
|
95
|
-
}
|
|
96
|
-
[getNameKey](){
|
|
97
|
-
return this.name
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
var person = new Person("John");
|
|
102
|
-
|
|
103
|
-
TEST_VARIABLE = person.name;
|
|
104
|
-
`,
|
|
105
|
-
{
|
|
106
|
-
target: "node",
|
|
107
|
-
es5: true,
|
|
108
|
-
}
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
expect(output).not.toContain("class");
|
|
112
|
-
|
|
113
|
-
var TEST_VARIABLE;
|
|
114
|
-
eval(output);
|
|
115
|
-
|
|
116
|
-
expect(TEST_VARIABLE).toStrictEqual("John");
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
it("should support extending from a super class", async () => {
|
|
120
|
-
var output = await JsConfuser(
|
|
121
|
-
`
|
|
122
|
-
class Shape {
|
|
123
|
-
isShape(){
|
|
124
|
-
return true
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
getShapeID(){
|
|
128
|
-
return 0;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
class Rectangle extends Shape {
|
|
133
|
-
|
|
134
|
-
constructor(width, height){
|
|
135
|
-
super()
|
|
136
|
-
this.width = width;
|
|
137
|
-
this.height = height;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
getShapeID(){
|
|
141
|
-
return super.getShapeID() + 10;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
getArea(){
|
|
145
|
-
return this.width * this.height;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
var rect = new Rectangle(10, 20)
|
|
151
|
-
|
|
152
|
-
TEST_AREA = rect.getArea()
|
|
153
|
-
TEST_SHAPE_ID = rect.getShapeID()
|
|
154
|
-
TEST_IS_SHAPE = rect.isShape()
|
|
155
|
-
`,
|
|
156
|
-
{ target: "node", es5: true }
|
|
157
|
-
);
|
|
158
|
-
|
|
159
|
-
expect(output).not.toContain("class");
|
|
160
|
-
|
|
161
|
-
var TEST_AREA, TEST_SHAPE_ID, TEST_IS_SHAPE;
|
|
162
|
-
|
|
163
|
-
eval(output);
|
|
164
|
-
|
|
165
|
-
expect(TEST_AREA).toStrictEqual(200);
|
|
166
|
-
expect(TEST_SHAPE_ID).toStrictEqual(10);
|
|
167
|
-
expect(TEST_IS_SHAPE).toStrictEqual(true);
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
it("should support getters and setters on the class", async () => {
|
|
171
|
-
var output = await JsConfuser(
|
|
172
|
-
`
|
|
173
|
-
class Rectangle {
|
|
174
|
-
constructor(width, height){
|
|
175
|
-
this.width = width;
|
|
176
|
-
this.height = height;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
get area(){
|
|
180
|
-
return this.width * this.height;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
set setterProperty(newArea){
|
|
184
|
-
this.width = newArea/2;
|
|
185
|
-
this.height = 2;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
var rect = new Rectangle(10, 15)
|
|
190
|
-
TEST_AREA = rect.area
|
|
191
|
-
|
|
192
|
-
rect.setterProperty = 500
|
|
193
|
-
|
|
194
|
-
TEST_NEW_AREA = rect.area
|
|
195
|
-
|
|
196
|
-
`,
|
|
197
|
-
{
|
|
198
|
-
target: "node",
|
|
199
|
-
es5: true,
|
|
200
|
-
}
|
|
201
|
-
);
|
|
202
|
-
|
|
203
|
-
expect(output).not.toContain("class");
|
|
204
|
-
|
|
205
|
-
var TEST_AREA, TEST_NEW_AREA;
|
|
206
|
-
eval(output);
|
|
207
|
-
|
|
208
|
-
expect(TEST_AREA).toStrictEqual(150);
|
|
209
|
-
expect(TEST_NEW_AREA).toStrictEqual(500);
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
it("should support getters and setters on static methods", async () => {
|
|
213
|
-
var output = await JsConfuser(
|
|
214
|
-
`
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
var timesSet = 0;
|
|
218
|
-
var theRectangle;
|
|
219
|
-
|
|
220
|
-
class Rectangle {
|
|
221
|
-
constructor(width, height){
|
|
222
|
-
this.width = width;
|
|
223
|
-
this.height = height;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
static get theRectangle(){
|
|
227
|
-
if( !theRectangle ) {
|
|
228
|
-
this.theRectangle = new Rectangle(4, 5)
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
static set theRectangle(value){
|
|
233
|
-
theRectangle = value;
|
|
234
|
-
timesSet++;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
TEST_FIRST_RECT = theRectangle
|
|
239
|
-
var rect = Rectangle.theRectangle;
|
|
240
|
-
|
|
241
|
-
TEST_SECOND_RECT = theRectangle.width
|
|
242
|
-
|
|
243
|
-
Rectangle.theRectangle = new Rectangle(40, 35)
|
|
244
|
-
|
|
245
|
-
TEST_THIRD_RECT = theRectangle.width
|
|
246
|
-
|
|
247
|
-
TEST_TIMES_SET = timesSet;
|
|
248
|
-
`,
|
|
249
|
-
{
|
|
250
|
-
target: "node",
|
|
251
|
-
es5: true,
|
|
252
|
-
}
|
|
253
|
-
);
|
|
254
|
-
|
|
255
|
-
expect(output).not.toContain("class");
|
|
256
|
-
|
|
257
|
-
var TEST_FIRST_RECT, TEST_SECOND_RECT, TEST_THIRD_RECT, TEST_TIMES_SET;
|
|
258
|
-
eval(output);
|
|
259
|
-
|
|
260
|
-
expect(TEST_FIRST_RECT).toStrictEqual(undefined);
|
|
261
|
-
expect(TEST_SECOND_RECT).toStrictEqual(4);
|
|
262
|
-
expect(TEST_THIRD_RECT).toStrictEqual(40);
|
|
263
|
-
expect(TEST_TIMES_SET).toStrictEqual(2);
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
it("should support classes with no constructor", async () => {
|
|
267
|
-
var output = await JsConfuser(
|
|
268
|
-
`
|
|
269
|
-
class Rectangle {
|
|
270
|
-
getArea(){
|
|
271
|
-
return this.width * this.height;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
var rect = new Rectangle();
|
|
276
|
-
rect.width = 5;
|
|
277
|
-
rect.height = 10;
|
|
278
|
-
|
|
279
|
-
TEST_AREA = rect.getArea()
|
|
280
|
-
`,
|
|
281
|
-
{
|
|
282
|
-
target: "node",
|
|
283
|
-
es5: true,
|
|
284
|
-
}
|
|
285
|
-
);
|
|
286
|
-
|
|
287
|
-
expect(output).not.toContain("class");
|
|
288
|
-
|
|
289
|
-
var TEST_AREA;
|
|
290
|
-
eval(output);
|
|
291
|
-
|
|
292
|
-
expect(TEST_AREA).toStrictEqual(50);
|
|
293
|
-
});
|
|
294
|
-
|
|
295
|
-
it("should support preserving the class name", async () => {
|
|
296
|
-
var output = await JsConfuser(
|
|
297
|
-
`
|
|
298
|
-
class Rectangle {
|
|
299
|
-
getArea(){
|
|
300
|
-
return this.width * this.height;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
var rect = new Rectangle();
|
|
305
|
-
TEST_VALUE = rect.constructor.name;
|
|
306
|
-
`,
|
|
307
|
-
{
|
|
308
|
-
target: "node",
|
|
309
|
-
es5: true,
|
|
310
|
-
}
|
|
311
|
-
);
|
|
312
|
-
|
|
313
|
-
expect(output).not.toContain("class");
|
|
314
|
-
|
|
315
|
-
var TEST_VALUE;
|
|
316
|
-
eval(output);
|
|
317
|
-
|
|
318
|
-
expect(TEST_VALUE).toStrictEqual("Rectangle");
|
|
319
|
-
});
|
|
320
|
-
|
|
321
|
-
it("should properly pass arguments to super class", async () => {
|
|
322
|
-
var output = await JsConfuser(
|
|
323
|
-
`
|
|
324
|
-
class Logger {
|
|
325
|
-
constructor(name){
|
|
326
|
-
TEST_INIT_ARG = name;
|
|
327
|
-
this.name = name;
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
log(message){
|
|
331
|
-
TEST_NAME = this.name;
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
class Player extends Logger {
|
|
336
|
-
constructor(){
|
|
337
|
-
super("Player")
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
jump(){
|
|
341
|
-
this.log("I jumped")
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
var player = new Player();
|
|
346
|
-
player.jump();
|
|
347
|
-
`,
|
|
348
|
-
{
|
|
349
|
-
target: "node",
|
|
350
|
-
es5: true,
|
|
351
|
-
}
|
|
352
|
-
);
|
|
353
|
-
|
|
354
|
-
expect(output).not.toContain("class");
|
|
355
|
-
|
|
356
|
-
var TEST_INIT_ARG, TEST_NAME;
|
|
357
|
-
eval(output);
|
|
358
|
-
|
|
359
|
-
expect(TEST_INIT_ARG).toStrictEqual("Player");
|
|
360
|
-
expect(TEST_NAME).toStrictEqual("Player");
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
it("should work with stringConcealing and hide method names", async () => {
|
|
364
|
-
var output = await JsConfuser(
|
|
365
|
-
`
|
|
366
|
-
class MyClass {
|
|
367
|
-
|
|
368
|
-
constructor(value){
|
|
369
|
-
this.value = value
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
getValue(){
|
|
373
|
-
return this.value
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
var instance = new MyClass(100)
|
|
378
|
-
TEST_VALUE = instance.getValue()
|
|
379
|
-
`,
|
|
380
|
-
{
|
|
381
|
-
target: "node",
|
|
382
|
-
es5: true,
|
|
383
|
-
stringConcealing: true,
|
|
384
|
-
}
|
|
385
|
-
);
|
|
386
|
-
|
|
387
|
-
expect(output).not.toContain("class");
|
|
388
|
-
expect(output).not.toContain("getValue");
|
|
389
|
-
|
|
390
|
-
var TEST_VALUE;
|
|
391
|
-
eval(output);
|
|
392
|
-
|
|
393
|
-
expect(TEST_VALUE).toStrictEqual(100);
|
|
394
|
-
});
|
|
395
|
-
|
|
396
|
-
// https://github.com/MichaelXF/js-confuser/issues/72
|
|
397
|
-
it("should support class fields", async () => {
|
|
398
|
-
var output = await JsConfuser(
|
|
399
|
-
`
|
|
400
|
-
class MyClass {
|
|
401
|
-
myField = 1;
|
|
402
|
-
["myComputedField"] = 2;
|
|
403
|
-
|
|
404
|
-
static myStaticField = 3;
|
|
405
|
-
static ["myComputedStaticField"] = 4;
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
var myObject = new MyClass();
|
|
409
|
-
TEST_OUTPUT_1 = myObject.myField;
|
|
410
|
-
TEST_OUTPUT_2 = myObject.myComputedField;
|
|
411
|
-
TEST_OUTPUT_3 = MyClass.myStaticField;
|
|
412
|
-
TEST_OUTPUT_4 = MyClass.myComputedStaticField;
|
|
413
|
-
`,
|
|
414
|
-
{
|
|
415
|
-
target: "node",
|
|
416
|
-
es5: true,
|
|
417
|
-
}
|
|
418
|
-
);
|
|
419
|
-
|
|
420
|
-
var TEST_OUTPUT_1, TEST_OUTPUT_2, TEST_OUTPUT_3, TEST_OUTPUT_4;
|
|
421
|
-
|
|
422
|
-
eval(output);
|
|
423
|
-
expect(TEST_OUTPUT_1).toStrictEqual(1);
|
|
424
|
-
expect(TEST_OUTPUT_2).toStrictEqual(2);
|
|
425
|
-
expect(TEST_OUTPUT_3).toStrictEqual(3);
|
|
426
|
-
expect(TEST_OUTPUT_4).toStrictEqual(4);
|
|
427
|
-
});
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import JsConfuser from "../../../src/index";
|
|
2
|
-
|
|
3
|
-
it("should fix destructuring in assignment expressions", async () => {
|
|
4
|
-
var code = `[TEST_VARIABLE] = [100];`;
|
|
5
|
-
|
|
6
|
-
var output = await JsConfuser(code, { target: "browser", es5: true });
|
|
7
|
-
|
|
8
|
-
var TEST_VARIABLE;
|
|
9
|
-
|
|
10
|
-
eval(output);
|
|
11
|
-
|
|
12
|
-
expect(TEST_VARIABLE).toStrictEqual(100);
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
it("should fix destructuring in a sequence of assignment expressions", async () => {
|
|
16
|
-
var code = `([TEST_VARIABLE] = [100], [TEST_VARIABLE_2] = [50]);`;
|
|
17
|
-
|
|
18
|
-
var output = await JsConfuser(code, { target: "browser", es5: true });
|
|
19
|
-
|
|
20
|
-
var TEST_VARIABLE;
|
|
21
|
-
var TEST_VARIABLE_2;
|
|
22
|
-
|
|
23
|
-
eval(output);
|
|
24
|
-
|
|
25
|
-
expect(TEST_VARIABLE).toStrictEqual(100);
|
|
26
|
-
expect(TEST_VARIABLE_2).toStrictEqual(50);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it("should fix destructuring with empty elements", async () => {
|
|
30
|
-
var code = `[, TEST_VARIABLE] = [100, 10];`;
|
|
31
|
-
|
|
32
|
-
var output = await JsConfuser(code, { target: "browser", es5: true });
|
|
33
|
-
|
|
34
|
-
var TEST_VARIABLE;
|
|
35
|
-
|
|
36
|
-
eval(output);
|
|
37
|
-
|
|
38
|
-
expect(TEST_VARIABLE).toStrictEqual(10);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it("should fix destructuring in parameters", async () => {
|
|
42
|
-
var code = `
|
|
43
|
-
|
|
44
|
-
TEST_FUNCTION = function({key}){
|
|
45
|
-
TEST_VARIABLE = key;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
`;
|
|
49
|
-
|
|
50
|
-
var output = await JsConfuser(code, { target: "browser", es5: true });
|
|
51
|
-
|
|
52
|
-
var TEST_VARIABLE;
|
|
53
|
-
var TEST_FUNCTION;
|
|
54
|
-
|
|
55
|
-
eval(output);
|
|
56
|
-
|
|
57
|
-
TEST_FUNCTION({ key: 64 });
|
|
58
|
-
|
|
59
|
-
expect(TEST_VARIABLE).toStrictEqual(64);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it("should fix destructuring in shorthand arrow function parameters", async () => {
|
|
63
|
-
var code = `
|
|
64
|
-
TEST_FUNCTION = ({key})=>TEST_VARIABLE=key;
|
|
65
|
-
`;
|
|
66
|
-
|
|
67
|
-
var output = await JsConfuser(code, { target: "browser", es5: true });
|
|
68
|
-
|
|
69
|
-
var TEST_VARIABLE;
|
|
70
|
-
var TEST_FUNCTION;
|
|
71
|
-
|
|
72
|
-
eval(output);
|
|
73
|
-
|
|
74
|
-
TEST_FUNCTION({ key: 64 });
|
|
75
|
-
|
|
76
|
-
expect(TEST_VARIABLE).toStrictEqual(64);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
it("should fix destructuring in variable declarations", async () => {
|
|
80
|
-
var code = `
|
|
81
|
-
|
|
82
|
-
var {TEST_KEY} = {TEST_KEY: 50};
|
|
83
|
-
|
|
84
|
-
TEST_VARIABLE = TEST_KEY;
|
|
85
|
-
|
|
86
|
-
`;
|
|
87
|
-
|
|
88
|
-
var output = await JsConfuser(code, { target: "browser", es5: true });
|
|
89
|
-
|
|
90
|
-
var TEST_VARIABLE;
|
|
91
|
-
|
|
92
|
-
eval(output);
|
|
93
|
-
|
|
94
|
-
expect(TEST_VARIABLE).toStrictEqual(50);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it("should fix destructuring with rest elements", async () => {
|
|
98
|
-
var code = `[...TEST_VARIABLE] = [1, 2, 3, 4, 5];`;
|
|
99
|
-
|
|
100
|
-
var output = await JsConfuser(code, { target: "browser", es5: true });
|
|
101
|
-
|
|
102
|
-
var TEST_VARIABLE;
|
|
103
|
-
|
|
104
|
-
eval(output);
|
|
105
|
-
|
|
106
|
-
expect(TEST_VARIABLE).toStrictEqual([1, 2, 3, 4, 5]);
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it("should fix destructuring with default values", async () => {
|
|
110
|
-
var code = `var {key: TEST_KEY = 50} = {key: undefined}; TEST_VARIABLE = TEST_KEY; `;
|
|
111
|
-
|
|
112
|
-
var output = await JsConfuser(code, { target: "browser", es5: true });
|
|
113
|
-
|
|
114
|
-
var TEST_VARIABLE;
|
|
115
|
-
|
|
116
|
-
eval(output);
|
|
117
|
-
|
|
118
|
-
expect(TEST_VARIABLE).toStrictEqual(50);
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
it("should fix destructuring inside the try...catch clause", async () => {
|
|
122
|
-
var code = `
|
|
123
|
-
try {
|
|
124
|
-
|
|
125
|
-
throw {message: 100};
|
|
126
|
-
|
|
127
|
-
// Why can you even do this?
|
|
128
|
-
} catch ({message}) {
|
|
129
|
-
|
|
130
|
-
TEST_VARIABLE = message;
|
|
131
|
-
}
|
|
132
|
-
`;
|
|
133
|
-
|
|
134
|
-
var output = await JsConfuser(code, { target: "browser", es5: true });
|
|
135
|
-
|
|
136
|
-
var TEST_VARIABLE;
|
|
137
|
-
|
|
138
|
-
eval(output);
|
|
139
|
-
|
|
140
|
-
expect(TEST_VARIABLE).toStrictEqual(100);
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
it("should fix destructuring member expressions", async () => {
|
|
144
|
-
var code = `
|
|
145
|
-
var myObject = { nested: {} };
|
|
146
|
-
[myObject.key1, myObject["key2"], myObject.nested.key3] = [1, 2, 3];
|
|
147
|
-
|
|
148
|
-
TEST_VARIABLE = [myObject.key1, myObject.key2, myObject.nested.key3];
|
|
149
|
-
`;
|
|
150
|
-
|
|
151
|
-
var output = await JsConfuser(code, { target: "node", es5: true });
|
|
152
|
-
|
|
153
|
-
var TEST_VARIABLE;
|
|
154
|
-
eval(output);
|
|
155
|
-
|
|
156
|
-
expect(TEST_VARIABLE).toStrictEqual([1, 2, 3]);
|
|
157
|
-
});
|