js-confuser 1.2.2 → 1.4.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 +132 -0
- package/README.md +4 -1
- package/dist/parser.js +1 -2
- package/dist/transforms/controlFlowFlattening/controlFlowFlattening.js +482 -91
- package/dist/transforms/controlFlowFlattening/expressionObfuscation.js +4 -0
- package/dist/transforms/controlFlowFlattening/{switchCaseObfucation.js → switchCaseObfuscation.js} +2 -2
- package/dist/transforms/deadCode.js +1 -1
- package/dist/transforms/dispatcher.js +7 -6
- package/dist/transforms/eval.js +1 -1
- package/dist/transforms/extraction/duplicateLiteralsRemoval.js +4 -2
- package/dist/transforms/hideInitializingCode.js +4 -1
- package/dist/transforms/identifier/globalConcealing.js +18 -8
- package/dist/transforms/identifier/variableAnalysis.js +1 -1
- package/dist/transforms/label.js +11 -2
- package/dist/transforms/lock/antiDebug.js +32 -13
- package/dist/transforms/lock/lock.js +3 -3
- package/dist/transforms/minify.js +2 -2
- package/dist/transforms/opaquePredicates.js +4 -2
- package/dist/transforms/preparation/preparation.js +8 -0
- package/dist/transforms/renameLabels.js +17 -3
- package/dist/transforms/rgf.js +8 -3
- package/dist/transforms/stack.js +1 -1
- package/dist/transforms/string/encoding.js +74 -0
- package/dist/transforms/string/stringCompression.js +6 -2
- package/dist/transforms/string/stringConcealing.js +1 -1
- package/dist/transforms/string/stringSplitting.js +6 -0
- package/dist/traverse.js +0 -34
- package/dist/util/gen.js +3 -1
- package/dist/util/identifiers.js +8 -18
- package/dist/util/insert.js +4 -38
- package/package.json +2 -2
- package/src/options.ts +3 -3
- package/src/parser.ts +1 -2
- package/src/transforms/controlFlowFlattening/controlFlowFlattening.ts +735 -134
- package/src/transforms/controlFlowFlattening/expressionObfuscation.ts +6 -0
- package/src/transforms/controlFlowFlattening/{switchCaseObfucation.ts → switchCaseObfuscation.ts} +6 -2
- package/src/transforms/deadCode.ts +8 -0
- package/src/transforms/dispatcher.ts +16 -6
- package/src/transforms/eval.ts +2 -1
- package/src/transforms/extraction/duplicateLiteralsRemoval.ts +40 -5
- package/src/transforms/hideInitializingCode.ts +432 -425
- package/src/transforms/identifier/globalConcealing.ts +102 -38
- package/src/transforms/identifier/variableAnalysis.ts +1 -1
- package/src/transforms/label.ts +20 -2
- package/src/transforms/lock/antiDebug.ts +69 -33
- package/src/transforms/lock/lock.ts +4 -5
- package/src/transforms/minify.ts +2 -1
- package/src/transforms/opaquePredicates.ts +25 -3
- package/src/transforms/preparation/preparation.ts +8 -1
- package/src/transforms/renameLabels.ts +26 -3
- package/src/transforms/rgf.ts +6 -1
- package/src/transforms/stack.ts +2 -1
- package/src/transforms/string/encoding.ts +107 -1
- package/src/transforms/string/stringCompression.ts +28 -3
- package/src/transforms/string/stringConcealing.ts +2 -0
- package/src/transforms/string/stringSplitting.ts +11 -0
- package/src/transforms/transform.ts +1 -2
- package/src/traverse.ts +0 -30
- package/src/util/gen.ts +5 -3
- package/src/util/identifiers.ts +18 -19
- package/src/util/insert.ts +10 -76
- package/src/util/scope.ts +9 -9
- package/test/{transforms/compare.test.ts → compare.test.ts} +2 -2
- package/test/index.test.ts +109 -1
- package/test/templates/template.test.ts +14 -0
- package/test/transforms/controlFlowFlattening/controlFlowFlattening.test.ts +392 -10
- package/test/transforms/dispatcher.test.ts +30 -0
- package/test/transforms/eval.test.ts +28 -0
- package/test/transforms/flatten.test.ts +28 -0
- package/test/transforms/hideInitializingCode.test.ts +336 -336
- package/test/transforms/identifier/renameVariables.test.ts +31 -0
- package/test/transforms/lock/antiDebug.test.ts +43 -0
- package/test/transforms/renameLabels.test.ts +33 -0
- package/test/transforms/rgf.test.ts +29 -0
- package/test/transforms/string/stringSplitting.test.ts +33 -0
- package/test/util/identifiers.test.ts +105 -17
- package/dist/util/expr.js +0 -60
- package/src/util/expr.ts +0 -56
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,135 @@
|
|
|
1
|
+
# `1.4.2`
|
|
2
|
+
Eval Fix
|
|
3
|
+
|
|
4
|
+
- Fixed [#31](https://github.com/MichaelXF/js-confuser/issues/31)
|
|
5
|
+
- - Eval and Integrity didn't work together, fixed in this version.
|
|
6
|
+
|
|
7
|
+
# `1.4.1`
|
|
8
|
+
AntiDebug Fix
|
|
9
|
+
|
|
10
|
+
- Fixed [#28](https://github.com/MichaelXF/js-confuser/issues/28)
|
|
11
|
+
- - AntiDebug was causing syntax errors in some scenarios, fixed in this version.
|
|
12
|
+
|
|
13
|
+
# `1.4.0`
|
|
14
|
+
Confusing Control Flow
|
|
15
|
+
|
|
16
|
+
- `Control Flow Flattening` overhaul, now flattens embedded control structures
|
|
17
|
+
|
|
18
|
+
- - `If statements`
|
|
19
|
+
- - `For statements`
|
|
20
|
+
- - `While statements`
|
|
21
|
+
- - `Switch statements`
|
|
22
|
+
- - `Do While statements`
|
|
23
|
+
|
|
24
|
+
- - Certain functions
|
|
25
|
+
|
|
26
|
+
```js
|
|
27
|
+
// Input
|
|
28
|
+
console.log(1);
|
|
29
|
+
console.log(2);
|
|
30
|
+
console.log(Number("3"));
|
|
31
|
+
|
|
32
|
+
for (var i = 4; i < 6; i++) {
|
|
33
|
+
console.log(i);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
var i = 0;
|
|
37
|
+
do {
|
|
38
|
+
console.log(i + 6);
|
|
39
|
+
} while (i++ < 4);
|
|
40
|
+
|
|
41
|
+
// Output
|
|
42
|
+
var a = -123, b = 414, c = -191;
|
|
43
|
+
while (a + b + c != 104) {
|
|
44
|
+
var d = (a + b + c) * -28 + 172;
|
|
45
|
+
switch (d) {
|
|
46
|
+
case -276:
|
|
47
|
+
!(a *= 138 > b ? 2 : 158, a -= -5 < c ? -90 : -152, b *= b + 206, b -= a + -539, c += b + -372);
|
|
48
|
+
break;
|
|
49
|
+
case -2628:
|
|
50
|
+
var e = (console['log'](-106 > c ? 1 : 182), console['log'](a + 125), console['log'](Number('3')), -87 < a ? -189 < a ? -133 : 93 : 107 < c ? 227 : 4);
|
|
51
|
+
~(a *= (-114 > c ? -164 : -107) < c ? -164 : 2, a -= 188 > b ? b + -211 : -369, b += -62 > c ? 168 > c ? -539 : 56 : 26, c += (c + 362 > a ? 73 : -157) < b ? 207 : 341);
|
|
52
|
+
break;
|
|
53
|
+
case -4420:
|
|
54
|
+
+(a *= a + (a + 18), a -= 190 > a ? -344 : 71, b *= -206 < b ? c + -173 : -221, b -= b + 94, c += 89 > b ? -311 : 170);
|
|
55
|
+
break;
|
|
56
|
+
case -3972:
|
|
57
|
+
if (e < c + -144) {
|
|
58
|
+
!(a *= b + 127, a -= b + (b + 671), b += c + 82, c *= 61 < a ? -139 : 2, c -= b + -35);
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
typeof (a *= c + -148, a -= c + 271, b += c + 184, c += -89 < c ? -42 : -114);
|
|
62
|
+
break;
|
|
63
|
+
case -3244:
|
|
64
|
+
+(a += a + 220, b += b + 317, c += b + -218);
|
|
65
|
+
break;
|
|
66
|
+
case -4308:
|
|
67
|
+
!(a += 134 < b ? -233 : 89, b += -79 < b ? -69 : -241, c *= -107 > a ? -97 : 2, c -= (56 < a ? -27 : -184) > c ? -163 : 231);
|
|
68
|
+
break;
|
|
69
|
+
case -3664:
|
|
70
|
+
~(a += b + -362, b += -87 < b ? -666 : -172, c += c + 710);
|
|
71
|
+
break;
|
|
72
|
+
case -5344:
|
|
73
|
+
+(a *= c + (-165 < a ? -266 : 182) > c ? 124 : 2, a -= -154 > b ? c + 92 : -388, b += c + -193, c *= c + (c + -30), c -= a + -11);
|
|
74
|
+
break;
|
|
75
|
+
case -2572:
|
|
76
|
+
if (e++ < ((-125 < a ? -62 : 87) < c ? -112 : 4)) {
|
|
77
|
+
~(a += c + -268, b += 215 < b ? 136 : 18 < b ? -233 : 536, c += b + -535);
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
~(a *= (123 > a ? -105 : 238) < b ? 216 : 2, a -= a + 57, b *= a + 59, b -= a + -369, c *= b + -236, c -= 200 > c ? -288 : -11);
|
|
81
|
+
break;
|
|
82
|
+
case -4784:
|
|
83
|
+
+(console['log'](e), a *= c + -223, a -= 7 > c ? -227 > b ? -4 : 192 : -157, b *= a + (-186 > b ? 211 : 17), b -= -127 > c ? 76 : 280, c *= -63 > c ? a + 264 : 2, c -= (119 < c ? -206 : 85) < a ? 215 : 179);
|
|
84
|
+
break;
|
|
85
|
+
case -724:
|
|
86
|
+
void (console['log'](e + (c + -246)), a *= -177 < c ? 2 : 207, a -= 152 > a ? 122 : -190, b *= c + -250, b -= b + 160, c += -141 < a ? a + 258 : 21);
|
|
87
|
+
break;
|
|
88
|
+
case -3804:
|
|
89
|
+
var e = -143 > a ? 0 : 24;
|
|
90
|
+
typeof (a += c + -9, b += c + 125, c += a + -261);
|
|
91
|
+
break;
|
|
92
|
+
case -1648:
|
|
93
|
+
~(e++, a += a + 3, b *= c + 68, b -= 89 < b ? -173 > b ? -147 : 267 : -228 > c ? -80 : -216 > b ? 93 : 68, c += 65 > a ? b + 156 : 216);
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
- New encoding type `Hex Table`
|
|
100
|
+
|
|
101
|
+
```js
|
|
102
|
+
"{0x7E494534,0x688,0x7E6D53,0x401,0x7E584D4B,0x688,0x7E775853,0x688,0x7E5333,0x81}"
|
|
103
|
+
|
|
104
|
+
// => "Hello World"
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
- Improvements to renaming labels
|
|
108
|
+
- Fixed [#24](https://github.com/MichaelXF/js-confuser/issues/24)
|
|
109
|
+
- Fixed [#25](https://github.com/MichaelXF/js-confuser/issues/25)
|
|
110
|
+
- Fixed [#26](https://github.com/MichaelXF/js-confuser/issues/26)
|
|
111
|
+
|
|
112
|
+
# `1.3.0`
|
|
113
|
+
String Splitting Improvement
|
|
114
|
+
|
|
115
|
+
- `String Splitting` now supports percentages and a custom callback. ([#22](https://github.com/MichaelXF/js-confuser/issues/22))
|
|
116
|
+
|
|
117
|
+
```js
|
|
118
|
+
{
|
|
119
|
+
// percentage
|
|
120
|
+
stringSplitting: 0.75, // = 75%
|
|
121
|
+
|
|
122
|
+
// exclude certain strings
|
|
123
|
+
stringSplitting: (str)=>{
|
|
124
|
+
if ( str == "dont-split-string" ) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return true;
|
|
129
|
+
},
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
1
133
|
# `1.2.2`
|
|
2
134
|
Global name fix
|
|
3
135
|
|
package/README.md
CHANGED
|
@@ -14,6 +14,7 @@ JS-Confuser is a JavaScript obfuscation tool to make your programs _impossible_
|
|
|
14
14
|
## Presets
|
|
15
15
|
|
|
16
16
|
JS-Confuser comes with three presets built into the obfuscator.
|
|
17
|
+
|
|
17
18
|
| Preset | Transforms | Performance Reduction | Sample |
|
|
18
19
|
| --- | --- | --- | --- |
|
|
19
20
|
| High | 21/22 | 98% | [Sample](https://github.com/MichaelXF/js-confuser/blob/master/samples/high.js) |
|
|
@@ -254,7 +255,9 @@ Use a number to control the percentage of strings.
|
|
|
254
255
|
|
|
255
256
|
### `stringSplitting`
|
|
256
257
|
|
|
257
|
-
[String Splitting](https://docs.jscrambler.com/code-integrity/documentation/transformations/string-splitting) splits your strings into multiple expressions. (`true/false`)
|
|
258
|
+
[String Splitting](https://docs.jscrambler.com/code-integrity/documentation/transformations/string-splitting) splits your strings into multiple expressions. (`true/false/0-1`)
|
|
259
|
+
|
|
260
|
+
Use a number to control the percentage of strings.
|
|
258
261
|
|
|
259
262
|
`"console"` -> `String.fromCharCode(99) + 'ons' + 'ole'`
|
|
260
263
|
|