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/docs/ES5.md
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
## `ES5`
|
|
2
|
-
|
|
3
|
-
The ES5 option converts most ES6+ features into ES5 compatible code.
|
|
4
|
-
|
|
5
|
-
Option name: `es5`
|
|
6
|
-
|
|
7
|
-
Option values: `true/false`
|
|
8
|
-
|
|
9
|
-
Note: Does not cover all cases such as Promises or Generator functions. Use [Babel](https://babel.dev/).
|
|
10
|
-
|
|
11
|
-
The ES5 option is intended to undo any ES6 feature the obfuscator adds to your code. If you input ES5 code, and enable the `es5` option, you can be guaranteed to have ES5 compatible output.
|
|
12
|
-
|
|
13
|
-
## Example
|
|
14
|
-
|
|
15
|
-
```js
|
|
16
|
-
// Input
|
|
17
|
-
function print(...messages){
|
|
18
|
-
console.log(...messages); // The spread operator (...)
|
|
19
|
-
// was introduced in ES6!
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
print("Hello", "World"); // "Hello World"
|
|
23
|
-
|
|
24
|
-
// Output
|
|
25
|
-
var __p_2580918143;
|
|
26
|
-
function print() {
|
|
27
|
-
var __p_7607361496;
|
|
28
|
-
var messages, __p_2591841272 = (__p_7607361496 = Array.prototype.slice.call(arguments), messages = __p_7607361496.slice(0));
|
|
29
|
-
(__p_2580918143 = console).log.apply(__p_2580918143, [].concat(Array.prototype.slice.call(messages)));
|
|
30
|
-
}
|
|
31
|
-
print('Hello', 'World'); // "Hello World"
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## Polyfill Array Methods
|
|
35
|
-
|
|
36
|
-
When the ES5 option is enabled, array method polyfills will be injected to the top of your script.
|
|
37
|
-
|
|
38
|
-
```js
|
|
39
|
-
if (!Array.prototype.forEach) {
|
|
40
|
-
Array.prototype.forEach = function forEach(callback, thisArg) {
|
|
41
|
-
if (typeof callback !== 'function') {
|
|
42
|
-
throw new TypeError(callback + ' is not a function');
|
|
43
|
-
}
|
|
44
|
-
var array = this;
|
|
45
|
-
thisArg = thisArg || this;
|
|
46
|
-
for (var i = 0, l = array.length; i !== l; ++i) {
|
|
47
|
-
callback.call(thisArg, array[i], i, array);
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Destructuring
|
|
54
|
-
|
|
55
|
-
The ES5 option supports transpiling the destructuring patterns.
|
|
56
|
-
|
|
57
|
-
```js
|
|
58
|
-
// Input
|
|
59
|
-
var {userName, email} = { userName: "John", email: "email@exampe.com" };
|
|
60
|
-
|
|
61
|
-
// Output
|
|
62
|
-
var __p_7467473759;
|
|
63
|
-
var userName, email, __p_4755992742 = (__p_7467473759 = {
|
|
64
|
-
userName: 'John',
|
|
65
|
-
email: 'email@exampe.com'
|
|
66
|
-
}, userName = __p_7467473759.userName, email = __p_7467473759.email);
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Spread Operator
|
|
70
|
-
|
|
71
|
-
The ES5 option supports transpiling the spread operator.
|
|
72
|
-
|
|
73
|
-
```js
|
|
74
|
-
// Input
|
|
75
|
-
array.push(...objects);
|
|
76
|
-
|
|
77
|
-
// Output
|
|
78
|
-
var __p_6344935930;
|
|
79
|
-
(__p_6344935930 = array).push.apply(__p_6344935930, [].concat(Array.prototype.slice.call(objects)));
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## Template String
|
|
83
|
-
|
|
84
|
-
The ES5 option supports transpiling template strings.
|
|
85
|
-
|
|
86
|
-
```js
|
|
87
|
-
// Input
|
|
88
|
-
var myString = `Hello ${userName}`;
|
|
89
|
-
|
|
90
|
-
// Output
|
|
91
|
-
var myString = 'Hello ' + (userName + '');
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Object getters/setters
|
|
95
|
-
|
|
96
|
-
The ES5 option supports transpiling getter and setter methods.
|
|
97
|
-
|
|
98
|
-
```js
|
|
99
|
-
// Input
|
|
100
|
-
var _name;
|
|
101
|
-
var myObject = {
|
|
102
|
-
get name(){
|
|
103
|
-
return _name;
|
|
104
|
-
},
|
|
105
|
-
set name(newName){
|
|
106
|
-
_name = newName;
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
// Output
|
|
111
|
-
function __p_6886881506(base, computedProps, getters, setters) {
|
|
112
|
-
for (var i = 0; i < computedProps.length; i++) {
|
|
113
|
-
base[computedProps[i][0]] = computedProps[i][1];
|
|
114
|
-
}
|
|
115
|
-
var keys = Object.create(null);
|
|
116
|
-
Object.keys(getters).forEach(function (key) {
|
|
117
|
-
return keys[key] = 1;
|
|
118
|
-
});
|
|
119
|
-
Object.keys(setters).forEach(function (key) {
|
|
120
|
-
return keys[key] = 1;
|
|
121
|
-
});
|
|
122
|
-
Object.keys(keys).forEach(function (key) {
|
|
123
|
-
Object.defineProperty(base, key, {
|
|
124
|
-
set: setters[key],
|
|
125
|
-
get: getters[key],
|
|
126
|
-
configurable: true
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
return base;
|
|
130
|
-
}
|
|
131
|
-
var _name;
|
|
132
|
-
var myObject = __p_6886881506({}, [], {
|
|
133
|
-
'name': function () {
|
|
134
|
-
return _name;
|
|
135
|
-
}
|
|
136
|
-
}, {
|
|
137
|
-
'name': function (newName) {
|
|
138
|
-
_name = newName;
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## Arrow Functions
|
|
144
|
-
|
|
145
|
-
The ES5 option converts arrow functions into regular functions.
|
|
146
|
-
|
|
147
|
-
```js
|
|
148
|
-
// Input
|
|
149
|
-
var print = message => console.log(message);
|
|
150
|
-
|
|
151
|
-
// Output
|
|
152
|
-
var print = function (message) {
|
|
153
|
-
return console.log(message);
|
|
154
|
-
};
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## Const/Let
|
|
158
|
-
|
|
159
|
-
The ES5 option converts `const` and `let` to a regular `var` keyword.
|
|
160
|
-
|
|
161
|
-
```js
|
|
162
|
-
// Input
|
|
163
|
-
let myVar1 = true;
|
|
164
|
-
const myVar2 = "String";
|
|
165
|
-
|
|
166
|
-
// Output
|
|
167
|
-
var myVar1 = true;
|
|
168
|
-
var myVar2 = 'String';
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
## Classes
|
|
172
|
-
|
|
173
|
-
The ES5 option partially supports transpiling classes.
|
|
174
|
-
|
|
175
|
-
## Reserved Identifiers
|
|
176
|
-
|
|
177
|
-
The ES5 option will change any illegal uses of reserved identifiers.
|
|
178
|
-
|
|
179
|
-
```js
|
|
180
|
-
// Input
|
|
181
|
-
var myObject = {true: 1};
|
|
182
|
-
myObject.for = true;
|
|
183
|
-
|
|
184
|
-
// Output
|
|
185
|
-
var myObject = {"true": 1};
|
|
186
|
-
myObject["for"] = true;
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
## Features not supported
|
|
190
|
-
|
|
191
|
-
- Promises
|
|
192
|
-
- Async / Await
|
|
193
|
-
- Generator functions
|
|
194
|
-
- Nullish coalescing
|
|
195
|
-
- Optional chaining
|
|
196
|
-
|
|
197
|
-
Use [Babel](https://babel.dev/) to transpile these features. JS-Confuser will only support features the obfuscator may potentially add to your code.
|
package/docs/Integrity.md
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
## `Integrity`
|
|
2
|
-
|
|
3
|
-
JS-Confuser can detect changes to the source code and terminate execution.
|
|
4
|
-
|
|
5
|
-
- **⚠️ This can break your code!**
|
|
6
|
-
|
|
7
|
-
Option name: `lock.integrity`
|
|
8
|
-
|
|
9
|
-
Option values: `true/false`
|
|
10
|
-
|
|
11
|
-
### Usage
|
|
12
|
-
|
|
13
|
-
```js
|
|
14
|
-
var JsConfuser = require("js-confuser");
|
|
15
|
-
|
|
16
|
-
var sourceCode = "console.log(1)"
|
|
17
|
-
|
|
18
|
-
JsConfuser.obfuscate(sourceCode, {
|
|
19
|
-
target: "browser",
|
|
20
|
-
lock: {
|
|
21
|
-
integrity: true,
|
|
22
|
-
},
|
|
23
|
-
}).then((obfuscated) => {
|
|
24
|
-
console.log(obfuscated);
|
|
25
|
-
});
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
### Example
|
|
29
|
-
|
|
30
|
-
Consider the following code:
|
|
31
|
-
|
|
32
|
-
```js
|
|
33
|
-
console.log(1)
|
|
34
|
-
|
|
35
|
-
// 1
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
The obfuscated code (from Usage):
|
|
39
|
-
|
|
40
|
-
```js
|
|
41
|
-
(function(){var jXwFUz=Math.imul||function(jXwFUz,m9pBnlk){m9pBnlk|=0;var n1mfO$O=(jXwFUz&4194303)*m9pBnlk;if(jXwFUz&4290772992)n1mfO$O+=(jXwFUz&4290772992)*m9pBnlk|0;return n1mfO$O|0};function m9pBnlk(n1mfO$O,humOEA){var DGCgjl=3735928559^humOEA;var S$63Fy1=1103547991^humOEA;for(var Lop2FFS=0,GC2VbAQ;Lop2FFS<n1mfO$O.length;Lop2FFS++){GC2VbAQ=n1mfO$O.charCodeAt(Lop2FFS);DGCgjl=jXwFUz(DGCgjl^GC2VbAQ,2654435761);S$63Fy1=jXwFUz(S$63Fy1^GC2VbAQ,1597334677)}DGCgjl=jXwFUz(DGCgjl^DGCgjl>>>16,2246822507)^jXwFUz(S$63Fy1^S$63Fy1>>>13,3266489909);S$63Fy1=jXwFUz(S$63Fy1^S$63Fy1>>>16,2246822507)^jXwFUz(DGCgjl^DGCgjl>>>13,3266489909);return 4294967296*(2097151&S$63Fy1)+(DGCgjl>>>0)}function n1mfO$O(jXwFUz){return jXwFUz.toString().replace(/ |\n|;|,|\{|\}|\(|\)/g,'')}function y3EzuX9(){console['log'](1)}var yzLesc=m9pBnlk(n1mfO$O(y3EzuX9),957);if(yzLesc==0x7a77799eaf937){return y3EzuX9.apply(this,arguments)}}())
|
|
42
|
-
|
|
43
|
-
// 1
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Since only Integrity is enabled, it's pretty easy to find the original code: `console['log'](1)`.
|
|
47
|
-
|
|
48
|
-
Let's try to change the `console['log'](1)` to `console['log'](2)`:
|
|
49
|
-
|
|
50
|
-
```js
|
|
51
|
-
(function(){var jXwFUz=Math.imul||function(jXwFUz,m9pBnlk){m9pBnlk|=0;var n1mfO$O=(jXwFUz&4194303)*m9pBnlk;if(jXwFUz&4290772992)n1mfO$O+=(jXwFUz&4290772992)*m9pBnlk|0;return n1mfO$O|0};function m9pBnlk(n1mfO$O,humOEA){var DGCgjl=3735928559^humOEA;var S$63Fy1=1103547991^humOEA;for(var Lop2FFS=0,GC2VbAQ;Lop2FFS<n1mfO$O.length;Lop2FFS++){GC2VbAQ=n1mfO$O.charCodeAt(Lop2FFS);DGCgjl=jXwFUz(DGCgjl^GC2VbAQ,2654435761);S$63Fy1=jXwFUz(S$63Fy1^GC2VbAQ,1597334677)}DGCgjl=jXwFUz(DGCgjl^DGCgjl>>>16,2246822507)^jXwFUz(S$63Fy1^S$63Fy1>>>13,3266489909);S$63Fy1=jXwFUz(S$63Fy1^S$63Fy1>>>16,2246822507)^jXwFUz(DGCgjl^DGCgjl>>>13,3266489909);return 4294967296*(2097151&S$63Fy1)+(DGCgjl>>>0)}function n1mfO$O(jXwFUz){return jXwFUz.toString().replace(/ |\n|;|,|\{|\}|\(|\)/g,'')}function y3EzuX9(){console['log'](2)}var yzLesc=m9pBnlk(n1mfO$O(y3EzuX9),957);if(yzLesc==0x7a77799eaf937){return y3EzuX9.apply(this,arguments)}}())
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
The program no longer outputs anything. Integrity has detected the change and stopped execution.
|
|
55
|
-
|
|
56
|
-
### How is this possible?
|
|
57
|
-
|
|
58
|
-
JavaScript has a sneaky method to view the source code any function. Calling `Function.toString()` on any function reveals the raw source code.
|
|
59
|
-
|
|
60
|
-
Integrity uses a hashing algorithm on the obfuscated code during the obfuscation-phase. The obfuscator then places checksum functions throughout the output code to verify it's unchanged at runtime.
|
|
61
|
-
|
|
62
|
-
An additional RegEx is utilized to remove spaces, newlines, braces, and commas. This ensures the hash isn't too sensitive.
|
|
63
|
-
|
|
64
|
-
### Tamper Detection
|
|
65
|
-
|
|
66
|
-
If tampering is detected, the `lock.countermeasures` function will be invoked. If you don't provide a `lock.countermeasures` function, the default behavior is to crash the program.
|
|
67
|
-
|
|
68
|
-
[Learn more about the countermeasures function](Countermeasures.md).
|
|
69
|
-
|
|
70
|
-
### Potential Issues
|
|
71
|
-
|
|
72
|
-
If you decide to use Integrity, consider the following:
|
|
73
|
-
|
|
74
|
-
1. Any build-tools must not modify the locked code. The code can't be changed after JS-Confuser is applied.
|
|
75
|
-
2. `Function.toString()` functionality may not be enabled in your environment (bytenode)
|
|
76
|
-
|
|
77
|
-
### See also
|
|
78
|
-
|
|
79
|
-
- [Countermeasures](Countermeasures.md)
|
|
80
|
-
- [Tamper Protection](TamperProtection.md)
|
|
81
|
-
|
|
82
|
-
|