js-confuser 1.7.1 → 1.7.2
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/CHANGELOG.md +38 -0
- package/README.md +12 -27
- package/dist/compiler.js +2 -8
- package/dist/constants.js +17 -10
- package/dist/index.js +7 -30
- package/dist/obfuscator.js +15 -62
- package/dist/options.js +21 -38
- package/dist/order.js +4 -7
- package/dist/parser.js +5 -13
- package/dist/precedence.js +6 -8
- package/dist/presets.js +4 -6
- package/dist/probability.js +13 -24
- package/dist/templates/bufferToString.js +100 -5
- package/dist/templates/crash.js +51 -9
- package/dist/templates/es5.js +125 -6
- package/dist/templates/functionLength.js +24 -6
- package/dist/templates/globals.js +9 -0
- package/dist/templates/template.js +71 -30
- package/dist/transforms/antiTooling.js +26 -22
- package/dist/transforms/calculator.js +18 -54
- package/dist/transforms/controlFlowFlattening/controlFlowFlattening.js +236 -333
- package/dist/transforms/controlFlowFlattening/expressionObfuscation.js +46 -25
- package/dist/transforms/deadCode.js +528 -27
- package/dist/transforms/dispatcher.js +106 -110
- package/dist/transforms/es5/antiClass.js +70 -44
- package/dist/transforms/es5/antiDestructuring.js +14 -38
- package/dist/transforms/es5/antiES6Object.js +39 -48
- package/dist/transforms/es5/antiSpreadOperator.js +5 -14
- package/dist/transforms/es5/antiTemplate.js +10 -19
- package/dist/transforms/es5/es5.js +7 -40
- package/dist/transforms/extraction/classExtraction.js +83 -0
- package/dist/transforms/extraction/duplicateLiteralsRemoval.js +41 -80
- package/dist/transforms/extraction/objectExtraction.js +24 -56
- package/dist/transforms/finalizer.js +6 -20
- package/dist/transforms/flatten.js +51 -99
- package/dist/transforms/identifier/globalAnalysis.js +8 -26
- package/dist/transforms/identifier/globalConcealing.js +35 -54
- package/dist/transforms/identifier/movedDeclarations.js +66 -38
- package/dist/transforms/identifier/renameVariables.js +29 -68
- package/dist/transforms/identifier/variableAnalysis.js +21 -48
- package/dist/transforms/lock/antiDebug.js +20 -25
- package/dist/transforms/lock/integrity.js +48 -47
- package/dist/transforms/lock/lock.js +62 -113
- package/dist/transforms/minify.js +77 -108
- package/dist/transforms/opaquePredicates.js +11 -48
- package/dist/transforms/preparation.js +17 -50
- package/dist/transforms/renameLabels.js +5 -22
- package/dist/transforms/rgf.js +93 -69
- package/dist/transforms/shuffle.js +41 -46
- package/dist/transforms/stack.js +35 -98
- package/dist/transforms/string/encoding.js +73 -27
- package/dist/transforms/string/stringCompression.js +44 -68
- package/dist/transforms/string/stringConcealing.js +125 -134
- package/dist/transforms/string/stringEncoding.js +6 -26
- package/dist/transforms/string/stringSplitting.js +5 -30
- package/dist/transforms/transform.js +50 -100
- package/dist/traverse.js +11 -18
- package/dist/util/compare.js +27 -29
- package/dist/util/gen.js +32 -86
- package/dist/util/guard.js +0 -1
- package/dist/util/identifiers.js +9 -72
- package/dist/util/insert.js +27 -77
- package/dist/util/math.js +0 -3
- package/dist/util/object.js +3 -7
- package/dist/util/random.js +5 -36
- package/dist/util/scope.js +6 -3
- package/package.json +3 -3
- package/src/constants.ts +12 -0
- package/src/options.ts +13 -0
- package/src/order.ts +2 -2
- package/src/templates/bufferToString.ts +49 -11
- package/src/templates/functionLength.ts +21 -3
- package/src/templates/globals.ts +3 -0
- package/src/templates/template.ts +85 -25
- package/src/transforms/antiTooling.ts +33 -11
- package/src/transforms/controlFlowFlattening/controlFlowFlattening.ts +2 -2
- package/src/transforms/controlFlowFlattening/expressionObfuscation.ts +46 -10
- package/src/transforms/deadCode.ts +0 -16
- package/src/transforms/dispatcher.ts +91 -69
- package/src/transforms/es5/antiClass.ts +10 -1
- package/src/transforms/extraction/classExtraction.ts +168 -0
- package/src/transforms/extraction/duplicateLiteralsRemoval.ts +9 -10
- package/src/transforms/extraction/objectExtraction.ts +4 -15
- package/src/transforms/flatten.ts +20 -5
- package/src/transforms/identifier/globalConcealing.ts +29 -65
- package/src/transforms/identifier/movedDeclarations.ts +90 -24
- package/src/transforms/minify.ts +27 -12
- package/src/transforms/rgf.ts +94 -5
- package/src/transforms/stack.ts +12 -3
- package/src/transforms/string/encoding.ts +85 -51
- package/src/transforms/string/stringCompression.ts +5 -8
- package/src/transforms/string/stringConcealing.ts +139 -113
- package/src/transforms/string/stringEncoding.ts +1 -2
- package/src/transforms/string/stringSplitting.ts +1 -2
- package/src/transforms/transform.ts +30 -1
- package/src/util/compare.ts +39 -5
- package/src/util/gen.ts +10 -3
- package/src/util/insert.ts +17 -0
- package/src/util/scope.ts +14 -2
- package/test/code/Cash.test.ts +10 -4
- package/test/code/StrictMode.src.js +65 -0
- package/test/code/StrictMode.test.js +37 -0
- package/test/compare.test.ts +62 -2
- package/test/options.test.ts +111 -55
- package/test/transforms/controlFlowFlattening/expressionObfuscation.test.ts +37 -18
- package/test/transforms/dispatcher.test.ts +55 -0
- package/test/transforms/extraction/classExtraction.test.ts +86 -0
- package/test/transforms/extraction/duplicateLiteralsRemoval.test.ts +8 -0
- package/test/transforms/extraction/objectExtraction.test.ts +2 -0
- package/test/transforms/identifier/globalConcealing.test.ts +19 -0
- package/test/transforms/identifier/movedDeclarations.test.ts +61 -0
- package/test/transforms/minify.test.ts +37 -0
- package/test/transforms/rgf.test.ts +50 -0
- package/dist/transforms/controlFlowFlattening/choiceFlowObfuscation.js +0 -62
- package/dist/transforms/controlFlowFlattening/controlFlowObfuscation.js +0 -159
- package/dist/transforms/controlFlowFlattening/switchCaseObfuscation.js +0 -106
- package/dist/transforms/eval.js +0 -84
- package/dist/transforms/hexadecimalNumbers.js +0 -63
- package/dist/transforms/hideInitializingCode.js +0 -270
- package/dist/transforms/identifier/nameRecycling.js +0 -218
- package/dist/transforms/label.js +0 -67
- package/dist/transforms/preparation/nameConflicts.js +0 -116
- package/dist/transforms/preparation/preparation.js +0 -188
|
@@ -4,27 +4,45 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
7
|
+
var _constants = require("../../constants");
|
|
8
|
+
var _template = _interopRequireDefault(require("../../templates/template"));
|
|
8
9
|
var _traverse = require("../../traverse");
|
|
9
|
-
|
|
10
10
|
var _gen = require("../../util/gen");
|
|
11
|
-
|
|
11
|
+
var _insert = require("../../util/insert");
|
|
12
12
|
var _transform = _interopRequireDefault(require("../transform"));
|
|
13
|
-
|
|
14
|
-
function
|
|
15
|
-
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
15
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
16
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
16
17
|
/**
|
|
17
18
|
* Expression Obfuscation runs before Control Flow Flattening
|
|
18
19
|
*/
|
|
19
20
|
class ExpressionObfuscation extends _transform.default {
|
|
20
21
|
constructor(o) {
|
|
21
22
|
super(o);
|
|
23
|
+
_defineProperty(this, "fnName", void 0);
|
|
24
|
+
}
|
|
25
|
+
apply(tree) {
|
|
26
|
+
super.apply(tree);
|
|
27
|
+
if (typeof this.fnName === "string") {
|
|
28
|
+
(0, _insert.prepend)(tree, (0, _template.default)(`
|
|
29
|
+
function {fnName}(...args){
|
|
30
|
+
return args[args["length"] - 1]
|
|
31
|
+
}
|
|
32
|
+
`).single({
|
|
33
|
+
fnName: this.fnName
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
createSequenceExpression(expressions) {
|
|
38
|
+
if (!this.fnName) {
|
|
39
|
+
this.fnName = this.getPlaceholder() + _constants.criticalFunctionTag;
|
|
40
|
+
}
|
|
41
|
+
return (0, _gen.CallExpression)((0, _gen.Identifier)(this.fnName), [...expressions]);
|
|
22
42
|
}
|
|
23
|
-
|
|
24
43
|
match(object, parents) {
|
|
25
44
|
return (0, _traverse.isBlock)(object);
|
|
26
45
|
}
|
|
27
|
-
|
|
28
46
|
transform(object, parents) {
|
|
29
47
|
return () => {
|
|
30
48
|
var exprs = [];
|
|
@@ -32,10 +50,10 @@ class ExpressionObfuscation extends _transform.default {
|
|
|
32
50
|
object.body.forEach((stmt, i) => {
|
|
33
51
|
if (stmt.type == "ExpressionStatement" && !stmt.directive) {
|
|
34
52
|
var expr = stmt.expression;
|
|
35
|
-
|
|
36
53
|
if (expr.type == "UnaryExpression" && !(expr.operator === "typeof" && expr.argument.type === "Identifier") && exprs.length // typeof is special
|
|
37
54
|
) {
|
|
38
|
-
expr.argument = (0, _gen.SequenceExpression)([...exprs, {
|
|
55
|
+
expr.argument = (0, _gen.SequenceExpression)([...exprs, {
|
|
56
|
+
...expr.argument
|
|
39
57
|
}]);
|
|
40
58
|
deleteExprs.push(...exprs);
|
|
41
59
|
exprs = [];
|
|
@@ -48,63 +66,66 @@ class ExpressionObfuscation extends _transform.default {
|
|
|
48
66
|
if (stmt.test.type == "BinaryExpression" && stmt.test.operator !== "**") {
|
|
49
67
|
if (stmt.test.left.type == "UnaryExpression" && !(stmt.test.left.operator === "typeof" && stmt.test.left.argument.type === "Identifier") // typeof is special
|
|
50
68
|
) {
|
|
51
|
-
stmt.test.left.argument =
|
|
69
|
+
stmt.test.left.argument = this.createSequenceExpression([...exprs, {
|
|
70
|
+
...stmt.test.left.argument
|
|
52
71
|
}]);
|
|
53
72
|
} else {
|
|
54
|
-
stmt.test.left =
|
|
73
|
+
stmt.test.left = this.createSequenceExpression([...exprs, {
|
|
74
|
+
...stmt.test.left
|
|
55
75
|
}]);
|
|
56
76
|
}
|
|
57
77
|
} else if (stmt.test.type == "LogicalExpression" && stmt.test.left.type == "BinaryExpression" && stmt.test.operator !== "**" && stmt.test.left.left.type == "UnaryExpression") {
|
|
58
|
-
stmt.test.left.left.argument =
|
|
78
|
+
stmt.test.left.left.argument = this.createSequenceExpression([...exprs, {
|
|
79
|
+
...stmt.test.left.left.argument
|
|
59
80
|
}]);
|
|
60
81
|
} else {
|
|
61
|
-
stmt.test =
|
|
82
|
+
stmt.test = this.createSequenceExpression([...exprs, {
|
|
83
|
+
...stmt.test
|
|
62
84
|
}]);
|
|
63
85
|
}
|
|
64
|
-
|
|
65
86
|
deleteExprs.push(...exprs);
|
|
66
87
|
} else if (stmt.type == "ForStatement" || stmt.type == "LabeledStatement" && stmt.body.type == "ForStatement") {
|
|
67
88
|
var init = (stmt.type == "LabeledStatement" ? stmt.body : stmt).init;
|
|
68
|
-
|
|
69
89
|
if (init) {
|
|
70
90
|
if (init.type == "VariableDeclaration") {
|
|
71
|
-
init.declarations[0].init =
|
|
91
|
+
init.declarations[0].init = this.createSequenceExpression([...exprs, {
|
|
92
|
+
...(init.declarations[0].init || (0, _gen.Identifier)("undefined"))
|
|
72
93
|
}]);
|
|
73
94
|
deleteExprs.push(...exprs);
|
|
74
95
|
} else if (init.type == "AssignmentExpression") {
|
|
75
|
-
init.right =
|
|
96
|
+
init.right = this.createSequenceExpression([...exprs, {
|
|
97
|
+
...(init.right || (0, _gen.Identifier)("undefined"))
|
|
76
98
|
}]);
|
|
77
99
|
deleteExprs.push(...exprs);
|
|
78
100
|
}
|
|
79
101
|
}
|
|
80
102
|
} else if (stmt.type == "VariableDeclaration") {
|
|
81
|
-
stmt.declarations[0].init =
|
|
103
|
+
stmt.declarations[0].init = this.createSequenceExpression([...exprs, {
|
|
104
|
+
...(stmt.declarations[0].init || (0, _gen.Identifier)("undefined"))
|
|
82
105
|
}]);
|
|
83
106
|
deleteExprs.push(...exprs);
|
|
84
107
|
} else if (stmt.type == "ThrowStatement") {
|
|
85
|
-
stmt.argument =
|
|
108
|
+
stmt.argument = this.createSequenceExpression([...exprs, {
|
|
109
|
+
...stmt.argument
|
|
86
110
|
}]);
|
|
87
111
|
deleteExprs.push(...exprs);
|
|
88
112
|
} else if (stmt.type == "ReturnStatement") {
|
|
89
|
-
stmt.argument =
|
|
113
|
+
stmt.argument = this.createSequenceExpression([...exprs, {
|
|
114
|
+
...(stmt.argument || (0, _gen.Identifier)("undefined"))
|
|
90
115
|
}]);
|
|
91
116
|
deleteExprs.push(...exprs);
|
|
92
117
|
}
|
|
93
118
|
}
|
|
94
|
-
|
|
95
119
|
exprs = [];
|
|
96
120
|
}
|
|
97
121
|
});
|
|
98
122
|
deleteExprs.forEach(expr => {
|
|
99
123
|
var index = object.body.findIndex(x => x.expression === expr);
|
|
100
|
-
|
|
101
124
|
if (index !== -1) {
|
|
102
125
|
object.body.splice(index, 1);
|
|
103
126
|
}
|
|
104
127
|
});
|
|
105
128
|
};
|
|
106
129
|
}
|
|
107
|
-
|
|
108
130
|
}
|
|
109
|
-
|
|
110
131
|
exports.default = ExpressionObfuscation;
|