jscrambler-metro-plugin 6.5.0 → 6.5.1

Sign up to get free protection for your applications and to get access to all the features.
package/lib/constants.js CHANGED
@@ -17,10 +17,21 @@ const JSCRAMBLER_END_ANNOTATION = '"JSCRAMBLER-END";';
17
17
  const JSCRAMBLER_EXTS = /.(j|t)s(x)?$/i;
18
18
  const JSCRAMBLER_SELF_DEFENDING = 'selfDefending';
19
19
  const JSCRAMBLER_ANTI_TAMPERING = 'antiTampering';
20
+ const JSCRAMBLER_SELF_HEALING = "selfHealing";
20
21
  const JSCRAMBLER_ANTI_TAMPERING_MODE_RCK = 'RCK';
21
22
  const JSCRAMBLER_ANTI_TAMPERING_MODE_SKL = 'SKL';
22
23
  const JSCRAMBLER_GLOBAL_VARIABLE_INDIRECTION = 'globalVariableIndirection';
23
24
  const JSCRAMBLER_TOLERATE_BENIGN_POISONING = 'tolerateBenignPoisoning';
25
+ const JSCRAMBLER_HERMES_INCOMPATIBILITIES = [
26
+ {
27
+ slugName: JSCRAMBLER_SELF_DEFENDING,
28
+ errorMessage: `Jscrambler ${JSCRAMBLER_SELF_DEFENDING} transformation is not compatible with Hermes engine. Consider using ${JSCRAMBLER_ANTI_TAMPERING} transformation instead`,
29
+ },
30
+ ];
31
+ const JSCRAMBLER_HERMES_ADD_SHOW_SOURCE_DIRECTIVE = [
32
+ JSCRAMBLER_ANTI_TAMPERING,
33
+ JSCRAMBLER_SELF_HEALING
34
+ ];
24
35
 
