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.
Files changed (78) hide show
  1. package/CHANGELOG.md +132 -0
  2. package/README.md +4 -1
  3. package/dist/parser.js +1 -2
  4. package/dist/transforms/controlFlowFlattening/controlFlowFlattening.js +482 -91
  5. package/dist/transforms/controlFlowFlattening/expressionObfuscation.js +4 -0
  6. package/dist/transforms/controlFlowFlattening/{switchCaseObfucation.js → switchCaseObfuscation.js} +2 -2
  7. package/dist/transforms/deadCode.js +1 -1
  8. package/dist/transforms/dispatcher.js +7 -6
  9. package/dist/transforms/eval.js +1 -1
  10. package/dist/transforms/extraction/duplicateLiteralsRemoval.js +4 -2
  11. package/dist/transforms/hideInitializingCode.js +4 -1
  12. package/dist/transforms/identifier/globalConcealing.js +18 -8
  13. package/dist/transforms/identifier/variableAnalysis.js +1 -1
  14. package/dist/transforms/label.js +11 -2
  15. package/dist/transforms/lock/antiDebug.js +32 -13
  16. package/dist/transforms/lock/lock.js +3 -3
  17. package/dist/transforms/minify.js +2 -2
  18. package/dist/transforms/opaquePredicates.js +4 -2
  19. package/dist/transforms/preparation/preparation.js +8 -0
  20. package/dist/transforms/renameLabels.js +17 -3
  21. package/dist/transforms/rgf.js +8 -3
  22. package/dist/transforms/stack.js +1 -1
  23. package/dist/transforms/string/encoding.js +74 -0
  24. package/dist/transforms/string/stringCompression.js +6 -2
  25. package/dist/transforms/string/stringConcealing.js +1 -1
  26. package/dist/transforms/string/stringSplitting.js +6 -0
  27. package/dist/traverse.js +0 -34
  28. package/dist/util/gen.js +3 -1
  29. package/dist/util/identifiers.js +8 -18
  30. package/dist/util/insert.js +4 -38
  31. package/package.json +2 -2
  32. package/src/options.ts +3 -3
  33. package/src/parser.ts +1 -2
  34. package/src/transforms/controlFlowFlattening/controlFlowFlattening.ts +735 -134
  35. package/src/transforms/controlFlowFlattening/expressionObfuscation.ts +6 -0
  36. package/src/transforms/controlFlowFlattening/{switchCaseObfucation.ts → switchCaseObfuscation.ts} +6 -2
  37. package/src/transforms/deadCode.ts +8 -0
  38. package/src/transforms/dispatcher.ts +16 -6
  39. package/src/transforms/eval.ts +2 -1
  40. package/src/transforms/extraction/duplicateLiteralsRemoval.ts +40 -5
  41. package/src/transforms/hideInitializingCode.ts +432 -425
  42. package/src/transforms/identifier/globalConcealing.ts +102 -38
  43. package/src/transforms/identifier/variableAnalysis.ts +1 -1
  44. package/src/transforms/label.ts +20 -2
  45. package/src/transforms/lock/antiDebug.ts +69 -33
  46. package/src/transforms/lock/lock.ts +4 -5
  47. package/src/transforms/minify.ts +2 -1
  48. package/src/transforms/opaquePredicates.ts +25 -3
  49. package/src/transforms/preparation/preparation.ts +8 -1
  50. package/src/transforms/renameLabels.ts +26 -3
  51. package/src/transforms/rgf.ts +6 -1
  52. package/src/transforms/stack.ts +2 -1
  53. package/src/transforms/string/encoding.ts +107 -1
  54. package/src/transforms/string/stringCompression.ts +28 -3
  55. package/src/transforms/string/stringConcealing.ts +2 -0
  56. package/src/transforms/string/stringSplitting.ts +11 -0
  57. package/src/transforms/transform.ts +1 -2
  58. package/src/traverse.ts +0 -30
  59. package/src/util/gen.ts +5 -3
  60. package/src/util/identifiers.ts +18 -19
  61. package/src/util/insert.ts +10 -76
  62. package/src/util/scope.ts +9 -9
  63. package/test/{transforms/compare.test.ts → compare.test.ts} +2 -2
  64. package/test/index.test.ts +109 -1
  65. package/test/templates/template.test.ts +14 -0
  66. package/test/transforms/controlFlowFlattening/controlFlowFlattening.test.ts +392 -10
  67. package/test/transforms/dispatcher.test.ts +30 -0
  68. package/test/transforms/eval.test.ts +28 -0
  69. package/test/transforms/flatten.test.ts +28 -0
  70. package/test/transforms/hideInitializingCode.test.ts +336 -336
  71. package/test/transforms/identifier/renameVariables.test.ts +31 -0
  72. package/test/transforms/lock/antiDebug.test.ts +43 -0
  73. package/test/transforms/renameLabels.test.ts +33 -0
  74. package/test/transforms/rgf.test.ts +29 -0
  75. package/test/transforms/string/stringSplitting.test.ts +33 -0
  76. package/test/util/identifiers.test.ts +105 -17
  77. package/dist/util/expr.js +0 -60
  78. 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
 
package/dist/parser.js CHANGED
@@ -28,8 +28,7 @@ async function parseJS(code) {
28
28
  var parsed = parseSync(code);
29
29
  return parsed;
30
30
  } catch (e) {
31
- console.error(e);
32
- throw new Error("Failed to parse code.");
31
+ throw e;
33
32
  }
34
33
  }
35
34
  /**