jscrambler-metro-plugin 6.5.0 → 6.5.2
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/constants.js +14 -0
- package/lib/index.js +21 -2
- package/lib/utils.js +57 -5
- package/package.json +2 -2
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
|
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
|
-
:
|
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 {
|
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
|
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
|
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.
|
3
|
+
"version": "6.5.2",
|
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": "8.1.
|
12
|
+
"jscrambler": "8.1.1"
|
13
13
|
},
|
14
14
|
"keywords": [
|
15
15
|
"jscrambler",
|