25
36
  module.exports = {
26
37
  BUNDLE_CMD,
@@ -41,6 +52,9 @@ module.exports = {
41
52
  JSCRAMBLER_TOLERATE_BENIGN_POISONING,
42
53
  JSCRAMBLER_ANTI_TAMPERING,
43
54
  JSCRAMBLER_ANTI_TAMPERING_MODE_RCK,
55
+ JSCRAMBLER_SELF_HEALING,
56
+ JSCRAMBLER_HERMES_INCOMPATIBILITIES,
57
+ JSCRAMBLER_HERMES_ADD_SHOW_SOURCE_DIRECTIVE,
44
58
  JSCRAMBLER_ANTI_TAMPERING_MODE_SKL,
45
59
  JSCRAMBLER_EXTS
46
60
  }
package/lib/index.js CHANGED
@@ -30,6 +30,8 @@ const {
30
30
  handleExcludeList,
31
31
  injectTolerateBegninPoisoning,
32
32
  handleAntiTampering,
33
+ addHermesShowSourceDirective,
34
+ handleHermesIncompatibilities,
33
35
  wrapCodeWithTags
34
36
  } = require('./utils');
35
37
 
@@ -155,7 +157,16 @@ async function obfuscateBundle(
155
157
  process.exit(-1);
156
158
  }
157
159
 
158
- const {addShowSource, requireStartAtFirstColumn} = handleAntiTampering(config, processedMetroBundle);
160
+ const requireStartAtFirstColumn = handleAntiTampering(
161
+ config,
162
+ processedMetroBundle,
163
+ );
164
+
165
+ const addShowSource = addHermesShowSourceDirective(config);
166
+
167
+ if (addShowSource) {
168
+ console.log(`info Jscrambler 'show source' directive added`);
169
+ }
159
170
 
160
171
  const shouldGenerateSourceMaps = config.sourceMaps && bundleSourceMapPath;
161
172
 
@@ -284,8 +295,16 @@ module.exports = function (_config = {}, projectRoot = process.cwd()) {
284
295
  console.log(
285
296
  instrument
286
297
  ? 'info Jscrambler Instrumenting Code'
287
- : 'info Jscrambler Obfuscating Code'
298
+ : `info Jscrambler Obfuscating Code ${
299
+ config.enabledHermes
300
+ ? "(Using Hermes Engine)"
301
+ : "(If you are using Hermes Engine set enabledHermes=true)"
302
+ }`,
288
303
  );
304
+
305
+ // check for incompatible transformations and turn off code hardening
306
+ handleHermesIncompatibilities(config);
307
+
289
308
  // start obfuscation
290
309
  await obfuscateBundle(bundlePath, {fileNames: Array.from(fileNames), entryPointCode}, sourceMapFiles, config, projectRoot);
291
310
  } catch(err) {
package/lib/utils.js CHANGED
@@ -9,6 +9,8 @@ const {
9
9
  JSCRAMBLER_BEG_ANNOTATION,
10
10
  JSCRAMBLER_SELF_DEFENDING,
11
11
  JSCRAMBLER_ANTI_TAMPERING,
12
+ JSCRAMBLER_HERMES_INCOMPATIBILITIES,
13
+ JSCRAMBLER_HERMES_ADD_SHOW_SOURCE_DIRECTIVE,
12
14
  JSCRAMBLER_ANTI_TAMPERING_MODE_SKL,
13
15
  JSCRAMBLER_ANTI_TAMPERING_MODE_RCK,
14
16
  JSCRAMBLER_TOLERATE_BENIGN_POISONING,
@@ -285,10 +287,9 @@ function injectTolerateBegninPoisoning(config) {
285
287
  /**
286
288
  * @param {object} config
287
289
  * @param {string} processedMetroBundle
288
- * @returns {{addShowSource: boolean, requireStartAtFirstColumn: boolean}}
290
+ * @returns {boolean} if true the code must start in the first column
289
291
  */
290
292
  function handleAntiTampering(config, processedMetroBundle) {
291
- let addShowSource = false;
292
293
  let requireStartAtFirstColumn = false
293
294
  if (Array.isArray(config.params)) {
294
295
  const antiTampering = config.params.find(
@@ -298,12 +299,11 @@ function handleAntiTampering(config, processedMetroBundle) {
298
299
  antiTampering.options = antiTampering.options || {};
299
300
  antiTampering.options.mode = antiTampering.options.mode || [JSCRAMBLER_ANTI_TAMPERING_MODE_RCK, JSCRAMBLER_ANTI_TAMPERING_MODE_SKL];
300
301
  if (config.enabledHermes) {
301
- addShowSource = true;
302
302
  if (
303
303
  Array.isArray(antiTampering.options.mode) &&
304
304
  antiTampering.options.mode.includes(JSCRAMBLER_ANTI_TAMPERING_MODE_SKL)
305
305
  ) {
306
- console.log(`info Jscrambler Anti-Tampering Mode SKL can not be use in hermes engine. RCK mode was SET.`);
306
+ console.log(`info Jscrambler Anti-Tampering Mode SKL can not be used in hermes engine. RCK mode was SET.`);
307
307
  antiTampering.options.mode = [JSCRAMBLER_ANTI_TAMPERING_MODE_RCK];
308
308
  }
309
309
  }
@@ -316,7 +316,57 @@ function handleAntiTampering(config, processedMetroBundle) {
316
316
  }
317
317
  }
318
318
  }
319
- return {addShowSource, requireStartAtFirstColumn};
319
+ return requireStartAtFirstColumn;
320
+ }
321
+
322
+ /**
323
+ * @param {object} config
324
+ * @returns {boolean} if true 'show source' directive is added
325
+ */
326
+ function addHermesShowSourceDirective(config) {
327
+ if (!config.enabledHermes) {
328
+ return false;
329
+ }
330
+
331
+ for (const slugName of JSCRAMBLER_HERMES_ADD_SHOW_SOURCE_DIRECTIVE) {
332
+ if (Array.isArray(config.params)) {
333
+ const showSource = config.params.find((param) => param.name === slugName);
334
+ if (showSource) {
335
+ return true;
336
+ }
337
+ }
338
+ }
339
+
340
+ return false;
341
+ }
342
+
343
+ /**
344
+ * @param config
345
+ * @exception {Error} If an incompatible transformation was selected
346
+ */
347
+ function handleHermesIncompatibilities(config) {
348
+ if (!config.enabledHermes) {
349
+ return;
350
+ }
351
+
352
+ if (config.codeHardeningThreshold === undefined) {
353
+ console.log(`info Jscrambler Code Hardening ignored, as it is incompatible with hermes engine.`);
354
+ }
355
+ config.codeHardeningThreshold = 999999999;
356
+
357
+ for (const {
358
+ slugName,
359
+ errorMessage,
360
+ } of JSCRAMBLER_HERMES_INCOMPATIBILITIES) {
361
+ if (Array.isArray(config.params)) {
362
+ const usingIncompatible = config.params.find(
363
+ (param) => param.name === slugName,
364
+ );
365
+ if (usingIncompatible) {
366
+ throw new Error(errorMessage);
367
+ }
368
+ }
369
+ }
320
370
  }
321
371
 
322
372
  module.exports = {
@@ -332,5 +382,7 @@ module.exports = {
332
382
  handleExcludeList,
333
383
  injectTolerateBegninPoisoning,
334
384
  handleAntiTampering,
385
+ addHermesShowSourceDirective,
386
+ handleHermesIncompatibilities,
335
387
  wrapCodeWithTags
336
388
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jscrambler-metro-plugin",
3
- "version": "6.5.0",
3
+ "version": "6.5.1",
4
4
  "description": "A plugin to use metro with Jscrambler",
5
5
  "main": "lib/index.js",
6
6
  "peerDependencies": {