js-confuser 2.0.0-alpha.5 → 2.0.1
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 +43 -43
- package/.github/ISSUE_TEMPLATE/feature_request.md +20 -20
- package/.github/workflows/node.js.yml +28 -28
- package/.prettierrc +4 -4
- package/CHANGELOG.md +1015 -989
- package/CODE_OF_CONDUCT.md +131 -131
- package/CONTRIBUTING.md +52 -52
- package/LICENSE +21 -21
- package/Migration.md +72 -71
- package/README.md +86 -78
- package/dist/constants.js +43 -43
- package/dist/index.js +14 -23
- package/dist/obfuscator.js +31 -25
- package/dist/order.js +4 -4
- package/dist/presets.js +31 -31
- package/dist/templates/integrityTemplate.js +4 -4
- package/dist/templates/template.js +1 -2
- package/dist/transforms/astScrambler.js +1 -2
- package/dist/transforms/calculator.js +1 -2
- package/dist/transforms/controlFlowFlattening.js +93 -63
- package/dist/transforms/deadCode.js +1 -2
- package/dist/transforms/dispatcher.js +4 -5
- package/dist/transforms/extraction/duplicateLiteralsRemoval.js +1 -2
- package/dist/transforms/extraction/objectExtraction.js +1 -2
- package/dist/transforms/finalizer.js +1 -2
- package/dist/transforms/flatten.js +1 -2
- package/dist/transforms/identifier/globalConcealing.js +15 -2
- package/dist/transforms/identifier/movedDeclarations.js +8 -7
- package/dist/transforms/identifier/renameVariables.js +7 -7
- package/dist/transforms/lock/integrity.js +11 -10
- package/dist/transforms/lock/lock.js +2 -3
- package/dist/transforms/minify.js +11 -29
- package/dist/transforms/opaquePredicates.js +1 -2
- package/dist/transforms/pack.js +5 -2
- package/dist/transforms/plugin.js +18 -19
- package/dist/transforms/preparation.js +16 -16
- package/dist/transforms/renameLabels.js +1 -2
- package/dist/transforms/rgf.js +8 -9
- package/dist/transforms/shuffle.js +1 -2
- package/dist/transforms/string/encoding.js +1 -2
- package/dist/transforms/string/stringCompression.js +3 -4
- package/dist/transforms/string/stringConcealing.js +8 -3
- package/dist/transforms/string/stringEncoding.js +1 -2
- package/dist/transforms/variableMasking.js +1 -2
- package/dist/utils/NameGen.js +2 -2
- package/dist/utils/PredicateGen.js +1 -2
- package/dist/utils/ast-utils.js +87 -88
- package/dist/utils/function-utils.js +8 -8
- package/dist/utils/node.js +5 -6
- package/dist/utils/object-utils.js +4 -4
- package/dist/utils/random-utils.js +20 -20
- package/dist/utils/static-utils.js +1 -2
- package/dist/validateOptions.js +4 -7
- package/index.d.ts +17 -17
- package/package.json +61 -59
- package/src/constants.ts +168 -168
- package/src/index.ts +118 -118
- package/src/obfuscationResult.ts +49 -49
- package/src/obfuscator.ts +501 -497
- package/src/options.ts +407 -407
- package/src/order.ts +54 -54
- package/src/presets.ts +125 -125
- package/src/templates/bufferToStringTemplate.ts +57 -57
- package/src/templates/deadCodeTemplates.ts +1185 -1185
- package/src/templates/getGlobalTemplate.ts +76 -76
- package/src/templates/integrityTemplate.ts +64 -64
- package/src/templates/setFunctionLengthTemplate.ts +11 -11
- package/src/templates/stringCompressionTemplate.ts +20 -20
- package/src/templates/tamperProtectionTemplates.ts +120 -120
- package/src/templates/template.ts +224 -224
- package/src/transforms/astScrambler.ts +99 -99
- package/src/transforms/calculator.ts +99 -99
- package/src/transforms/controlFlowFlattening.ts +1716 -1664
- package/src/transforms/deadCode.ts +82 -82
- package/src/transforms/dispatcher.ts +450 -450
- package/src/transforms/extraction/duplicateLiteralsRemoval.ts +156 -158
- package/src/transforms/extraction/objectExtraction.ts +186 -186
- package/src/transforms/finalizer.ts +74 -74
- package/src/transforms/flatten.ts +421 -420
- package/src/transforms/identifier/globalConcealing.ts +315 -295
- package/src/transforms/identifier/movedDeclarations.ts +252 -251
- package/src/transforms/identifier/renameVariables.ts +328 -321
- package/src/transforms/lock/integrity.ts +117 -114
- package/src/transforms/lock/lock.ts +418 -425
- package/src/transforms/minify.ts +615 -629
- package/src/transforms/opaquePredicates.ts +100 -100
- package/src/transforms/pack.ts +239 -231
- package/src/transforms/plugin.ts +173 -173
- package/src/transforms/preparation.ts +349 -347
- package/src/transforms/renameLabels.ts +175 -175
- package/src/transforms/rgf.ts +322 -322
- package/src/transforms/shuffle.ts +82 -82
- package/src/transforms/string/encoding.ts +144 -144
- package/src/transforms/string/stringCompression.ts +128 -128
- package/src/transforms/string/stringConcealing.ts +312 -298
- package/src/transforms/string/stringEncoding.ts +80 -80
- package/src/transforms/string/stringSplitting.ts +77 -77
- package/src/transforms/variableMasking.ts +257 -257
- package/src/utils/IntGen.ts +33 -33
- package/src/utils/NameGen.ts +116 -116
- package/src/utils/PredicateGen.ts +61 -61
- package/src/utils/ast-utils.ts +663 -663
- package/src/utils/function-utils.ts +50 -50
- package/src/utils/gen-utils.ts +48 -48
- package/src/utils/node.ts +78 -78
- package/src/utils/object-utils.ts +21 -21
- package/src/utils/random-utils.ts +93 -93
- package/src/utils/static-utils.ts +66 -66
- package/src/validateOptions.ts +256 -259
- package/tsconfig.json +13 -14
- package/dist/probability.js +0 -1
- package/dist/transforms/functionOutlining.js +0 -230
- package/dist/utils/ControlObject.js +0 -125
|
@@ -1,128 +1,128 @@
|
|
|
1
|
-
import { PluginArg, PluginObject } from "../plugin";
|
|
2
|
-
import * as t from "@babel/types";
|
|
3
|
-
import { Order } from "../../order";
|
|
4
|
-
import {
|
|
5
|
-
ensureComputedExpression,
|
|
6
|
-
isModuleImport,
|
|
7
|
-
prependProgram,
|
|
8
|
-
} from "../../utils/ast-utils";
|
|
9
|
-
import { numericLiteral } from "../../utils/node";
|
|
10
|
-
import {
|
|
11
|
-
StringCompressionLibraryMinified,
|
|
12
|
-
StringCompressionTemplate,
|
|
13
|
-
} from "../../templates/stringCompressionTemplate";
|
|
14
|
-
import Obfuscator from "../../obfuscator";
|
|
15
|
-
import { createGetGlobalTemplate } from "../../templates/getGlobalTemplate";
|
|
16
|
-
import { NO_RENAME } from "../../constants";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export default ({ Plugin }: PluginArg): PluginObject => {
|
|
20
|
-
const me = Plugin(Order.StringCompression, {
|
|
21
|
-
changeData: {
|
|
22
|
-
strings: 0,
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
// String Compression is only applied to the main obfuscator
|
|
27
|
-
// Any RGF functions will not have string compression due to the size of the decompression function
|
|
28
|
-
|
|
29
|
-
const stringDelimiter = "|";
|
|
30
|
-
|
|
31
|
-
return {
|
|
32
|
-
visitor: {
|
|
33
|
-
Program: {
|
|
34
|
-
exit(programPath) {
|
|
35
|
-
const stringFn = me.getPlaceholder() + "_SC";
|
|
36
|
-
const stringMap = new Map<string, number>();
|
|
37
|
-
|
|
38
|
-
// Find all the strings
|
|
39
|
-
programPath.traverse({
|
|
40
|
-
StringLiteral: {
|
|
41
|
-
exit: (path) => {
|
|
42
|
-
// Don't change module imports
|
|
43
|
-
if (isModuleImport(path)) return;
|
|
44
|
-
|
|
45
|
-
const originalValue = path.node.value;
|
|
46
|
-
|
|
47
|
-
// Must be at least 3 characters long
|
|
48
|
-
if (originalValue.length < 3) return;
|
|
49
|
-
|
|
50
|
-
// Cannot contain the string delimiter
|
|
51
|
-
if (originalValue.includes(stringDelimiter)) return;
|
|
52
|
-
|
|
53
|
-
let index = stringMap.get(originalValue);
|
|
54
|
-
if (typeof index === "undefined") {
|
|
55
|
-
// Allow user option to skip compression for certain strings
|
|
56
|
-
if (
|
|
57
|
-
!me.computeProbabilityMap(
|
|
58
|
-
me.options.stringCompression,
|
|
59
|
-
originalValue
|
|
60
|
-
)
|
|
61
|
-
) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
index = stringMap.size;
|
|
66
|
-
stringMap.set(originalValue, index);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
me.changeData.strings++;
|
|
70
|
-
|
|
71
|
-
ensureComputedExpression(path);
|
|
72
|
-
|
|
73
|
-
path.replaceWith(
|
|
74
|
-
t.callExpression(t.identifier(stringFn), [
|
|
75
|
-
numericLiteral(index),
|
|
76
|
-
])
|
|
77
|
-
);
|
|
78
|
-
},
|
|
79
|
-
},
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
// No strings changed
|
|
83
|
-
if (stringMap.size === 0) return;
|
|
84
|
-
|
|
85
|
-
var stringPayload = Array.from(stringMap.keys()).join(
|
|
86
|
-
stringDelimiter
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
// Compress the string
|
|
90
|
-
var compressedString = LZString.compressToUTF16(stringPayload);
|
|
91
|
-
|
|
92
|
-
let stringCompressionLibraryName =
|
|
93
|
-
me.obfuscator.getStringCompressionLibraryName();
|
|
94
|
-
let insertStringCompressionLibrary = !me.obfuscator.parentObfuscator;
|
|
95
|
-
|
|
96
|
-
prependProgram(
|
|
97
|
-
programPath,
|
|
98
|
-
StringCompressionTemplate.compile({
|
|
99
|
-
stringFn,
|
|
100
|
-
stringName: me.getPlaceholder(),
|
|
101
|
-
stringArray: me.getPlaceholder(),
|
|
102
|
-
stringDelimiter: () => t.stringLiteral(stringDelimiter),
|
|
103
|
-
stringValue: () => t.stringLiteral(compressedString),
|
|
104
|
-
GetGlobalTemplate: createGetGlobalTemplate(me, programPath),
|
|
105
|
-
getGlobalFnName: me.getPlaceholder(),
|
|
106
|
-
StringCompressionLibrary: stringCompressionLibraryName,
|
|
107
|
-
})
|
|
108
|
-
);
|
|
109
|
-
|
|
110
|
-
if (insertStringCompressionLibrary) {
|
|
111
|
-
// RGF functions should not clone the entire decompression function
|
|
112
|
-
prependProgram(
|
|
113
|
-
programPath,
|
|
114
|
-
Obfuscator.parseCode(
|
|
115
|
-
StringCompressionLibraryMinified.replace(
|
|
116
|
-
/{StringCompressionLibrary}/g,
|
|
117
|
-
stringCompressionLibraryName
|
|
118
|
-
)
|
|
119
|
-
).program.body
|
|
120
|
-
)[0]
|
|
121
|
-
.get("declarations")[0]
|
|
122
|
-
.get("id").node[NO_RENAME] = true;
|
|
123
|
-
}
|
|
124
|
-
},
|
|
125
|
-
},
|
|
126
|
-
},
|
|
127
|
-
};
|
|
128
|
-
};
|
|
1
|
+
import { PluginArg, PluginObject } from "../plugin";
|
|
2
|
+
import * as t from "@babel/types";
|
|
3
|
+
import { Order } from "../../order";
|
|
4
|
+
import {
|
|
5
|
+
ensureComputedExpression,
|
|
6
|
+
isModuleImport,
|
|
7
|
+
prependProgram,
|
|
8
|
+
} from "../../utils/ast-utils";
|
|
9
|
+
import { numericLiteral } from "../../utils/node";
|
|
10
|
+
import {
|
|
11
|
+
StringCompressionLibraryMinified,
|
|
12
|
+
StringCompressionTemplate,
|
|
13
|
+
} from "../../templates/stringCompressionTemplate";
|
|
14
|
+
import Obfuscator from "../../obfuscator";
|
|
15
|
+
import { createGetGlobalTemplate } from "../../templates/getGlobalTemplate";
|
|
16
|
+
import { NO_RENAME } from "../../constants";
|
|
17
|
+
import LZString from "lz-string";
|
|
18
|
+
|
|
19
|
+
export default ({ Plugin }: PluginArg): PluginObject => {
|
|
20
|
+
const me = Plugin(Order.StringCompression, {
|
|
21
|
+
changeData: {
|
|
22
|
+
strings: 0,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
// String Compression is only applied to the main obfuscator
|
|
27
|
+
// Any RGF functions will not have string compression due to the size of the decompression function
|
|
28
|
+
|
|
29
|
+
const stringDelimiter = "|";
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
visitor: {
|
|
33
|
+
Program: {
|
|
34
|
+
exit(programPath) {
|
|
35
|
+
const stringFn = me.getPlaceholder() + "_SC";
|
|
36
|
+
const stringMap = new Map<string, number>();
|
|
37
|
+
|
|
38
|
+
// Find all the strings
|
|
39
|
+
programPath.traverse({
|
|
40
|
+
StringLiteral: {
|
|
41
|
+
exit: (path) => {
|
|
42
|
+
// Don't change module imports
|
|
43
|
+
if (isModuleImport(path)) return;
|
|
44
|
+
|
|
45
|
+
const originalValue = path.node.value;
|
|
46
|
+
|
|
47
|
+
// Must be at least 3 characters long
|
|
48
|
+
if (originalValue.length < 3) return;
|
|
49
|
+
|
|
50
|
+
// Cannot contain the string delimiter
|
|
51
|
+
if (originalValue.includes(stringDelimiter)) return;
|
|
52
|
+
|
|
53
|
+
let index = stringMap.get(originalValue);
|
|
54
|
+
if (typeof index === "undefined") {
|
|
55
|
+
// Allow user option to skip compression for certain strings
|
|
56
|
+
if (
|
|
57
|
+
!me.computeProbabilityMap(
|
|
58
|
+
me.options.stringCompression,
|
|
59
|
+
originalValue
|
|
60
|
+
)
|
|
61
|
+
) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
index = stringMap.size;
|
|
66
|
+
stringMap.set(originalValue, index);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
me.changeData.strings++;
|
|
70
|
+
|
|
71
|
+
ensureComputedExpression(path);
|
|
72
|
+
|
|
73
|
+
path.replaceWith(
|
|
74
|
+
t.callExpression(t.identifier(stringFn), [
|
|
75
|
+
numericLiteral(index),
|
|
76
|
+
])
|
|
77
|
+
);
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// No strings changed
|
|
83
|
+
if (stringMap.size === 0) return;
|
|
84
|
+
|
|
85
|
+
var stringPayload = Array.from(stringMap.keys()).join(
|
|
86
|
+
stringDelimiter
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
// Compress the string
|
|
90
|
+
var compressedString = LZString.compressToUTF16(stringPayload);
|
|
91
|
+
|
|
92
|
+
let stringCompressionLibraryName =
|
|
93
|
+
me.obfuscator.getStringCompressionLibraryName();
|
|
94
|
+
let insertStringCompressionLibrary = !me.obfuscator.parentObfuscator;
|
|
95
|
+
|
|
96
|
+
prependProgram(
|
|
97
|
+
programPath,
|
|
98
|
+
StringCompressionTemplate.compile({
|
|
99
|
+
stringFn,
|
|
100
|
+
stringName: me.getPlaceholder(),
|
|
101
|
+
stringArray: me.getPlaceholder(),
|
|
102
|
+
stringDelimiter: () => t.stringLiteral(stringDelimiter),
|
|
103
|
+
stringValue: () => t.stringLiteral(compressedString),
|
|
104
|
+
GetGlobalTemplate: createGetGlobalTemplate(me, programPath),
|
|
105
|
+
getGlobalFnName: me.getPlaceholder(),
|
|
106
|
+
StringCompressionLibrary: stringCompressionLibraryName,
|
|
107
|
+
})
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
if (insertStringCompressionLibrary) {
|
|
111
|
+
// RGF functions should not clone the entire decompression function
|
|
112
|
+
prependProgram(
|
|
113
|
+
programPath,
|
|
114
|
+
Obfuscator.parseCode(
|
|
115
|
+
StringCompressionLibraryMinified.replace(
|
|
116
|
+
/{StringCompressionLibrary}/g,
|
|
117
|
+
stringCompressionLibraryName
|
|
118
|
+
)
|
|
119
|
+
).program.body
|
|
120
|
+
)[0]
|
|
121
|
+
.get("declarations")[0]
|
|
122
|
+
.get("id").node[NO_RENAME] = true;
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
};
|