Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions 10 dist/index.browser.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion 2 dist/index.cli.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion 2 dist/index.js

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
import { NodeGuards } from '../../node/NodeGuards';
import { NodeMetadata } from '../../node/NodeMetadata';
import { NodeUtils } from '../../node/NodeUtils';
import { StringLiteralObfuscatingReplacer } from './obfuscating-replacers/literal-obfuscating-replacers/StringLiteralObfuscatingReplacer';

@injectable()
export class LiteralTransformer extends AbstractNodeTransformer {
Expand Down Expand Up @@ -88,9 +89,15 @@ export class LiteralTransformer extends AbstractNodeTransformer {
break;

case 'string':
newLiteralNode = this.literalObfuscatingReplacerFactory(
const replacer: StringLiteralObfuscatingReplacer = <StringLiteralObfuscatingReplacer> this.literalObfuscatingReplacerFactory(
LiteralObfuscatingReplacer.StringLiteralObfuscatingReplacer
).replace(literalNode.value);
);

if (replacer.isReservedString(literalNode.value)) {
return literalNode;
}

newLiteralNode = replacer.replace(literalNode.value);

break;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,21 @@ export class StringLiteralObfuscatingReplacer extends AbstractObfuscatingReplace
return rc4KeyLiteralNode;
}

/**
* @param {string} value
* @returns {boolean}
*/
public isReservedString (value: string): boolean {
if (!this.options.reservedStrings.length) {
return false;
}

return this.options.reservedStrings
.some((reservedString: string) => {
return new RegExp(reservedString, 'g').exec(value) !== null;
});
}

/**
* @param {string} nodeValue
* @returns {Node}
Expand Down Expand Up @@ -277,19 +292,4 @@ export class StringLiteralObfuscatingReplacer extends AbstractObfuscatingReplace
callExpressionArgs
);
}

/**
* @param {string} value
* @returns {boolean}
*/
private isReservedString (value: string): boolean {
if (!this.options.reservedStrings.length) {
return false;
}

return this.options.reservedStrings
.some((reservedString: string) => {
return new RegExp(reservedString, 'g').exec(value) !== null;
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,30 @@ describe('LiteralTransformer', () => {
});
});

describe('Variant #1: single reserved string value', () => {
const stringLiteralRegExp: RegExp = /const foo *= *'foo baz';/;

let obfuscatedCode: string;

before(() => {
const code: string = readFileAsString(__dirname + '/fixtures/reserved-strings-option-3.js');

obfuscatedCode = JavaScriptObfuscator.obfuscate(
code,
{
...NO_ADDITIONAL_NODES_PRESET,
stringArray: true,
stringArrayThreshold: 1,
reservedStrings: ['foo baz']
}
).getObfuscatedCode();
});

it('match #2: should not touch reserved strings', () => {
assert.match(obfuscatedCode, stringLiteralRegExp);
});
});

describe('Variant #2: two reserved string values', () => {
const stringLiteralRegExp1: RegExp = /const foo *= *'foo';/;
const stringLiteralRegExp2: RegExp = /const bar *= *'bar';/;
Expand Down Expand Up @@ -454,7 +478,7 @@ describe('LiteralTransformer', () => {
});

describe('Variant #4: correct escape of special characters', () => {
const stringLiteralRegExp: RegExp = /var baz *= *'Cannot\\x20find\\x20module\\x20\\x27' *\+ *foo *\+ *'\\x27';/;
const stringLiteralRegExp: RegExp = /var baz *= *'Cannot *find *module *\\'' *\+ *foo *\+ *'\\x27';/;

let obfuscatedCode: string;

Expand All @@ -471,7 +495,7 @@ describe('LiteralTransformer', () => {
});

it('match #1: should ignore reserved strings', () => {
assert.match(obfuscatedCode, stringLiteralRegExp);
assert.match(obfuscatedCode, stringLiteralRegExp, obfuscatedCode);
});
});
});
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
const foo = 'foo baz';
Morty Proxy This is a proxified and sanitized view of the page, visit original site.