jscrambler-metro-plugin 6.4.6 → 6.4.8

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -23,6 +23,7 @@ const jscramblerMetroPlugin = require('jscrambler-metro-plugin')(
23
23
  /* optional */
24
24
  {
25
25
  enable: true,
26
+ enabledHermes: false, // set if you are using hermes engine
26
27
  ignoreFile: resolve(__dirname, '.jscramblerignore'),
27
28
  params: [
28
29
  {
package/lib/constants.js CHANGED
@@ -16,6 +16,9 @@ const JSCRAMBLER_BEG_ANNOTATION = '"JSCRAMBLER-BEG";';
16
16
  const JSCRAMBLER_END_ANNOTATION = '"JSCRAMBLER-END";';
17
17
  const JSCRAMBLER_EXTS = /.(j|t)s(x)?$/i;
18
18
  const JSCRAMBLER_SELF_DEFENDING = 'selfDefending';
19
+ const JSCRAMBLER_ANTI_TAMPERING = 'antiTampering';
20
+ const JSCRAMBLER_ANTI_TAMPERING_MODE_RCK = 'RCK';
21
+ const JSCRAMBLER_ANTI_TAMPERING_MODE_SKL = 'SKL';
19
22
  const JSCRAMBLER_GLOBAL_VARIABLE_INDIRECTION = 'globalVariableIndirection';
20
23
  const JSCRAMBLER_TOLERATE_BENIGN_POISONING = 'tolerateBenignPoisoning';
21
24
 
@@ -36,5 +39,8 @@ module.exports = {
36
39
  JSCRAMBLER_SELF_DEFENDING,
37
40
  JSCRAMBLER_GLOBAL_VARIABLE_INDIRECTION,
38
41
  JSCRAMBLER_TOLERATE_BENIGN_POISONING,
42
+ JSCRAMBLER_ANTI_TAMPERING,
43
+ JSCRAMBLER_ANTI_TAMPERING_MODE_RCK,
44
+ JSCRAMBLER_ANTI_TAMPERING_MODE_SKL,
39
45
  JSCRAMBLER_EXTS
40
46
  }
package/lib/index.js CHANGED
@@ -29,6 +29,7 @@ const {
29
29
  addBundleArgsToExcludeList,
30
30
  handleExcludeList,
31
31
  injectTolerateBegninPoisoning,
32
+ handleAntiTampering,
32
33
  wrapCodeWithTags
33
34
  } = require('./utils');
34
35
 
@@ -154,6 +155,8 @@ async function obfuscateBundle(
154
155
  process.exit(-1);
155
156
  }
156
157
 
158
+ const {addShowSource, requireStartAtFirstColumn} = handleAntiTampering(config, processedMetroBundle);
159
+
157
160
  const shouldGenerateSourceMaps = config.sourceMaps && bundleSourceMapPath;
158
161
 
159
162
  const jscramblerOp = !!config.instrument
@@ -183,7 +186,7 @@ async function obfuscateBundle(
183
186
  c.indexOf(JSCRAMBLER_END_ANNOTATION),
184
187
  c.length
185
188
  );
186
- return acc + JSCRAMBLER_BEG_ANNOTATION + obfuscatedCode + tillCodeEnd;
189
+ return `${acc}${JSCRAMBLER_BEG_ANNOTATION}${addShowSource ? '"show source";' : ''}${requireStartAtFirstColumn ? '\n' : ''}${obfuscatedCode}${tillCodeEnd}`;
187
190
  }, '');
188
191
 
189
192
  await writeFile(bundlePath, stripJscramblerTags(finalBundle));
@@ -244,7 +247,7 @@ function validateModule(modulePath, config, projectRoot) {
244
247
  /**
245
248
  * Add serialize.processModuleFilter option to metro and attach listener to beforeExit event.
246
249
  * *config.fileSrc* and *config.filesDest* will be ignored.
247
- * @param {object} _config
250
+ * @param {{enable: boolean, enabledHermes: boolean }} _config
248
251
  * @param {string} [projectRoot=process.cwd()]
249
252
  * @returns {{serializer: {processModuleFilter(*): boolean}}}
250
253
  */
package/lib/utils.js CHANGED
@@ -8,6 +8,9 @@ const {
8
8
  JSCRAMBLER_END_ANNOTATION,
9
9
  JSCRAMBLER_BEG_ANNOTATION,
10
10
  JSCRAMBLER_SELF_DEFENDING,
11
+ JSCRAMBLER_ANTI_TAMPERING,
12
+ JSCRAMBLER_ANTI_TAMPERING_MODE_SKL,
13
+ JSCRAMBLER_ANTI_TAMPERING_MODE_RCK,
11
14
  JSCRAMBLER_TOLERATE_BENIGN_POISONING,
12
15
  JSCRAMBLER_GLOBAL_VARIABLE_INDIRECTION,
13
16
  BUNDLE_OUTPUT_CLI_ARG,
@@ -279,6 +282,43 @@ function injectTolerateBegninPoisoning(config) {
279
282
  }
280
283
  }
281
284
 
285
+ /**
286
+ * @param {object} config
287
+ * @param {string} processedMetroBundle
288
+ * @returns {{addShowSource: boolean, requireStartAtFirstColumn: boolean}}
289
+ */
290
+ function handleAntiTampering(config, processedMetroBundle) {
291
+ let addShowSource = false;
292
+ let requireStartAtFirstColumn = false
293
+ if (Array.isArray(config.params)) {
294
+ const antiTampering = config.params.find(
295
+ (param) => param.name === JSCRAMBLER_ANTI_TAMPERING
296
+ );
297
+ if (antiTampering) {
298
+ antiTampering.options = antiTampering.options || {};
299
+ antiTampering.options.mode = antiTampering.options.mode || [JSCRAMBLER_ANTI_TAMPERING_MODE_RCK, JSCRAMBLER_ANTI_TAMPERING_MODE_SKL];
300
+ if (config.enabledHermes) {
301
+ addShowSource = true;
302
+ if (
303
+ Array.isArray(antiTampering.options.mode) &&
304
+ antiTampering.options.mode.includes(JSCRAMBLER_ANTI_TAMPERING_MODE_SKL)
305
+ ) {
306
+ console.log(`info Jscrambler Anti-Tampering Mode SKL can not be use in hermes engine. RCK mode was SET.`);
307
+ antiTampering.options.mode = [JSCRAMBLER_ANTI_TAMPERING_MODE_RCK];
308
+ }
309
+ }
310
+
311
+ if (antiTampering.options.mode.includes(JSCRAMBLER_ANTI_TAMPERING_MODE_SKL)) {
312
+ const singleLineModule = processedMetroBundle.match(RegExp(`\n\\S+${JSCRAMBLER_BEG_ANNOTATION}`, 'm'));
313
+ if (singleLineModule !== null) {
314
+ requireStartAtFirstColumn = true;
315
+ }
316
+ }
317
+ }
318
+ }
319
+ return {addShowSource, requireStartAtFirstColumn};
320
+ }
321
+
282
322
  module.exports = {
283
323
  buildModuleSourceMap,
284
324
  buildNormalizePath,
@@ -291,5 +331,6 @@ module.exports = {
291
331
  addBundleArgsToExcludeList,
292
332
  handleExcludeList,
293
333
  injectTolerateBegninPoisoning,
334
+ handleAntiTampering,
294
335
  wrapCodeWithTags
295
336
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jscrambler-metro-plugin",
3
- "version": "6.4.6",
3
+ "version": "6.4.8",
4
4
  "description": "A plugin to use metro with Jscrambler",
5
5
  "main": "lib/index.js",
6
6
  "peerDependencies": {
@@ -9,7 +9,7 @@
9
9
  "dependencies": {
10
10
  "commander": "^2.20.0",
11
11
  "fs-extra": "^8.0.1",
12
- "jscrambler": "^6.4.6"
12
+ "jscrambler": "^6.4.8"
13
13
  },
14
14
  "keywords": [
15
15
  "jscrambler",