From 178adcbfaa31024c8893065eb2c8076360e8613a Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 27 Jan 2020 00:58:04 +0300 Subject: [PATCH] Slightly changed regexps of variable kinds --- .../cli/JavaScriptObfuscatorCLI.spec.ts | 14 +-- .../JavaScriptObfuscator.spec.ts | 22 ++-- ...ockStatementControlFlowTransformer.spec.ts | 32 ++--- ...inaryExpressionControlFlowReplacer.spec.ts | 6 +- .../CallExpressionControlFlowReplacer.spec.ts | 8 +- ...gicalExpressionControlFlowReplacer.spec.ts | 10 +- .../StringLiteralControlFlowReplacer.spec.ts | 4 +- .../FunctionControlFlowTransformer.spec.ts | 20 +-- .../MemberExpressionTransformer.spec.ts | 12 +- .../MethodDefinitionTransformer.spec.ts | 4 +- .../ObjectExpressionKeysTransformer.spec.ts | 118 +++++++++--------- .../ObjectExpressionTransformer.spec.ts | 26 ++-- .../SplitStringTransformer.spec.ts | 18 +-- .../TemplateLiteralTransformer.spec.ts | 14 +-- .../DeadCodeInjectionTransformer.spec.ts | 30 ++--- .../LiteralTransformer.spec.ts | 38 +++--- .../BaseIdentifierObfuscatingReplacer.spec.ts | 4 +- .../ClassDeclaration.spec.ts | 2 +- .../FunctionDeclaration.spec.ts | 4 +- .../function/Function.spec.ts | 4 +- .../VariableDeclaration.spec.ts | 36 +++--- .../CommentsTransformer.spec.ts | 8 +- .../EvalCallExpressionTransformer.spec.ts | 6 +- .../BlackListObfuscatingGuard.spec.ts | 2 +- ...ConditionalCommentObfuscatingGuard.spec.ts | 28 ++--- .../StringArrayStorage.spec.ts | 68 +++++----- 26 files changed, 269 insertions(+), 269 deletions(-) diff --git a/test/functional-tests/cli/JavaScriptObfuscatorCLI.spec.ts b/test/functional-tests/cli/JavaScriptObfuscatorCLI.spec.ts index 81af8253..64331e0b 100644 --- a/test/functional-tests/cli/JavaScriptObfuscatorCLI.spec.ts +++ b/test/functional-tests/cli/JavaScriptObfuscatorCLI.spec.ts @@ -185,8 +185,8 @@ describe('JavaScriptObfuscatorCLI', function (): void { const outputFileName2: string = 'bar-obfuscated.js'; const outputFileName3: string = 'baz-obfuscated.js'; const readFileEncoding: string = 'utf8'; - const regExp1: RegExp = /^var *a1_0x(\w){4,6} *= *0x1;$/; - const regExp2: RegExp = /^var *a0_0x(\w){4,6} *= *0x2;$/; + const regExp1: RegExp = /^var a1_0x(\w){4,6} *= *0x1;$/; + const regExp2: RegExp = /^var a0_0x(\w){4,6} *= *0x2;$/; let outputFixturesFilePath1: string, outputFixturesFilePath2: string, @@ -250,8 +250,8 @@ describe('JavaScriptObfuscatorCLI', function (): void { const outputFileName1: string = 'foo-obfuscated.js'; const outputFileName2: string = 'bar-obfuscated.js'; const readFileEncoding: string = 'utf8'; - const regExp1: RegExp = /^var *foo1_0x(\w){4,6} *= *0x1;$/; - const regExp2: RegExp = /^var *foo0_0x(\w){4,6} *= *0x2;$/; + const regExp1: RegExp = /^var foo1_0x(\w){4,6} *= *0x1;$/; + const regExp2: RegExp = /^var foo0_0x(\w){4,6} *= *0x2;$/; let outputFixturesFilePath1: string, outputFixturesFilePath2: string, @@ -372,8 +372,8 @@ describe('JavaScriptObfuscatorCLI', function (): void { const outputFileName2: string = 'bar-obfuscated.js'; const outputFileName3: string = 'baz-obfuscated.js'; const readFileEncoding: string = 'utf8'; - const regExp1: RegExp = /^var *a1_0x(\w){4,6} *= *0x1;$/; - const regExp2: RegExp = /^var *a0_0x(\w){4,6} *= *0x2;$/; + const regExp1: RegExp = /^var a1_0x(\w){4,6} *= *0x1;$/; + const regExp2: RegExp = /^var a0_0x(\w){4,6} *= *0x2;$/; let outputFixturesFilePath1: string, outputFixturesFilePath2: string, @@ -439,7 +439,7 @@ describe('JavaScriptObfuscatorCLI', function (): void { const outputFileName2: string = 'bar-obfuscated.js'; const outputFileName3: string = 'baz-obfuscated.js'; const readFileEncoding: string = 'utf8'; - const regExp1: RegExp = /^var *a0_0x(\w){4,6} *= *0x2;$/; + const regExp1: RegExp = /^var a0_0x(\w){4,6} *= *0x2;$/; let outputFixturesFilePath1: string, outputFixturesFilePath2: string, diff --git a/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts b/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts index 35e0eec6..d5fe9f2b 100644 --- a/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts +++ b/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts @@ -188,7 +188,7 @@ describe('JavaScriptObfuscator', () => { describe('variable inside global scope', () => { describe('Variant #1: without `renameGlobals` option', () => { - const regExp: RegExp = /^var *test *= *0x\d+;$/; + const regExp: RegExp = /^var test *= *0x\d+;$/; let obfuscatedCode: string; @@ -209,7 +209,7 @@ describe('JavaScriptObfuscator', () => { }); describe('Variant #2: with `renameGlobals` option', () => { - const regExp: RegExp = /^var *_0x(\w){4,6} *= *0x\d+;$/; + const regExp: RegExp = /^var _0x(\w){4,6} *= *0x\d+;$/; let obfuscatedCode: string; @@ -231,7 +231,7 @@ describe('JavaScriptObfuscator', () => { }); describe('Variant #3: with `renameGlobals` and `identifiersPrefix` options', () => { - const regExp: RegExp = /^var *foo_0x(\w){4,6} *= *0x\d+;$/; + const regExp: RegExp = /^var foo_0x(\w){4,6} *= *0x\d+;$/; let obfuscatedCode: string; @@ -255,7 +255,7 @@ describe('JavaScriptObfuscator', () => { describe('Variant #4: with `stringArray`, `renameGlobals` and `identifiersPrefix` options', () => { const stringArrayRegExp: RegExp = /^var foo_0x(\w){4} *= *\['abc'\];/; - const stringArrayCallRegExp: RegExp = /var *foo_0x(\w){4,6} *= *foo_0x(\w){4}\('0x0'\);$/; + const stringArrayCallRegExp: RegExp = /var foo_0x(\w){4,6} *= *foo_0x(\w){4}\('0x0'\);$/; let obfuscatedCode: string; @@ -285,7 +285,7 @@ describe('JavaScriptObfuscator', () => { }); describe('variable inside block scope', () => { - const regExp: RegExp = /^\(function *\(\) *\{ *var *_0x[\w]+ *= *0x\d+; *\}(\(\)\)|\)\(\));?$/; + const regExp: RegExp = /^\(function *\(\) *\{ *var _0x[\w]+ *= *0x\d+; *\}(\(\)\)|\)\(\));?$/; let obfuscatedCode: string; @@ -347,7 +347,7 @@ describe('JavaScriptObfuscator', () => { describe('latin literal variable value', () => { const stringArrayLatinRegExp: RegExp = /^var _0x(\w){4} *= *\['abc'\];/; - const stringArrayCallRegExp: RegExp = /var *test *= *_0x(\w){4}\('0x0'\);$/; + const stringArrayCallRegExp: RegExp = /var test *= *_0x(\w){4}\('0x0'\);$/; let obfuscatedCode: string; @@ -375,7 +375,7 @@ describe('JavaScriptObfuscator', () => { describe('cyrillic literal variable value', () => { const stringArrayCyrillicRegExp: RegExp = /^var _0x(\w){4} *= *\['абц'\];/; - const stringArrayCallRegExp: RegExp = /var *test *= *_0x(\w){4}\('0x0'\);$/; + const stringArrayCallRegExp: RegExp = /var test *= *_0x(\w){4}\('0x0'\);$/; let obfuscatedCode: string; @@ -573,7 +573,7 @@ describe('JavaScriptObfuscator', () => { }); describe('mangled identifier names generator', () => { - const regExp: RegExp = /var *c *= *0x1/; + const regExp: RegExp = /var c *= *0x1/; let obfuscatedCode: string; @@ -594,7 +594,7 @@ describe('JavaScriptObfuscator', () => { }); describe('dictionary identifier names generator', () => { - const regExp: RegExp = /var *[abc] *= *0x1; *var *[ABC] *= *0x2; *var *[ABC] *= *0x3;/; + const regExp: RegExp = /var [abc] *= *0x1; *var [ABC] *= *0x2; *var [ABC] *= *0x3;/; let obfuscatedCode: string; @@ -619,7 +619,7 @@ describe('JavaScriptObfuscator', () => { describe('parse module', () => { describe('Variant #1: import', () => { const importRegExp: RegExp = /import *{foo} *from *'.\/foo';/; - const variableDeclarationRegExp: RegExp = /var *test *= *0x1/; + const variableDeclarationRegExp: RegExp = /var test *= *0x1/; let obfuscatedCode: string; @@ -639,7 +639,7 @@ describe('JavaScriptObfuscator', () => { }); describe('Variant #2: export', () => { - const regExp: RegExp = /export *const *foo *= *0x1;/; + const regExp: RegExp = /export *const foo *= *0x1;/; let obfuscatedCode: string; diff --git a/test/functional-tests/node-transformers/control-flow-transformers/block-statement-control-flow-transformer/BlockStatementControlFlowTransformer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/block-statement-control-flow-transformer/BlockStatementControlFlowTransformer.spec.ts index d9480a54..5eea8be8 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/block-statement-control-flow-transformer/BlockStatementControlFlowTransformer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/block-statement-control-flow-transformer/BlockStatementControlFlowTransformer.spec.ts @@ -84,9 +84,9 @@ describe('BlockStatementControlFlowTransformer', function () { }); describe('switch-case map', () => { - const switchCaseMapVariableRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\)/; - const switchCaseMapIndexVariableRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *0x0;/; - const switchCaseMapStringRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/; + const switchCaseMapVariableRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\)/; + const switchCaseMapIndexVariableRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *0x0;/; + const switchCaseMapStringRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/; const expectedSwitchCasesSequence: string[] = ['0', '1', '2', '3', '4']; let switchCaseMap: string[]; @@ -177,8 +177,8 @@ describe('BlockStatementControlFlowTransformer', function () { }); describe('switch-case map', () => { - const switchCaseMapVariableRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\)/; - const switchCaseMapStringRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/; + const switchCaseMapVariableRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\)/; + const switchCaseMapStringRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/; const expectedSwitchCasesSequence: string[] = ['0', '1', '2', '3', '4']; let switchCaseMap: string[]; @@ -223,7 +223,7 @@ describe('BlockStatementControlFlowTransformer', function () { }); describe('Variant #4: block statement contain variable declaration with `const` kind', () => { - const statementRegExp: RegExp = /^\(function *\( *\) *\{ *const *_0x([a-f0-9]){4,6} *= *0x1; *console\['log'\]\(0x1\);/; + const statementRegExp: RegExp = /^\(function *\( *\) *\{ *const _0x([a-f0-9]){4,6} *= *0x1; *console\['log'\]\(0x1\);/; let obfuscatedCode: string; @@ -246,7 +246,7 @@ describe('BlockStatementControlFlowTransformer', function () { }); describe('Variant #5: block statement contain variable declaration with `let` kind', () => { - const statementRegExp: RegExp = /^\(function *\( *\) *\{ *let *_0x([a-f0-9]){4,6} *= *0x1; *console\['log'\]\(0x1\);/; + const statementRegExp: RegExp = /^\(function *\( *\) *\{ *let _0x([a-f0-9]){4,6} *= *0x1; *console\['log'\]\(0x1\);/; let obfuscatedCode: string; @@ -674,9 +674,9 @@ describe('BlockStatementControlFlowTransformer', function () { }); describe('switch-case map', () => { - const switchCaseMapVariableRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\);/; - const switchCaseMapIndexVariableRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *0x0;/; - const switchCaseMapStringRegExp: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/; + const switchCaseMapVariableRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\);/; + const switchCaseMapIndexVariableRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *0x0;/; + const switchCaseMapStringRegExp: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/; const expectedSwitchCasesSequence: string[] = ['0', '1', '2', '3', '4']; let switchCaseMap: string[]; @@ -718,9 +718,9 @@ describe('BlockStatementControlFlowTransformer', function () { }); describe('switch-case map', () => { - const switchCaseMapVariableRegExp: RegExp = /const *_0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\);/; - const switchCaseMapIndexVariableRegExp: RegExp = /let *_0x(?:[a-f0-9]){4,6} *= *0x0;/; - const switchCaseMapStringRegExp: RegExp = /const *_0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/; + const switchCaseMapVariableRegExp: RegExp = /const _0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\);/; + const switchCaseMapIndexVariableRegExp: RegExp = /let _0x(?:[a-f0-9]){4,6} *= *0x0;/; + const switchCaseMapStringRegExp: RegExp = /const _0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/; const expectedSwitchCasesSequence: string[] = ['0', '1', '2', '3', '4']; let switchCaseMap: string[]; @@ -762,9 +762,9 @@ describe('BlockStatementControlFlowTransformer', function () { }); describe('switch-case map', () => { - const switchCaseMapVariableRegExp: RegExp = /const *_0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\)/; - const switchCaseMapIndexVariableRegExp: RegExp = /let *_0x(?:[a-f0-9]){4,6} *= *0x0;/; - const switchCaseMapStringRegExp: RegExp = /const *_0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/; + const switchCaseMapVariableRegExp: RegExp = /const _0x(?:[a-f0-9]){4,6} *= *_0x(?:[a-f0-9]){4,6}\['.*'\]\['split'\]\('\|'\)/; + const switchCaseMapIndexVariableRegExp: RegExp = /let _0x(?:[a-f0-9]){4,6} *= *0x0;/; + const switchCaseMapStringRegExp: RegExp = /const _0x(?:[a-f0-9]){4,6} *= *\{'.*' *: *'(.*)'\};/; const expectedSwitchCasesSequence: string[] = ['0', '1', '2', '3', '4']; let switchCaseMap: string[]; diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts index 0562061e..2712512e 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/binary-expression-control-flow-replacer/BinaryExpressionControlFlowReplacer.spec.ts @@ -11,7 +11,7 @@ describe('BinaryExpressionControlFlowReplacer', function () { describe('replace', () => { describe('Variant #1 - single binary expression', () => { - const controlFlowStorageCallRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(0x1, *0x2\);/; + const controlFlowStorageCallRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(0x1, *0x2\);/; let obfuscatedCode: string; @@ -40,8 +40,8 @@ describe('BinaryExpressionControlFlowReplacer', function () { const samplesCount: number = 1000; const delta: number = 0.1; - const controlFlowStorageCallRegExp1: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(0x1, *0x2\);/; - const controlFlowStorageCallRegExp2: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(0x2, *0x3\);/; + const controlFlowStorageCallRegExp1: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(0x1, *0x2\);/; + const controlFlowStorageCallRegExp2: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(0x2, *0x3\);/; let matchErrorsCount: number = 0, usingExistingIdentifierChance: number; diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts index b3454d94..afdd8c7c 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/call-expression-control-flow-replacer/CallExpressionControlFlowReplacer.spec.ts @@ -11,7 +11,7 @@ describe('CallExpressionControlFlowReplacer', function () { describe('replace', () => { describe('Variant #1 - single call expression', () => { - const controlFlowStorageCallRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(_0x([a-f0-9]){4,6}, *0x1, *0x2\);/; + const controlFlowStorageCallRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(_0x([a-f0-9]){4,6}, *0x1, *0x2\);/; let obfuscatedCode: string; @@ -40,8 +40,8 @@ describe('CallExpressionControlFlowReplacer', function () { const samplesCount: number = 1000; const delta: number = 0.1; - const controlFlowStorageCallRegExp1: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(_0x([a-f0-9]){4,6}, *0x1, *0x2\);/; - const controlFlowStorageCallRegExp2: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(_0x([a-f0-9]){4,6}, *0x2, *0x3\);/; + const controlFlowStorageCallRegExp1: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(_0x([a-f0-9]){4,6}, *0x1, *0x2\);/; + const controlFlowStorageCallRegExp2: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(_0x([a-f0-9]){4,6}, *0x2, *0x3\);/; let matchErrorsCount: number = 0, usingExistingIdentifierChance: number; @@ -96,7 +96,7 @@ describe('CallExpressionControlFlowReplacer', function () { }); describe('Variant #3 - call expression callee is member expression node', () => { - const regExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['sum'\]\(0x1, *0x2\);/; + const regExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['sum'\]\(0x1, *0x2\);/; let obfuscatedCode: string; diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts index 13ec759e..0e06e265 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/logical-expression-control-flow-replacer/LogicalExpressionControlFlowReplacer.spec.ts @@ -11,7 +11,7 @@ describe('LogicalExpressionControlFlowReplacer', function () { describe('replace', () => { describe('Variant #1 - single logical expression', () => { - const controlFlowStorageCallRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(!!\[\], *!\[\]\);/; + const controlFlowStorageCallRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(!!\[\], *!\[\]\);/; let obfuscatedCode: string; @@ -40,8 +40,8 @@ describe('LogicalExpressionControlFlowReplacer', function () { const samplesCount: number = 1000; const delta: number = 0.1; - const controlFlowStorageCallRegExp1: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(!!\[\], *!\[\]\);/; - const controlFlowStorageCallRegExp2: RegExp = /var *_0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(!\[\], *!!\[\]\);/; + const controlFlowStorageCallRegExp1: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(!!\[\], *!\[\]\);/; + const controlFlowStorageCallRegExp2: RegExp = /var _0x(?:[a-f0-9]){4,6} *= *(_0x([a-f0-9]){4,6}\['\w{5}'\])\(!\[\], *!!\[\]\);/; let matchErrorsCount: number = 0, usingExistingIdentifierChance: number; @@ -96,7 +96,7 @@ describe('LogicalExpressionControlFlowReplacer', function () { }); describe('Variant #3 - single logical expression with unary expression', () => { - const controlFlowStorageCallRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(!_0x([a-f0-9]){4,6}, *!_0x([a-f0-9]){4,6}\);/; + const controlFlowStorageCallRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\]\(!_0x([a-f0-9]){4,6}, *!_0x([a-f0-9]){4,6}\);/; let obfuscatedCode: string; @@ -119,7 +119,7 @@ describe('LogicalExpressionControlFlowReplacer', function () { }); describe('prohibited nodes Variant #1', () => { - const regExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\[_0x([a-f0-9]){4,6}\] *&& *!\[\];/; + const regExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\[_0x([a-f0-9]){4,6}\] *&& *!\[\];/; let obfuscatedCode: string; diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts index c1512b86..8833d997 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts @@ -8,8 +8,8 @@ import { JavaScriptObfuscator } from '../../../../../../src/JavaScriptObfuscator describe('StringLiteralControlFlowReplacer', () => { describe('replace', () => { - const controlFlowStorageStringLiteralRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *\{'\w{5}' *: *'test'\};/; - const controlFlowStorageCallRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\];/; + const controlFlowStorageStringLiteralRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *\{'\w{5}' *: *'test'\};/; + const controlFlowStorageCallRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['\w{5}'\];/; let obfuscatedCode: string; diff --git a/test/functional-tests/node-transformers/control-flow-transformers/function-control-flow-transformer/FunctionControlFlowTransformer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/function-control-flow-transformer/FunctionControlFlowTransformer.spec.ts index c6463173..8f57b9d3 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/function-control-flow-transformer/FunctionControlFlowTransformer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/function-control-flow-transformer/FunctionControlFlowTransformer.spec.ts @@ -11,14 +11,14 @@ describe('FunctionControlFlowTransformer', function () { const variableMatch: string = '_0x([a-f0-9]){4,6}'; const rootControlFlowStorageNodeMatch: string = `` + - `var *${variableMatch} *= *\\{` + + `var ${variableMatch} *= *\\{` + `'\\w{5}' *: *function *\\(${variableMatch}, *${variableMatch}\\) *\\{` + `return *${variableMatch} *\\+ *${variableMatch};` + `\\}` + `\\};` + ``; const innerControlFlowStorageNodeMatch: string = `` + - `var *${variableMatch} *= *\\{` + + `var ${variableMatch} *= *\\{` + `'\\w{5}' *: *function *\\(${variableMatch}, *${variableMatch}\\) *\\{` + `return *${variableMatch}\\['\\w{5}'\\]\\(${variableMatch}, *${variableMatch}\\);` + `\\}` + @@ -101,7 +101,7 @@ describe('FunctionControlFlowTransformer', function () { describe('Variant #3 - single `control flow storage` node with multiple items', () => { const regexp: RegExp = new RegExp( - `var *${variableMatch} *= *\\{` + + `var ${variableMatch} *= *\\{` + `'\\w{5}' *: *function *\\(${variableMatch}, *${variableMatch}\\) *\\{` + `return *${variableMatch} *\\+ *${variableMatch};` + `\\}, *` + @@ -132,7 +132,7 @@ describe('FunctionControlFlowTransformer', function () { }); describe('Variant #4 - transformed node in the root block scope', () => { - const regExp: RegExp = /^var *test *= *0x1 *\+ *0x2;$/; + const regExp: RegExp = /^var test *= *0x1 *\+ *0x2;$/; let obfuscatedCode: string; @@ -159,7 +159,7 @@ describe('FunctionControlFlowTransformer', function () { const samplesCount: number = 20; const regExp: RegExp = new RegExp( - `var *[a-zA-Z]{6} *= *\\{` + + `var [a-zA-Z]{6} *= *\\{` + `'\\w{5}' *: *function *\\(${variableMatch}, *${variableMatch}\\) *\\{` + `return *${variableMatch} *\\+ *${variableMatch};` + `\\}` + @@ -194,7 +194,7 @@ describe('FunctionControlFlowTransformer', function () { }); describe('Variant #6 - threshold is `0`', () => { - const regexp: RegExp = /var *_0x([a-f0-9]){4,6} *= *0x1 *\+ *0x2;/; + const regexp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x1 *\+ *0x2;/; const controlFlowStorageRegExp: RegExp = new RegExp(rootControlFlowStorageNodeMatch); let obfuscatedCode: string; @@ -246,7 +246,7 @@ describe('FunctionControlFlowTransformer', function () { }); describe('Variant #2 - arrow function expression without body', () => { - const regexp: RegExp = new RegExp(`var *${variableMatch} *= *\\(\\) *=> *0x1 *\\+ *0x2;`); + const regexp: RegExp = new RegExp(`var ${variableMatch} *= *\\(\\) *=> *0x1 *\\+ *0x2;`); let obfuscatedCode: string; @@ -271,7 +271,7 @@ describe('FunctionControlFlowTransformer', function () { describe('prevailing kind of variables', () => { describe('Variant #1 - `var` kind', () => { - const regexp: RegExp = new RegExp(`var *${variableMatch} *= *\\{`); + const regexp: RegExp = new RegExp(`var ${variableMatch} *= *\\{`); let obfuscatedCode: string; @@ -294,7 +294,7 @@ describe('FunctionControlFlowTransformer', function () { }); describe('Variant #2 - `const` kind', () => { - const regexp: RegExp = new RegExp(`const *${variableMatch} *= *\\{`); + const regexp: RegExp = new RegExp(`const ${variableMatch} *= *\\{`); let obfuscatedCode: string; @@ -317,7 +317,7 @@ describe('FunctionControlFlowTransformer', function () { }); describe('Variant #3 - `let` kind', () => { - const regexp: RegExp = new RegExp(`const *${variableMatch} *= *\\{`); + const regexp: RegExp = new RegExp(`const ${variableMatch} *= *\\{`); let obfuscatedCode: string; diff --git a/test/functional-tests/node-transformers/converting-transformers/member-expression-transformer/MemberExpressionTransformer.spec.ts b/test/functional-tests/node-transformers/converting-transformers/member-expression-transformer/MemberExpressionTransformer.spec.ts index 80842ff3..170b02db 100644 --- a/test/functional-tests/node-transformers/converting-transformers/member-expression-transformer/MemberExpressionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/converting-transformers/member-expression-transformer/MemberExpressionTransformer.spec.ts @@ -9,7 +9,7 @@ import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFac describe('MemberExpressionTransformer', () => { describe('transformation of member expression node with dot notation', () => { describe('`stringArray` option is disabled', () => { - const regExp: RegExp = /var *test *= *console\['log'\];/; + const regExp: RegExp = /var test *= *console\['log'\];/; let obfuscatedCode: string; @@ -30,8 +30,8 @@ describe('MemberExpressionTransformer', () => { }); describe('`stringArray` option is enabled', () => { - const stringArrayRegExp: RegExp = /var *_0x([a-f0-9]){4} *= *\['log'\];/; - const stringArrayCallRegExp: RegExp = /var *test *= *console\[_0x([a-f0-9]){4}\('0x0'\)\];/; + const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['log'\];/; + const stringArrayCallRegExp: RegExp = /var test *= *console\[_0x([a-f0-9]){4}\('0x0'\)\];/; let obfuscatedCode: string; @@ -60,8 +60,8 @@ describe('MemberExpressionTransformer', () => { describe('transformation of member expression node with square brackets', () => { describe('Variant #1: square brackets literal ', () => { - const stringArrayRegExp: RegExp = /var *_0x([a-f0-9]){4} *= *\['log'\];/; - const stringArrayCallRegExp: RegExp = /var *test *= *console\[_0x([a-f0-9]){4}\('0x0'\)\];/; + const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['log'\];/; + const stringArrayCallRegExp: RegExp = /var test *= *console\[_0x([a-f0-9]){4}\('0x0'\)\];/; let obfuscatedCode: string; @@ -88,7 +88,7 @@ describe('MemberExpressionTransformer', () => { }); describe('Variant #2: square brackets identifier', () => { - const regExp: RegExp = /var *test *= *console\[identifier\];/; + const regExp: RegExp = /var test *= *console\[identifier\];/; let obfuscatedCode: string; diff --git a/test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/MethodDefinitionTransformer.spec.ts b/test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/MethodDefinitionTransformer.spec.ts index 3185cc8e..fbd66181 100644 --- a/test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/MethodDefinitionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/converting-transformers/method-definition-transformer/MethodDefinitionTransformer.spec.ts @@ -30,7 +30,7 @@ describe('MethodDefinitionTransformer', () => { }); describe('Variant #2: `stringArray` option is enabled', () => { - const stringArrayRegExp: RegExp = /var *_0x([a-f0-9]){4} *= *\['bar'\];/; + const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['bar'\];/; const stringArrayCallRegExp: RegExp = /\[_0x([a-f0-9]){4}\('0x0'\)\]\(\)\{\}/; let obfuscatedCode: string; @@ -102,7 +102,7 @@ describe('MethodDefinitionTransformer', () => { }); describe('Variant #2: `stringArray` option is enabled', () => { - const stringArrayRegExp: RegExp = /var *_0x([a-f0-9]){4} *= *\['constructor', *'bar'];/; + const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['constructor', *'bar'];/; const stringArrayCallRegExp: RegExp = /\[_0x([a-f0-9]){4}\('0x1'\)\]\(\)\{\}/; let obfuscatedCode: string; diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts index 00b4a1da..bb502e44 100644 --- a/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts @@ -12,7 +12,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('transformation of object keys', () => { describe('Variant #1: simple', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `${variableMatch}\\['baz'] *= *'bark';` + ``; @@ -68,7 +68,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #3: return statement', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `${variableMatch}\\['baz'] *= *'bark';` + `return *${variableMatch};` + @@ -96,10 +96,10 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #4: object expression inside array expression', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `${variableMatch}\\['baz'] *= *'bark';` + - `var *${variableMatch} *= *\\[${variableMatch}];` + + `var ${variableMatch} *= *\\[${variableMatch}];` + ``; const regExp: RegExp = new RegExp(match); @@ -124,7 +124,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #5: object expression inside call expression', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `${variableMatch}\\['baz'] *= *'bark';` + `console\\['log']\\(${variableMatch}\\);` + @@ -152,11 +152,11 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #6: nested objects #1', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['baz'] *= *'bark';` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['inner1'] *= *${variableMatch};` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `${variableMatch}\\['inner'] *= *${variableMatch};` + `var object *= *${variableMatch};` + @@ -184,17 +184,17 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #7: nested objects #2', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['hawk'] *= *'geek';` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['baz'] *= *'bark';` + `${variableMatch}\\['inner1'] *= *${variableMatch};` + `${variableMatch}\\['cow'] *= *'bear';` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `${variableMatch}\\['inner'] *= *${variableMatch};` + `${variableMatch}\\['ball'] *= *'door';` + - `var *object *= *${variableMatch};` + + `var object *= *${variableMatch};` + ``; const regExp: RegExp = new RegExp(match); @@ -219,13 +219,13 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #8: nested objects #3', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['hawk'] *= *'geek';` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['baz'] *= *'bark';` + `${variableMatch}\\['inner1'] *= *${variableMatch};` + `${variableMatch}\\['cow'] *= *'bear';` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `${variableMatch}\\['inner'] *= *${variableMatch};` + `${variableMatch}\\['ball'] *= *'door';` + @@ -254,12 +254,12 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #9: correct integration with control flow flattening object #1', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['\\w{5}'] *= *function *\\(${variableMatch}, *${variableMatch}\\) *{` + `return *${variableMatch} *\\+ *${variableMatch};` + `};` + - `var *${variableMatch} *= *${variableMatch};` + - `var *${variableMatch} *= *${variableMatch}\\['\\w{5}']\\(0x1, *0x2\\);` + + `var ${variableMatch} *= *${variableMatch};` + + `var ${variableMatch} *= *${variableMatch}\\['\\w{5}']\\(0x1, *0x2\\);` + ``; const regExp: RegExp = new RegExp(match); @@ -286,16 +286,16 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #10: correct integration with control flow flattening object #2', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['\\w{5}'] *= *function *\\(${variableMatch}, *${variableMatch}\\) *{` + `return *${variableMatch} *\\+ *${variableMatch};` + `};` + - `var *${variableMatch} *= *${variableMatch};` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *${variableMatch};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *0x1;` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['bar'] *= *0x2;` + - `var *${variableMatch} *= *${variableMatch}\\['\\w{5}']\\(${variableMatch}\\['foo'], *${variableMatch}\\['bar']\\);` + + `var ${variableMatch} *= *${variableMatch}\\['\\w{5}']\\(${variableMatch}\\['foo'], *${variableMatch}\\['bar']\\);` + ``; const regExp: RegExp = new RegExp(match); @@ -323,9 +323,9 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #11: variable declarator object call inside other variable declarator', () => { describe('Variant #1', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'foo';` + - `var *${variableMatch} *= *${variableMatch}, *` + + `var ${variableMatch} *= *${variableMatch}, *` + `${variableMatch} *= *${variableMatch}\\['foo'];` + ``; const regExp: RegExp = new RegExp(match); @@ -351,9 +351,9 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #2', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'foo';` + - `var *${variableMatch} *= *${variableMatch}, *` + + `var ${variableMatch} *= *${variableMatch}, *` + `${variableMatch} *= *\\[${variableMatch}\\['foo']];` + ``; const regExp: RegExp = new RegExp(match); @@ -379,7 +379,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #3', () => { const match: string = `` + - `var *${variableMatch} *= *0x1, *${variableMatch} *= *{'foo' *: *${variableMatch}};` + + `var ${variableMatch} *= *0x1, *${variableMatch} *= *{'foo' *: *${variableMatch}};` + ``; const regExp: RegExp = new RegExp(match); @@ -433,7 +433,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #13: should keep numeric object keys', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['0'] *= *'foo';` + `${variableMatch}\\['bar'] *= *'bar';` + `${variableMatch}\\['2'] *= *'baz';` + @@ -461,10 +461,10 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #14: template literal', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `${variableMatch}\\['baz'] *= *'bark';` + - `var *foo *= *'' *\\+ *_0x[a-f0-9]{4,6};` + + `var foo *= *'' *\\+ *_0x[a-f0-9]{4,6};` + ``; const regExp: RegExp = new RegExp(match); @@ -490,7 +490,7 @@ describe('ObjectExpressionKeysTransformer', () => { // issue https://github.com/javascript-obfuscator/javascript-obfuscator/issues/516 describe('Variant #15: function default values', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['value'] *= *0x1;` + `function test *\\(${variableMatch} *= *0x1, *${variableMatch} *= *${variableMatch}\\) *{ *}` + ``; @@ -520,8 +520,8 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Without reference on other property', () => { describe('Variant #1: Single variable declarator and object expression parent node is expression node', () => { const match: string = `` + - `var *passthrough *= *${variableMatch} *=> *${variableMatch};` + - `var *${variableMatch} *= *{};` + + `var passthrough *= *${variableMatch} *=> *${variableMatch};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *0x1;` + `var foo *= *passthrough *\\(${variableMatch}\\);` + ``; @@ -579,8 +579,8 @@ describe('ObjectExpressionKeysTransformer', () => { describe('With reference on other property', () => { describe('Variant #1: Object expression parent node is variable declarator node', () => { const match: string = `` + - `var *passthrough *= *${variableMatch} *=> *${variableMatch};` + - `var *${variableMatch} *= *{};` + + `var passthrough *= *${variableMatch} *=> *${variableMatch};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *0x1;` + `var foo *= *${variableMatch}, *bar *= *{'bar': *foo\\['foo']};` + ``; @@ -607,8 +607,8 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #2: Object expression parent node is any expression node', () => { const match: string = `` + - `var *passthrough *= *${variableMatch} *=> *${variableMatch};` + - `var *${variableMatch} *= *{};` + + `var passthrough *= *${variableMatch} *=> *${variableMatch};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *0x1;` + `var foo *= *${variableMatch}, *bar *= *passthrough *\\({ *'bar' *: *foo\\['foo'] *}\\);` + ``; @@ -855,7 +855,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #2: for statement', () => { describe('Variant #1: with block statement', () => { const match: string = `` + - `for *\\(var *${variableMatch} *= *0x0; *${variableMatch} *< *0xa; *${variableMatch}\\+\\+\\) *{` + + `for *\\(var ${variableMatch} *= *0x0; *${variableMatch} *< *0xa; *${variableMatch}\\+\\+\\) *{` + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `var ${variableMatch} *= *${variableMatch};` + @@ -887,7 +887,7 @@ describe('ObjectExpressionKeysTransformer', () => { `var ${variableMatch};` + `var ${variableMatch} *= *{};` + `${variableMatch}\\['bar'] *= *'bar';` + - `for *\\(var *${variableMatch} *= *0x0; *${variableMatch} *< *0xa; *${variableMatch}\\+\\+\\) *` + + `for *\\(var ${variableMatch} *= *0x0; *${variableMatch} *< *0xa; *${variableMatch}\\+\\+\\) *` + `${variableMatch} *= *${variableMatch};` + ``; const regExp: RegExp = new RegExp(match); @@ -916,7 +916,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #1: with block statement', () => { const match: string = `` + `var ${variableMatch} *= *{};` + - `for *\\(var *${variableMatch} in *${variableMatch}\\) *{` + + `for *\\(var ${variableMatch} in *${variableMatch}\\) *{` + `var ${variableMatch} *= *{};` + `${variableMatch}\\['bar'] *= *'bar';` + `${variableMatch} *= *${variableMatch};` + @@ -948,7 +948,7 @@ describe('ObjectExpressionKeysTransformer', () => { `var ${variableMatch} *= *{};` + `var ${variableMatch} *= *{};` + `${variableMatch}\\['bar'] *= *'bar';` + - `for *\\(var *${variableMatch} in *${variableMatch}\\) *` + + `for *\\(var ${variableMatch} in *${variableMatch}\\) *` + `${variableMatch} *= *${variableMatch};` + ``; const regExp: RegExp = new RegExp(match); @@ -977,7 +977,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #1: with block statement', () => { const match: string = `` + `var ${variableMatch} *= *\\[];` + - `for *\\(var *${variableMatch} of *${variableMatch}\\) *{` + + `for *\\(var ${variableMatch} of *${variableMatch}\\) *{` + `var ${variableMatch} *= *{};` + `${variableMatch}\\['bar'] *= *'bar';` + `${variableMatch} *= *${variableMatch};` + @@ -1009,7 +1009,7 @@ describe('ObjectExpressionKeysTransformer', () => { `var ${variableMatch} *= *\\[];` + `var ${variableMatch} *= *{};` + `${variableMatch}\\['bar'] *= *'bar';` + - `for *\\(var *${variableMatch} of *${variableMatch}\\) *` + + `for *\\(var ${variableMatch} of *${variableMatch}\\) *` + `${variableMatch} *= *${variableMatch};` + ``; const regExp: RegExp = new RegExp(match); @@ -1038,7 +1038,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #1: with block statement', () => { const match: string = `` + `while *\\(!!\\[]\\) *{` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `var ${variableMatch} *= *${variableMatch};` + `}` + @@ -1125,7 +1125,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #6: try statement', () => { const match: string = `` + `try *{` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `var ${variableMatch} *= *${variableMatch};` + `} *catch *\\(${variableMatch}\\) *{` + @@ -1156,7 +1156,7 @@ describe('ObjectExpressionKeysTransformer', () => { const match: string = `` + `try *{` + `} *catch *\\(${variableMatch}\\) *{` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `var ${variableMatch} *= *${variableMatch};` + `}` + @@ -1186,7 +1186,7 @@ describe('ObjectExpressionKeysTransformer', () => { const match: string = `` + `switch *\\(!!\\[]\\) *{` + `case *!!\\[]:` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `var ${variableMatch} *= *${variableMatch};` + `}` + @@ -1215,10 +1215,10 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #9: variable declarator with object call', () => { describe('Variant #1', () => { const match: string = `` + - `const *${variableMatch} *= *{}; *` + + `const ${variableMatch} *= *{}; *` + `${variableMatch}\\['foo'] *= *'foo'; *` + `const ${variableMatch} *= *${variableMatch};` + - `const *${variableMatch} *= *${variableMatch}\\['foo'];` + + `const ${variableMatch} *= *${variableMatch}\\['foo'];` + ``; const regExp: RegExp = new RegExp(match); @@ -1272,11 +1272,11 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #3: two objects', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'foo';` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['bar'] *= *'bar';` + - `var *${variableMatch} *= *${variableMatch}, *` + + `var ${variableMatch} *= *${variableMatch}, *` + `${variableMatch} *= *${variableMatch}, *` + `${variableMatch} *= *${variableMatch}\\['bar']; *` + `console\\['log']\\(${variableMatch}\\);` + @@ -1307,7 +1307,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('prevailing kind of variables', () => { describe('Variant #1: `var` kind`', () => { const match: string = `` + - `var *${variableMatch} *= *{};` + + `var ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `${variableMatch}\\['baz'] *= *'bark';` + ``; @@ -1334,7 +1334,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #2: `const` kind`', () => { const match: string = `` + - `const *${variableMatch} *= *{};` + + `const ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `${variableMatch}\\['baz'] *= *'bark';` + ``; @@ -1361,7 +1361,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #3: `let` kind`', () => { const match: string = `` + - `const *${variableMatch} *= *{};` + + `const ${variableMatch} *= *{};` + `${variableMatch}\\['foo'] *= *'bar';` + `${variableMatch}\\['baz'] *= *'bark';` + ``; @@ -1390,7 +1390,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Ignore transformation', () => { describe('Variant #1: disabled option', () => { const match: string = `` + - `var *${variableMatch} *= *{` + + `var ${variableMatch} *= *{` + `'foo': *'bar',` + `'baz': *'bark'` + `}` + @@ -1416,7 +1416,7 @@ describe('ObjectExpressionKeysTransformer', () => { }); describe('Variant #2: empty object expression', () => { - const match: string = `var *${variableMatch} *= *{};`; + const match: string = `var ${variableMatch} *= *{};`; const regExp: RegExp = new RegExp(match); let obfuscatedCode: string; @@ -1701,7 +1701,7 @@ describe('ObjectExpressionKeysTransformer', () => { describe('Variant #8: variable declarator identifier reference', () => { const match: string = `` + - `var *passthrough *= *${variableMatch} *=> *${variableMatch};` + + `var passthrough *= *${variableMatch} *=> *${variableMatch};` + `var foo *= *0x1, *bar *= *{'baz' *: *passthrough\\(foo\\)};` + ``; const regExp: RegExp = new RegExp(match); diff --git a/test/functional-tests/node-transformers/converting-transformers/object-expression-transformer/ObjectExpressionTransformer.spec.ts b/test/functional-tests/node-transformers/converting-transformers/object-expression-transformer/ObjectExpressionTransformer.spec.ts index 2ddb7736..02e2b2a4 100644 --- a/test/functional-tests/node-transformers/converting-transformers/object-expression-transformer/ObjectExpressionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/converting-transformers/object-expression-transformer/ObjectExpressionTransformer.spec.ts @@ -9,7 +9,7 @@ import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFac describe('ObjectExpressionTransformer', () => { describe('default behaviour', () => { describe('Variant #1: `unicodeEscapeSequence` option is disabled\'', () => { - const regExp: RegExp = /var *test *= *\{'foo':0x0\};/; + const regExp: RegExp = /var test *= *\{'foo':0x0\};/; let obfuscatedCode: string; @@ -31,7 +31,7 @@ describe('ObjectExpressionTransformer', () => { }); describe('Variant #2: `unicodeEscapeSequence` option is enabled', () => { - const regExp: RegExp = /var *test *= *\{'\\x66\\x6f\\x6f':0x0\};/; + const regExp: RegExp = /var test *= *\{'\\x66\\x6f\\x6f':0x0\};/; let obfuscatedCode: string; @@ -54,7 +54,7 @@ describe('ObjectExpressionTransformer', () => { }); describe('shorthand ES6 object expression', () => { - const regExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{'a': *_0x[a-f0-9]{4,6}\, *'b': *_0x[a-f0-9]{4,6}\};/; + const regExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{'a': *_0x[a-f0-9]{4,6}\, *'b': *_0x[a-f0-9]{4,6}\};/; let obfuscatedCode: string; @@ -76,7 +76,7 @@ describe('ObjectExpressionTransformer', () => { describe('computed property name', () => { describe('Variant #1: computed property name with identifier', () => { - const regExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{\[_0x[a-f0-9]{4,6}\]: *0x1\};/; + const regExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{\[_0x[a-f0-9]{4,6}\]: *0x1\};/; let obfuscatedCode: string; @@ -98,7 +98,7 @@ describe('ObjectExpressionTransformer', () => { describe('Variant #2: computed property name with literal', () => { describe('Variant #1: `unicodeEscapeSequence` option is disabled', () => { - const regExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{\['foo'\]: *0x1\};/; + const regExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{\['foo'\]: *0x1\};/; let obfuscatedCode: string; @@ -120,7 +120,7 @@ describe('ObjectExpressionTransformer', () => { }); describe('Variant #2: `unicodeEscapeSequence` option is enabled', () => { - const regExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{\['\\x66\\x6f\\x6f'\]: *0x1\};/; + const regExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{\['\\x66\\x6f\\x6f'\]: *0x1\};/; let obfuscatedCode: string; @@ -144,8 +144,8 @@ describe('ObjectExpressionTransformer', () => { }); describe('object rest', () => { - const objectRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{'foo': *0x1, *'bar': *0x2, *'baz': *0x3\};/; - const objectRestRegExp: RegExp = /var *\{foo, *\.\.\.*_0x[a-f0-9]{4,6}\} *= *_0x[a-f0-9]{4,6};/; + const objectRegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{'foo': *0x1, *'bar': *0x2, *'baz': *0x3\};/; + const objectRestRegExp: RegExp = /var \{foo, *\.\.\.*_0x[a-f0-9]{4,6}\} *= *_0x[a-f0-9]{4,6};/; let obfuscatedCode: string; @@ -170,9 +170,9 @@ describe('ObjectExpressionTransformer', () => { }); describe('object spread', () => { - const object1RegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{'foo': *0x1\};/; - const object2RegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{'bar': *0x2\};/; - const objectSpreadRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{\.\.\._0x[a-f0-9]{4,6}, *\.\.\._0x[a-f0-9]{4,6}\};/; + const object1RegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{'foo': *0x1\};/; + const object2RegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{'bar': *0x2\};/; + const objectSpreadRegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{\.\.\._0x[a-f0-9]{4,6}, *\.\.\._0x[a-f0-9]{4,6}\};/; let obfuscatedCode: string; @@ -201,9 +201,9 @@ describe('ObjectExpressionTransformer', () => { }); describe('object spread: unicode escape sequence', () => { - const object1RegExp: RegExp = /const *_0x[a-f0-9]{4,6} *= *\{\};/; + const object1RegExp: RegExp = /const _0x[a-f0-9]{4,6} *= *\{\};/; const object2RegExp: RegExp = /_0x[a-f0-9]{4,6}\['\\x61'\] *= *0x1;/; - const object3RegExp: RegExp = /const *\{a\} *= *_0x[a-f0-9]{4,6};/; + const object3RegExp: RegExp = /const \{a\} *= *_0x[a-f0-9]{4,6};/; let obfuscatedCode: string; diff --git a/test/functional-tests/node-transformers/converting-transformers/split-string-transformer/SplitStringTransformer.spec.ts b/test/functional-tests/node-transformers/converting-transformers/split-string-transformer/SplitStringTransformer.spec.ts index 4216dc82..c1def8b4 100644 --- a/test/functional-tests/node-transformers/converting-transformers/split-string-transformer/SplitStringTransformer.spec.ts +++ b/test/functional-tests/node-transformers/converting-transformers/split-string-transformer/SplitStringTransformer.spec.ts @@ -22,7 +22,7 @@ describe('SplitStringTransformer', () => { } ).getObfuscatedCode(); - assert.match(obfuscatedCode, /^var *test *= *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g';$/); + assert.match(obfuscatedCode, /^var test *= *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g';$/); }); }); @@ -39,7 +39,7 @@ describe('SplitStringTransformer', () => { } ).getObfuscatedCode(); - assert.match(obfuscatedCode, /^var *test *= *'abcdefg';$/); + assert.match(obfuscatedCode, /^var test *= *'abcdefg';$/); }); }); @@ -56,7 +56,7 @@ describe('SplitStringTransformer', () => { } ).getObfuscatedCode(); - assert.match(obfuscatedCode, /^var *test *= *'abcdefg';$/); + assert.match(obfuscatedCode, /^var test *= *'abcdefg';$/); }); }); @@ -90,7 +90,7 @@ describe('SplitStringTransformer', () => { } ).getObfuscatedCode(); - assert.match(obfuscatedCode, /^var *test *= *'ab' *\+ *'cd' *\+ *\( *'ef' *\+ *'g' *\);$/); + assert.match(obfuscatedCode, /^var test *= *'ab' *\+ *'cd' *\+ *\( *'ef' *\+ *'g' *\);$/); }); }); @@ -108,7 +108,7 @@ describe('SplitStringTransformer', () => { } ).getObfuscatedCode(); - assert.match(obfuscatedCode, /^var *test *= *'\\x61\\x62' *\+ *'\\x63\\x64' *\+ *'\\x65\\x66' *\+ *'\\x67';$/); + assert.match(obfuscatedCode, /^var test *= *'\\x61\\x62' *\+ *'\\x63\\x64' *\+ *'\\x65\\x66' *\+ *'\\x67';$/); }); }); @@ -125,7 +125,7 @@ describe('SplitStringTransformer', () => { } ).getObfuscatedCode(); - assert.match(obfuscatedCode, /^var *test *= *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g';$/); + assert.match(obfuscatedCode, /^var test *= *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g';$/); }); }); @@ -142,7 +142,7 @@ describe('SplitStringTransformer', () => { } ).getObfuscatedCode(); - assert.match(obfuscatedCode, /^var *test *= *{'abcdefg' *: *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g'};$/); + assert.match(obfuscatedCode, /^var test *= *{'abcdefg' *: *'ab' *\+ *'cd' *\+ *'ef' *\+ *'g'};$/); }); }); @@ -159,7 +159,7 @@ describe('SplitStringTransformer', () => { } ).getObfuscatedCode(); - assert.match(obfuscatedCode, /^var *test *= *{\['ab' *\+ *'cd' *\+ *'ef' *\+ *'g'] *: *0x1};$/); + assert.match(obfuscatedCode, /^var test *= *{\['ab' *\+ *'cd' *\+ *'ef' *\+ *'g'] *: *0x1};$/); }); }); @@ -205,7 +205,7 @@ describe('SplitStringTransformer', () => { assert.match( obfuscatedCode, - /^var *foo *= *'foo' *\+ *'foo'; *var *bar *= *'barbar'; *var *baz *= *'baz' *\+ *'baz';$/ + /^var foo *= *'foo' *\+ *'foo'; *var bar *= *'barbar'; *var baz *= *'baz' *\+ *'baz';$/ ); }); }); diff --git a/test/functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec.ts b/test/functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec.ts index 7a798301..e07b8b7d 100644 --- a/test/functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec.ts +++ b/test/functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec.ts @@ -21,7 +21,7 @@ describe('TemplateLiteralTransformer', () => { } ).getObfuscatedCode(); - assert.match(obfuscatedCode, /^var *test *= *'abc\\x20' *\+ *foo;$/); + assert.match(obfuscatedCode, /^var test *= *'abc\\x20' *\+ *foo;$/); }); }); @@ -37,7 +37,7 @@ describe('TemplateLiteralTransformer', () => { } ).getObfuscatedCode(); - assert.match(obfuscatedCode, /^var *test *= *'foo\\x0abar';$/); + assert.match(obfuscatedCode, /^var test *= *'foo\\x0abar';$/); }); it('Variant #2: should transform es6 multiline template literal inside return statement', () => { @@ -109,7 +109,7 @@ describe('TemplateLiteralTransformer', () => { } ).getObfuscatedCode(); - assert.match(obfuscatedCode, /^var *test *= *'' *\+ *foo;$/); + assert.match(obfuscatedCode, /^var test *= *'' *\+ *foo;$/); }); }); @@ -125,7 +125,7 @@ describe('TemplateLiteralTransformer', () => { } ).getObfuscatedCode(); - assert.match(obfuscatedCode, /^var *test *= *'abc';$/); + assert.match(obfuscatedCode, /^var test *= *'abc';$/); }); }); @@ -143,7 +143,7 @@ describe('TemplateLiteralTransformer', () => { assert.match( obfuscatedCode, - /^var *test *= *0x1 *\+ *0x1 *\+ *'\\x20abc\\x20' *\+ *\(0x1 *\+ *0x1\);$/ + /^var test *= *0x1 *\+ *0x1 *\+ *'\\x20abc\\x20' *\+ *\(0x1 *\+ *0x1\);$/ ); }); }); @@ -185,9 +185,9 @@ describe('TemplateLiteralTransformer', () => { describe('Variant #8: parentize node', () => { const match: string = `` + - `var *_0x[a-f0-9]{4,6} *= *{};` + + `var _0x[a-f0-9]{4,6} *= *{};` + `_0x[a-f0-9]{4,6}\\['foo'] *= *'bar';` + - `var *foo *= *'' *\\+ *_0x[a-f0-9]{4,6};` + + `var foo *= *'' *\\+ *_0x[a-f0-9]{4,6};` + ``; const regExp: RegExp = new RegExp(match); diff --git a/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts b/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts index 7935cc1b..a98660e5 100644 --- a/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts @@ -56,7 +56,7 @@ describe('DeadCodeInjectionTransformer', () => { describe('Variant #2 - block statements count is less than `5`', () => { const regexp: RegExp = new RegExp( - `var *${variableMatch} *= *function *\\(\\) *\\{` + + `var ${variableMatch} *= *function *\\(\\) *\\{` + `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` + `\\};`, 'g' @@ -92,7 +92,7 @@ describe('DeadCodeInjectionTransformer', () => { describe('Variant #3 - deadCodeInjectionThreshold: 0', () => { const regexp: RegExp = new RegExp( - `var *${variableMatch} *= *function *\\(\\) *\\{` + + `var ${variableMatch} *= *function *\\(\\) *\\{` + `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` + `\\};`, 'g' @@ -129,13 +129,13 @@ describe('DeadCodeInjectionTransformer', () => { describe('Variant #4 - break or continue statement in block statement', () => { describe('Variant #1', () => { const functionRegExp: RegExp = new RegExp( - `var *${variableMatch} *= *function *\\(\\) *\\{` + + `var ${variableMatch} *= *function *\\(\\) *\\{` + `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` + `\\};`, 'g' ); const loopRegExp: RegExp = new RegExp( - `for *\\(var *${variableMatch} *= *${hexMatch}; *${variableMatch} *< *${hexMatch}; *${variableMatch}\\+\\+\\) *\\{` + + `for *\\(var ${variableMatch} *= *${hexMatch}; *${variableMatch} *< *${hexMatch}; *${variableMatch}\\+\\+\\) *\\{` + `(?:continue|break);` + `\\}`, 'g' @@ -182,13 +182,13 @@ describe('DeadCodeInjectionTransformer', () => { describe('Variant #2', () => { const functionRegExp: RegExp = new RegExp( - `var *${variableMatch} *= *function *\\(\\) *\\{` + + `var ${variableMatch} *= *function *\\(\\) *\\{` + `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` + `\\};`, 'g' ); const loopRegExp: RegExp = new RegExp( - `for *\\(var *${variableMatch} *= *${hexMatch}; *${variableMatch} *< *${hexMatch}; *${variableMatch}\\+\\+\\) *` + + `for *\\(var ${variableMatch} *= *${hexMatch}; *${variableMatch} *< *${hexMatch}; *${variableMatch}\\+\\+\\) *` + `(?:continue|break);`, 'g' ); @@ -235,7 +235,7 @@ describe('DeadCodeInjectionTransformer', () => { describe('Variant #5 - await expression in block statement', () => { const functionRegExp: RegExp = new RegExp( - `var *${variableMatch} *= *function *\\(\\) *\\{` + + `var ${variableMatch} *= *function *\\(\\) *\\{` + `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` + `\\};`, 'g' @@ -286,7 +286,7 @@ describe('DeadCodeInjectionTransformer', () => { describe('Variant #6 - super expression in block statement', () => { const functionRegExp: RegExp = new RegExp( - `var *${variableMatch} *= *function *\\(\\) *\\{` + + `var ${variableMatch} *= *function *\\(\\) *\\{` + `console\\[${variableMatch}\\('${hexMatch}'\\)\\]\\(${variableMatch}\\('${hexMatch}'\\)\\);` + `\\};`, 'g' @@ -341,7 +341,7 @@ describe('DeadCodeInjectionTransformer', () => { const expectedDistribution: number = 0.25; const ifMatch: string = `if *\\(!!\\[\\]\\) *\\{`; - const functionMatch: string = `var *${variableMatch} *= *function *\\(\\) *\\{`; + const functionMatch: string = `var ${variableMatch} *= *function *\\(\\) *\\{`; const match1: string = `` + `if *\\(${variableMatch}\\('${hexMatch}'\\) *=== *${variableMatch}\\('${hexMatch}'\\)\\) *\\{` + @@ -556,7 +556,7 @@ describe('DeadCodeInjectionTransformer', () => { const deadCodeMatch: string = `` + `function \\w *\\(\\w\\) *{` + `if *\\(.{0,30}\\) *{` + - `var *(\\w).*?;` + + `var (\\w).*?;` + `} *else *{` + `return *(\\w).*?;` + `}` + @@ -622,7 +622,7 @@ describe('DeadCodeInjectionTransformer', () => { `if *\\(.{0,30}\\) *{` + `return *(\\w).{0,40};` + `} *else *{` + - `var *(\\w).*?;` + + `var (\\w).*?;` + `}` + `}` + ``; @@ -719,7 +719,7 @@ describe('DeadCodeInjectionTransformer', () => { describe('Variant #1: collecting of block statements', () => { const regExp: RegExp = new RegExp( `${variableMatch} *\\(\\); *` + - `var *${variableMatch} *= *0x2; *` + + `var ${variableMatch} *= *0x2; *` + `function *${variableMatch} *\\(\\) *{ *} *`, 'g' ); @@ -756,11 +756,11 @@ describe('DeadCodeInjectionTransformer', () => { describe('Variant #2: wrapping of block statements in dead code conditions', () => { const regExp: RegExp = new RegExp( `function *${variableMatch} *\\(\\) *{ *` + - `var *${variableMatch} *= *0x1; *` + + `var ${variableMatch} *= *0x1; *` + `${variableMatch} *\\(\\); *` + - `var *${variableMatch} *= *0x2; *` + + `var ${variableMatch} *= *0x2; *` + `function *${variableMatch} *\\(\\) *{ *} *` + - `var *${variableMatch} *= *0x3; *` + + `var ${variableMatch} *= *0x3; *` + `}`, 'g' ); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec.ts index 0fcb6c4e..521ce9cd 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/literal-transformer/LiteralTransformer.spec.ts @@ -13,8 +13,8 @@ import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFac describe('LiteralTransformer', () => { describe('transformation of literal node with string value', () => { describe('Variant #1: default behaviour', () => { - const stringArrayRegExp: RegExp = /^var *_0x([a-f0-9]){4} *= *\['test'\];/; - const stringArrayCallRegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/; + const stringArrayRegExp: RegExp = /^var _0x([a-f0-9]){4} *= *\['test'\];/; + const stringArrayCallRegExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0'\);/; let obfuscatedCode: string; @@ -41,7 +41,7 @@ describe('LiteralTransformer', () => { }); describe('Variant #2: `stringArray` option is disabled', () => { - const regExp: RegExp = /^var *test *= *'test';/; + const regExp: RegExp = /^var test *= *'test';/; let obfuscatedCode: string; @@ -83,8 +83,8 @@ describe('LiteralTransformer', () => { }); describe('Variant #4: same literal node values', () => { - const stringArrayRegExp: RegExp = /^var *_0x([a-f0-9]){4} *= *\['test'\];/; - const stringArrayCallRegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/; + const stringArrayRegExp: RegExp = /^var _0x([a-f0-9]){4} *= *\['test'\];/; + const stringArrayCallRegExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0'\);/; let obfuscatedCode: string; @@ -111,7 +111,7 @@ describe('LiteralTransformer', () => { }); describe('Variant #5: `unicodeEscapeSequence` option is enabled', () => { - const regExp: RegExp = /^var *test *= *'\\x74\\x65\\x73\\x74';$/; + const regExp: RegExp = /^var test *= *'\\x74\\x65\\x73\\x74';$/; let obfuscatedCode: string; @@ -134,8 +134,8 @@ describe('LiteralTransformer', () => { }); describe('Variant #6: `unicodeEscapeSequence` and `stringArray` options are enabled', () => { - const stringArrayRegExp: RegExp = /^var *_0x([a-f0-9]){4} *= *\['\\x74\\x65\\x73\\x74'\];/; - const stringArrayCallRegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('\\x30\\x78\\x30'\);/; + const stringArrayRegExp: RegExp = /^var _0x([a-f0-9]){4} *= *\['\\x74\\x65\\x73\\x74'\];/; + const stringArrayCallRegExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('\\x30\\x78\\x30'\);/; let obfuscatedCode: string; @@ -163,7 +163,7 @@ describe('LiteralTransformer', () => { }); describe('Variant #7: short literal node value', () => { - const regExp: RegExp = /var *test *= *'te';/; + const regExp: RegExp = /var test *= *'te';/; let obfuscatedCode: string; @@ -186,8 +186,8 @@ describe('LiteralTransformer', () => { }); describe('Variant #8: base64 encoding', () => { - const stringArrayRegExp: RegExp = /^var *_0x([a-f0-9]){4} *= *\['dGVzdA=='\];/; - const stringArrayCallRegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/; + const stringArrayRegExp: RegExp = /^var _0x([a-f0-9]){4} *= *\['dGVzdA=='\];/; + const stringArrayCallRegExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0'\);/; let obfuscatedCode: string; @@ -216,7 +216,7 @@ describe('LiteralTransformer', () => { describe('Variant #9: rc4 encoding', () => { describe('Variant #1: single string literal', () => { - const regExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0', *'.{4}'\);/; + const regExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0', *'.{4}'\);/; let obfuscatedCode: string; @@ -240,8 +240,8 @@ describe('LiteralTransformer', () => { }); describe('Variant #2: multiple string literals', () => { - const variableRegExp1: RegExp = /var *test *= *_0x(?:[a-f0-9]){4}\('0x0', *'(.{4})'\);/; - const variableRegExp2: RegExp = /var *test *= *_0x(?:[a-f0-9]){4}\('0x1', *'(.{4})'\);/; + const variableRegExp1: RegExp = /var test *= *_0x(?:[a-f0-9]){4}\('0x0', *'(.{4})'\);/; + const variableRegExp2: RegExp = /var test *= *_0x(?:[a-f0-9]){4}\('0x1', *'(.{4})'\);/; let encodedLiteralValue1: string; let encodedLiteralValue2: string; @@ -285,8 +285,8 @@ describe('LiteralTransformer', () => { const stringArrayThreshold: number = 0.5; const delta: number = 0.1; - const regExp1: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/g; - const regExp2: RegExp = /var *test *= *'test';/g; + const regExp1: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0'\);/g; + const regExp2: RegExp = /var test *= *'test';/g; let stringArrayProbability: number, noStringArrayProbability: number; @@ -579,7 +579,7 @@ describe('LiteralTransformer', () => { }); describe('transformation of literal node with boolean value', () => { - const regExp: RegExp = /^var *test *= *!!\[\];$/; + const regExp: RegExp = /^var test *= *!!\[\];$/; let obfuscatedCode: string; @@ -602,7 +602,7 @@ describe('LiteralTransformer', () => { }); describe('transformation of literal node with number value', () => { - const regExp: RegExp = /^var *test *= *0x0;$/; + const regExp: RegExp = /^var test *= *0x0;$/; let obfuscatedCode: string; @@ -625,7 +625,7 @@ describe('LiteralTransformer', () => { }); describe('RegExp literal', () => { - const regExp: RegExp = /^var *regExp *= *\/\(\\d\+\)\/;$/; + const regExp: RegExp = /^var regExp *= *\/\(\\d\+\)\/;$/; let obfuscatedCode: string; diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/obfuscating-replacers/identifier-obfuscating-replacers/BaseIdentifierObfuscatingReplacer.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/obfuscating-replacers/identifier-obfuscating-replacers/BaseIdentifierObfuscatingReplacer.spec.ts index 90bc1950..4665dd6c 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/obfuscating-replacers/identifier-obfuscating-replacers/BaseIdentifierObfuscatingReplacer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/obfuscating-replacers/identifier-obfuscating-replacers/BaseIdentifierObfuscatingReplacer.spec.ts @@ -26,7 +26,7 @@ describe('BaseIdentifierObfuscatingReplacer', () => { it('Should keep reserved names without transformations when `reservedNames` option is enabled', () => { assert.match( obfuscatedCode, - /var *abc *= *0x1; *var *_0x([a-f0-9]){4,6} *= *0x2; *var *ghi *= *0x3;/ + /var abc *= *0x1; *var _0x([a-f0-9]){4,6} *= *0x2; *var ghi *= *0x3;/ ); }); }); @@ -50,7 +50,7 @@ describe('BaseIdentifierObfuscatingReplacer', () => { it('Should keep reserved names without transformations when `reservedNames` option is enabled', () => { assert.match( obfuscatedCode, - /var *abc *= *0x1; *var *_0x([a-f0-9]){4,6} *= *0x2; *var *ghi *= *0x3;/ + /var abc *= *0x1; *var _0x([a-f0-9]){4,6} *= *0x2; *var ghi *= *0x3;/ ); }); }); diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/class-declaration/ClassDeclaration.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/class-declaration/ClassDeclaration.spec.ts index 73cd56d9..bc1dbafe 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/class-declaration/ClassDeclaration.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/class-declaration/ClassDeclaration.spec.ts @@ -122,7 +122,7 @@ describe('ScopeIdentifiersTransformer ClassDeclaration identifiers', () => { describe('Variant #3: already renamed identifiers shouldn\'t be renamed twice', () => { const classDeclarationRegExp: RegExp = /class *d *{/; - const variableDeclarationsRegExp: RegExp = /let *e, *f, *g, *h;/; + const variableDeclarationsRegExp: RegExp = /let e, *f, *g, *h;/; const classReferenceRegExp: RegExp = /new d\(\);/; let obfuscatedCode: string; diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/function-declaration/FunctionDeclaration.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/function-declaration/FunctionDeclaration.spec.ts index 04da85e7..e9e557d9 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/function-declaration/FunctionDeclaration.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/function-declaration/FunctionDeclaration.spec.ts @@ -93,7 +93,7 @@ describe('ScopeIdentifiersTransformer FunctionDeclaration identifiers', () => { describe('Variant #3: generator `functionDeclaration`', () => { const functionNameIdentifierRegExp: RegExp = /function *\* *(_0x[a-f0-9]{4,6}) *\(\) *\{/; - const functionCallIdentifierRegExp: RegExp = /let *_0x[a-f0-9]{4,6} *= *(_0x[a-f0-9]{4,6}) *\( *\);/; + const functionCallIdentifierRegExp: RegExp = /let _0x[a-f0-9]{4,6} *= *(_0x[a-f0-9]{4,6}) *\( *\);/; let obfuscatedCode: string, functionNameIdentifier: string, @@ -146,7 +146,7 @@ describe('ScopeIdentifiersTransformer FunctionDeclaration identifiers', () => { describe('Variant #5: already renamed identifiers shouldn\'t be renamed twice', () => { describe('Variant #1', () => { const functionDeclarationRegExp: RegExp = /function *d\(\) *{/; - const variableDeclarationsRegExp: RegExp = /let *e, *f, *g, *h;/; + const variableDeclarationsRegExp: RegExp = /let e, *f, *g, *h;/; let obfuscatedCode: string; diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/function/Function.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/function/Function.spec.ts index 9232234a..ed6f0830 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/function/Function.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/function/Function.spec.ts @@ -456,7 +456,7 @@ describe('ScopeIdentifiersTransformer Function identifiers', () => { }); describe('Variant #2: identifier as right value', () => { - const variableDeclarationRegExp: RegExp = /var *(_0x[a-f0-9]{4,6}) *= *0x1;/; + const variableDeclarationRegExp: RegExp = /var (_0x[a-f0-9]{4,6}) *= *0x1;/; const functionParameterRegExp: RegExp = /function *\((_0x[a-f0-9]{4,6}) *= *(_0x[a-f0-9]{4,6})\) *\{/; const functionBodyRegExp: RegExp = /return *(_0x[a-f0-9]{4,6});/; @@ -503,7 +503,7 @@ describe('ScopeIdentifiersTransformer Function identifiers', () => { }); describe('Variant #3: identifier as right value', () => { - const variableDeclarationRegExp: RegExp = /var *(_0x[a-f0-9]{4,6}) *= *0x1;/; + const variableDeclarationRegExp: RegExp = /var (_0x[a-f0-9]{4,6}) *= *0x1;/; const functionParameterRegExp: RegExp = /function *\((_0x[a-f0-9]{4,6}), *(_0x[a-f0-9]{4,6}) *= *(_0x[a-f0-9]{4,6})\) *\{/; const functionBodyRegExp: RegExp = /return *(_0x[a-f0-9]{4,6}) *\+ *(_0x[a-f0-9]{4,6});/; diff --git a/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/variable-declaration/VariableDeclaration.spec.ts b/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/variable-declaration/VariableDeclaration.spec.ts index 94113530..29bbeb37 100644 --- a/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/variable-declaration/VariableDeclaration.spec.ts +++ b/test/functional-tests/node-transformers/obfuscating-transformers/scope-identifiers-transformer/variable-declaration/VariableDeclaration.spec.ts @@ -11,7 +11,7 @@ import { JavaScriptObfuscator } from '../../../../../../src/JavaScriptObfuscator describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { describe('Variant #1: default behaviour', () => { - const variableDeclarationRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *'abc';/; + const variableDeclarationRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *'abc';/; const variableCallRegExp: RegExp = /console\['log'\]\(_0x([a-f0-9]){4,6}\);/; let obfuscatedCode: string; @@ -38,7 +38,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { describe('Variant #2: parent block scope node is `Program` node', () => { describe('Variant #1: `renameGlobals` option is disabled', () => { - const variableDeclarationRegExp: RegExp = /var *test *= *0xa;/; + const variableDeclarationRegExp: RegExp = /var test *= *0xa;/; const variableCallRegExp: RegExp = /console\['log'\]\(test\);/; let obfuscatedCode: string; @@ -64,7 +64,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { }); describe('Variant #2: `renameGlobals` option is enabled', () => { - const variableDeclarationRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *0xa;/; + const variableDeclarationRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0xa;/; const variableCallRegExp: RegExp = /console\['log'\]\(_0x([a-f0-9]){4,6}\);/; let obfuscatedCode: string; @@ -164,7 +164,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { const innerFunctionParamIdentifierRegExp: RegExp = /function _0x[a-f0-9]{4,6} *\((_0x[a-f0-9]{4,6})\) *\{/; const consoleLogIdentifierRegExp: RegExp = /console\['log'\]\((_0x[a-f0-9]{4,6})\)/; const objectIdentifierRegExp: RegExp = /return\{'t':(_0x[a-f0-9]{4,6})\}/; - const variableDeclarationIdentifierRegExp: RegExp = /var *(_0x[a-f0-9]{4,6});/; + const variableDeclarationIdentifierRegExp: RegExp = /var (_0x[a-f0-9]{4,6});/; let outerFunctionParamIdentifierName: string|null, innerFunctionParamIdentifierName: string|null, @@ -219,7 +219,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { const innerFunctionParamIdentifierRegExp: RegExp = /function _0x[a-f0-9]{4,6} *\((_0x[a-f0-9]{4,6})\) *\{/; const consoleLogIdentifierRegExp: RegExp = /console\['log'\]\((_0x[a-f0-9]{4,6})\)/; const objectIdentifierRegExp: RegExp = /return\{'t':(_0x[a-f0-9]{4,6})\}/; - const variableDeclarationIdentifierRegExp: RegExp = /var *(_0x[a-f0-9]{4,6});/; + const variableDeclarationIdentifierRegExp: RegExp = /var (_0x[a-f0-9]{4,6});/; let catchClauseParamIdentifierName: string|null, innerFunctionParamIdentifierName: string|null, @@ -314,7 +314,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { }); describe('Variant #9: object pattern as variable declarator', () => { - const objectPatternVariableDeclaratorRegExp: RegExp = /var *\{ *bar *\} *= *\{ *'bar' *: *'foo' *\};/; + const objectPatternVariableDeclaratorRegExp: RegExp = /var \{ *bar *\} *= *\{ *'bar' *: *'foo' *\};/; const variableUsageRegExp: RegExp = /console\['log'\]\(bar\);/; let obfuscatedCode: string; @@ -340,7 +340,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { }); describe('Variant #10: array pattern as variable declarator', () => { - const objectPatternVariableDeclaratorRegExp: RegExp = /var *\[ *(_0x([a-f0-9]){4,6}), *(_0x([a-f0-9]){4,6}) *\] *= *\[0x1, *0x2\];/; + const objectPatternVariableDeclaratorRegExp: RegExp = /var \[ *(_0x([a-f0-9]){4,6}), *(_0x([a-f0-9]){4,6}) *\] *= *\[0x1, *0x2\];/; const variableUsageRegExp: RegExp = /console\['log'\]\((_0x([a-f0-9]){4,6}), *(_0x([a-f0-9]){4,6})\);/; let obfuscatedCode: string, @@ -383,7 +383,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { }); describe('Variant #11: computed object expression identifier', () => { - const computedObjectExpressionRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{\[_0x[a-f0-9]{4,6}\]: *0x1\};/; + const computedObjectExpressionRegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{\[_0x[a-f0-9]{4,6}\]: *0x1\};/; let obfuscatedCode: string; @@ -426,7 +426,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { describe('Variant #13: already renamed identifiers shouldn\'t be renamed twice', () => { describe('Variant #1', () => { - const variableDeclarationRegExp: RegExp = /var *d *= *0x1;/; + const variableDeclarationRegExp: RegExp = /var d *= *0x1;/; const functionDeclarationRegExp1: RegExp = /function *e *\(\) *{}/; const functionDeclarationRegExp2: RegExp = /function *f *\(\) *{}/; const functionDeclarationRegExp3: RegExp = /function *g *\(\) *{}/; @@ -468,10 +468,10 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { }); describe('Variant #2', () => { - const variableDeclarationRegExp1: RegExp = /var *d *= *0x1;/; - const variableDeclarationRegExp2: RegExp = /var *e;/; + const variableDeclarationRegExp1: RegExp = /var d *= *0x1;/; + const variableDeclarationRegExp2: RegExp = /var e;/; const functionDeclarationRegExp: RegExp = /function *f *\(\) *{/; - const variableDeclarationRegExp3: RegExp = /var *g *= *function *\(\) *{}/; + const variableDeclarationRegExp3: RegExp = /var g *= *function *\(\) *{}/; let obfuscatedCode: string; @@ -555,8 +555,8 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { }); describe('Variant #16: array rest', () => { - const objectRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\['foo', *'bar', *'baz'\];/; - const objectRestRegExp: RegExp = /var *\[_0x[a-f0-9]{4,6}, *\.\.\.*_0x[a-f0-9]{4,6}] *= *_0x[a-f0-9]{4,6};/; + const objectRegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\['foo', *'bar', *'baz'\];/; + const objectRestRegExp: RegExp = /var \[_0x[a-f0-9]{4,6}, *\.\.\.*_0x[a-f0-9]{4,6}] *= *_0x[a-f0-9]{4,6};/; let obfuscatedCode: string; @@ -581,8 +581,8 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { }); describe('Variant #17: object rest', () => { - const objectRegExp: RegExp = /var *_0x[a-f0-9]{4,6} *= *\{'foo': *0x1, *'bar': *0x2, *'baz': *0x3\};/; - const objectRestRegExp: RegExp = /var *\{foo, *\.\.\.*_0x[a-f0-9]{4,6}\} *= *_0x[a-f0-9]{4,6};/; + const objectRegExp: RegExp = /var _0x[a-f0-9]{4,6} *= *\{'foo': *0x1, *'bar': *0x2, *'baz': *0x3\};/; + const objectRestRegExp: RegExp = /var \{foo, *\.\.\.*_0x[a-f0-9]{4,6}\} *= *_0x[a-f0-9]{4,6};/; let obfuscatedCode: string; @@ -607,7 +607,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { }); describe('Variant #18: destructing assignment without declaration #1', () => { - const variablesDeclaration: RegExp = /var *a, *b, *_0x[a-f0-9]{4,6};/; + const variablesDeclaration: RegExp = /var a, *b, *_0x[a-f0-9]{4,6};/; const destructingAssignmentRegExp: RegExp = /\({ *a, *b *} *= *{ *'a' *: *0x1, *'b' *: *0x2 *}\);/; const identifierAssignmentRegExp: RegExp = /_0x[a-f0-9]{4,6} *= *0x3;/; const variablesUsageRegExp: RegExp = /console\['log']\(a, *b, *_0x[a-f0-9]{4,6}\);/; @@ -643,7 +643,7 @@ describe('ScopeIdentifiersTransformer VariableDeclaration identifiers', () => { }); describe('Variant #19: destructing assignment without declaration #2', () => { - const variablesDeclaration: RegExp = /var *_0x[a-f0-9]{4,6} *= *'a', *_0x[a-f0-9]{4,6} *= *'b', *_0x[a-f0-9]{4,6};/; + const variablesDeclaration: RegExp = /var _0x[a-f0-9]{4,6} *= *'a', *_0x[a-f0-9]{4,6} *= *'b', *_0x[a-f0-9]{4,6};/; const destructingAssignmentRegExp: RegExp = /\({ *\[_0x[a-f0-9]{4,6}]: *_0x[a-f0-9]{4,6}, *\[_0x[a-f0-9]{4,6}]: *_0x[a-f0-9]{4,6} *} *= *{ *'a' *: *0x1, *'b' *: *0x2 *}\);/; const identifierAssignmentRegExp: RegExp = /_0x[a-f0-9]{4,6} *= *0x3;/; const variablesUsageRegExp: RegExp = /console\['log']\(_0x[a-f0-9]{4,6}, *_0x[a-f0-9]{4,6}, *_0x[a-f0-9]{4,6}\);/; diff --git a/test/functional-tests/node-transformers/preparing-transformers/comments-transformer/CommentsTransformer.spec.ts b/test/functional-tests/node-transformers/preparing-transformers/comments-transformer/CommentsTransformer.spec.ts index 8d840881..9db0a8bf 100644 --- a/test/functional-tests/node-transformers/preparing-transformers/comments-transformer/CommentsTransformer.spec.ts +++ b/test/functional-tests/node-transformers/preparing-transformers/comments-transformer/CommentsTransformer.spec.ts @@ -8,7 +8,7 @@ import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFac describe('CommentsTransformer', () => { describe('Variant #1: simple comment without preserved words', () => { - const regExp: RegExp = /^var *test *= *0x1;$/; + const regExp: RegExp = /^var test *= *0x1;$/; let obfuscatedCode: string; @@ -29,7 +29,7 @@ describe('CommentsTransformer', () => { }); describe('Variant #2: simple comment with preserved words', () => { - const regExp: RegExp = /^\/\/ *@license *test *comment *\n*var *test *= *0x1;$/; + const regExp: RegExp = /^\/\/ *@license *test *comment *\n*var test *= *0x1;$/; let obfuscatedCode: string; @@ -50,7 +50,7 @@ describe('CommentsTransformer', () => { }); describe('Variant #3: comment with preserved and non-preserved words', () => { - const regExp: RegExp = /^\/\/ *@license *test *comment *\n*var *test *= *0x1;$/; + const regExp: RegExp = /^\/\/ *@license *test *comment *\n*var test *= *0x1;$/; let obfuscatedCode: string; @@ -76,7 +76,7 @@ describe('CommentsTransformer', () => { ` *\\* *@license *\\n` + ` *\\* *test\\n` + ` *\\*\\/\\n` + - `var *test *= *0x1;` + + `var test *= *0x1;` + ` *\\/\\*\\* *@preserved *\\*\\/$` + ``); diff --git a/test/functional-tests/node-transformers/preparing-transformers/eval-call-expression-transformer/EvalCallExpressionTransformer.spec.ts b/test/functional-tests/node-transformers/preparing-transformers/eval-call-expression-transformer/EvalCallExpressionTransformer.spec.ts index f27a7e60..92f6ce7e 100644 --- a/test/functional-tests/node-transformers/preparing-transformers/eval-call-expression-transformer/EvalCallExpressionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/preparing-transformers/eval-call-expression-transformer/EvalCallExpressionTransformer.spec.ts @@ -92,7 +92,7 @@ describe('EvalCallExpressionTransformer', () => { }); describe('Variant #4: string array calls wrapper call', () => { - const stringArrayRegExp: RegExp = /var *_0x([a-f0-9]){4} *= *\['log', *'bar'];/; + const stringArrayRegExp: RegExp = /var _0x([a-f0-9]){4} *= *\['log', *'bar'];/; const stringArrayCallsWrapperRegExp: RegExp = /eval *\('console\[_0x([a-f0-9]){4,6}\(\\'0x0\\'\)]\(_0x([a-f0-9]){4,6}\(\\'0x1\\'\)\);'\);/; let obfuscatedCode: string; @@ -154,7 +154,7 @@ describe('EvalCallExpressionTransformer', () => { const functionIdentifierRegExp: RegExp = /function *_0x(?:[a-f0-9]){4,6} *\((_0x(?:[a-f0-9]){4,6}), *(_0x(?:[a-f0-9]){4,6})\)/; const evalExpressionMatch: string = `` + `eval *\\('` + - `var *(_0x(?:[a-f0-9]){4,6}) *= *(_0x(?:[a-f0-9]){4,6}) *\\+ *(_0x(?:[a-f0-9]){4,6});` + + `var (_0x(?:[a-f0-9]){4,6}) *= *(_0x(?:[a-f0-9]){4,6}) *\\+ *(_0x(?:[a-f0-9]){4,6});` + `eval\\(\\\\'` + `(_0x(?:[a-f0-9]){4,6}) *\\+ *(_0x(?:[a-f0-9]){4,6});` + `\\\\'\\);` + @@ -280,7 +280,7 @@ describe('EvalCallExpressionTransformer', () => { describe('Variant #9: integration with control flow flattening', () => { const variableMatch: string = '_0x([a-f0-9]){4,6}'; const controlFlowStorageNodeMatch: string = `` + - `var *${variableMatch} *= *\\{` + + `var ${variableMatch} *= *\\{` + `'\\w{5}' *: *function *\\(${variableMatch}, *${variableMatch}\\) *\\{` + `return *${variableMatch} *\\+ *${variableMatch};` + `\\}` + diff --git a/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/black-list-obfuscating-guard/BlackListObfuscatingGuard.spec.ts b/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/black-list-obfuscating-guard/BlackListObfuscatingGuard.spec.ts index b1ed4579..38ad32d3 100644 --- a/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/black-list-obfuscating-guard/BlackListObfuscatingGuard.spec.ts +++ b/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/black-list-obfuscating-guard/BlackListObfuscatingGuard.spec.ts @@ -11,7 +11,7 @@ describe('BlackListObfuscatingGuard', () => { describe('`\'use strict\';` operator', () => { const useStrictOperatorRegExp: RegExp = /'use *strict';/; const stringArrayLatinRegExp: RegExp = /var _0x(\w){4} *= *\['abc'\];/; - const stringArrayCallRegExp: RegExp = /var *test *= *_0x(\w){4}\('0x0'\);$/; + const stringArrayCallRegExp: RegExp = /var test *= *_0x(\w){4}\('0x0'\);$/; let obfuscatedCode: string; diff --git a/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/conditional-comment-obfuscating-guard/ConditionalCommentObfuscatingGuard.spec.ts b/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/conditional-comment-obfuscating-guard/ConditionalCommentObfuscatingGuard.spec.ts index 0a73ffc2..49d3e5fe 100644 --- a/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/conditional-comment-obfuscating-guard/ConditionalCommentObfuscatingGuard.spec.ts +++ b/test/functional-tests/node-transformers/preparing-transformers/obfuscating-guards/conditional-comment-obfuscating-guard/ConditionalCommentObfuscatingGuard.spec.ts @@ -9,8 +9,8 @@ import { readFileAsString } from '../../../../../helpers/readFileAsString'; describe('ConditionalCommentObfuscatingGuard', () => { describe('check', () => { describe('Variant #1: `disable` conditional comment', () => { - const obfuscatedVariableDeclarationRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *0x1;/; - const ignoredVariableDeclarationRegExp: RegExp = /var *bar *= *2;/; + const obfuscatedVariableDeclarationRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x1;/; + const ignoredVariableDeclarationRegExp: RegExp = /var bar *= *2;/; const consoleLogRegExp: RegExp = /console.log\(_0x([a-f0-9]){4,6}\);/; let obfuscatedCode: string; @@ -40,9 +40,9 @@ describe('ConditionalCommentObfuscatingGuard', () => { }); describe('Variant #2: `disable` and `enable` conditional comments #1', () => { - const obfuscatedVariableDeclaration1RegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *0x1;/; - const obfuscatedVariableDeclaration2RegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *0x3;/; - const ignoredVariableDeclarationRegExp: RegExp = /var *bar *= *2;/; + const obfuscatedVariableDeclaration1RegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x1;/; + const obfuscatedVariableDeclaration2RegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x3;/; + const ignoredVariableDeclarationRegExp: RegExp = /var bar *= *2;/; let obfuscatedCode: string; @@ -71,8 +71,8 @@ describe('ConditionalCommentObfuscatingGuard', () => { }); describe('Variant #3: `disable` and `enable` conditional comments #2', () => { - const ignoredVariableDeclarationRegExp: RegExp = /var *foo *= *1;/; - const obfuscatedVariableDeclarationRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *0x2;/; + const ignoredVariableDeclarationRegExp: RegExp = /var foo *= *1;/; + const obfuscatedVariableDeclarationRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *0x2;/; let obfuscatedCode: string; @@ -98,8 +98,8 @@ describe('ConditionalCommentObfuscatingGuard', () => { }); describe('Variant #4: `disable` conditional comment from beginning of the code', () => { - const ignoredVariableDeclaration1RegExp: RegExp = /var *foo *= *1;/; - const ignoredVariableDeclaration2RegExp: RegExp = /var *bar *= *2;/; + const ignoredVariableDeclaration1RegExp: RegExp = /var foo *= *1;/; + const ignoredVariableDeclaration2RegExp: RegExp = /var bar *= *2;/; let obfuscatedCode: string; @@ -124,11 +124,11 @@ describe('ConditionalCommentObfuscatingGuard', () => { }); describe('Variant #5: `disable` and `enable` conditional comments with dead code injection', () => { - const obfuscatedFunctionExpressionRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *function *\(_0x([a-f0-9]){4,6}, *_0x([a-f0-9]){4,6}, *_0x([a-f0-9]){4,6}\) *{/g; + const obfuscatedFunctionExpressionRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *function *\(_0x([a-f0-9]){4,6}, *_0x([a-f0-9]){4,6}, *_0x([a-f0-9]){4,6}\) *{/g; const expectedObfuscatedFunctionExpressionLength: number = 3; - const ignoredFunctionExpression1RegExp: RegExp = /var *bar *= *function *\(a, *b, *c\) *{/; - const ignoredFunctionExpression2RegExp: RegExp = /var *baz *= *function *\(a, *b, *c\) *{/; + const ignoredFunctionExpression1RegExp: RegExp = /var bar *= *function *\(a, *b, *c\) *{/; + const ignoredFunctionExpression2RegExp: RegExp = /var baz *= *function *\(a, *b, *c\) *{/; const obfuscatedFunctionCallRegExp: RegExp = /_0x([a-f0-9]){4,6}\( *\);/g; const expectedObfuscatedFunctionCallsLength: number = 3; @@ -194,8 +194,8 @@ describe('ConditionalCommentObfuscatingGuard', () => { }); describe('Variant #6: `disable` and `enable` conditional comments with control flow flattening', () => { - const obfuscatedVariableDeclarationRegExp: RegExp = /var *_0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['[a-zA-Z0-9]{1,5}'];/; - const ignoredVariableDeclarationRegExp: RegExp = /var *bar *= *'bar';/; + const obfuscatedVariableDeclarationRegExp: RegExp = /var _0x([a-f0-9]){4,6} *= *_0x([a-f0-9]){4,6}\['[a-zA-Z0-9]{1,5}'];/; + const ignoredVariableDeclarationRegExp: RegExp = /var bar *= *'bar';/; let obfuscatedCode: string; diff --git a/test/functional-tests/storages/string-array-storage/StringArrayStorage.spec.ts b/test/functional-tests/storages/string-array-storage/StringArrayStorage.spec.ts index fb39f5ad..4059088c 100644 --- a/test/functional-tests/storages/string-array-storage/StringArrayStorage.spec.ts +++ b/test/functional-tests/storages/string-array-storage/StringArrayStorage.spec.ts @@ -15,8 +15,8 @@ describe('StringArrayStorage', () => { const delta: number = 0.1; const expectedVariantProbability: number = 1; - const stringArrayVariant1RegExp1: RegExp = /var *_0x([a-f0-9]){4} *= *\['test'];/g; - const literalNodeVariant1RegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/g; + const stringArrayVariant1RegExp1: RegExp = /var _0x([a-f0-9]){4} *= *\['test'];/g; + const literalNodeVariant1RegExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0'\);/g; let stringArrayVariant1Probability: number, literalNodeVariant1Probability: number; @@ -74,15 +74,15 @@ describe('StringArrayStorage', () => { const literalNodeVariantsCount: number = 1; const stringArrayVariantRegExps: RegExp[] = [ - /var *_0x([a-f0-9]){4} *= *\['foo', *'bar', *'baz'];/g, - /var *_0x([a-f0-9]){4} *= *\['bar', *'baz', *'foo'];/g, - /var *_0x([a-f0-9]){4} *= *\['baz', *'foo', *'bar'];/g + /var _0x([a-f0-9]){4} *= *\['foo', *'bar', *'baz'];/g, + /var _0x([a-f0-9]){4} *= *\['bar', *'baz', *'foo'];/g, + /var _0x([a-f0-9]){4} *= *\['baz', *'foo', *'bar'];/g ]; const literalNodeVariantRegExps: RegExp[] = [ new RegExp( - `var *foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` + - `var *bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` + - `var *baz *= *_0x([a-f0-9]){4}\\('0x2'\\);` + `var foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` + + `var bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` + + `var baz *= *_0x([a-f0-9]){4}\\('0x2'\\);` ) ]; @@ -156,8 +156,8 @@ describe('StringArrayStorage', () => { const delta: number = 0.1; const expectedVariantProbability: number = 1; - const stringArrayVariantRegExp1: RegExp = /var *_0x([a-f0-9]){4} *= *\['test'];/g; - const literalNodeVariant1RegExp: RegExp = /var *test *= *_0x([a-f0-9]){4}\('0x0'\);/g; + const stringArrayVariantRegExp1: RegExp = /var _0x([a-f0-9]){4} *= *\['test'];/g; + const literalNodeVariant1RegExp: RegExp = /var test *= *_0x([a-f0-9]){4}\('0x0'\);/g; let stringArrayVariant1Probability: number, literalNodeVariant1Probability: number; @@ -213,44 +213,44 @@ describe('StringArrayStorage', () => { const variantsCount: number = 6; const stringArrayVariantRegExps: RegExp[] = [ - /var *_0x([a-f0-9]){4} *= *\['foo', *'bar', *'baz'];/g, - /var *_0x([a-f0-9]){4} *= *\['foo', *'baz', *'bar'];/g, - /var *_0x([a-f0-9]){4} *= *\['bar', *'foo', *'baz'];/g, - /var *_0x([a-f0-9]){4} *= *\['bar', *'baz', *'foo'];/g, - /var *_0x([a-f0-9]){4} *= *\['baz', *'foo', *'bar'];/g, - /var *_0x([a-f0-9]){4} *= *\['baz', *'bar', *'foo'];/g + /var _0x([a-f0-9]){4} *= *\['foo', *'bar', *'baz'];/g, + /var _0x([a-f0-9]){4} *= *\['foo', *'baz', *'bar'];/g, + /var _0x([a-f0-9]){4} *= *\['bar', *'foo', *'baz'];/g, + /var _0x([a-f0-9]){4} *= *\['bar', *'baz', *'foo'];/g, + /var _0x([a-f0-9]){4} *= *\['baz', *'foo', *'bar'];/g, + /var _0x([a-f0-9]){4} *= *\['baz', *'bar', *'foo'];/g ]; const literalNodeVariantRegExps: RegExp[] = [ new RegExp( - `var *foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` + - `var *bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` + - `var *baz *= *_0x([a-f0-9]){4}\\('0x2'\\);` + `var foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` + + `var bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` + + `var baz *= *_0x([a-f0-9]){4}\\('0x2'\\);` ), new RegExp( - `var *foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` + - `var *bar *= *_0x([a-f0-9]){4}\\('0x2'\\); *` + - `var *baz *= *_0x([a-f0-9]){4}\\('0x1'\\);` + `var foo *= *_0x([a-f0-9]){4}\\('0x0'\\); *` + + `var bar *= *_0x([a-f0-9]){4}\\('0x2'\\); *` + + `var baz *= *_0x([a-f0-9]){4}\\('0x1'\\);` ), new RegExp( - `var *foo *= *_0x([a-f0-9]){4}\\('0x1'\\); *` + - `var *bar *= *_0x([a-f0-9]){4}\\('0x0'\\); *` + - `var *baz *= *_0x([a-f0-9]){4}\\('0x2'\\);` + `var foo *= *_0x([a-f0-9]){4}\\('0x1'\\); *` + + `var bar *= *_0x([a-f0-9]){4}\\('0x0'\\); *` + + `var baz *= *_0x([a-f0-9]){4}\\('0x2'\\);` ), new RegExp( - `var *foo *= *_0x([a-f0-9]){4}\\('0x1'\\); *` + - `var *bar *= *_0x([a-f0-9]){4}\\('0x2'\\); *` + - `var *baz *= *_0x([a-f0-9]){4}\\('0x0'\\);` + `var foo *= *_0x([a-f0-9]){4}\\('0x1'\\); *` + + `var bar *= *_0x([a-f0-9]){4}\\('0x2'\\); *` + + `var baz *= *_0x([a-f0-9]){4}\\('0x0'\\);` ), new RegExp( - `var *foo *= *_0x([a-f0-9]){4}\\('0x2'\\); *` + - `var *bar *= *_0x([a-f0-9]){4}\\('0x0'\\); *` + - `var *baz *= *_0x([a-f0-9]){4}\\('0x1'\\);` + `var foo *= *_0x([a-f0-9]){4}\\('0x2'\\); *` + + `var bar *= *_0x([a-f0-9]){4}\\('0x0'\\); *` + + `var baz *= *_0x([a-f0-9]){4}\\('0x1'\\);` ), new RegExp( - `var *foo *= *_0x([a-f0-9]){4}\\('0x2'\\); *` + - `var *bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` + - `var *baz *= *_0x([a-f0-9]){4}\\('0x0'\\);` + `var foo *= *_0x([a-f0-9]){4}\\('0x2'\\); *` + + `var bar *= *_0x([a-f0-9]){4}\\('0x1'\\); *` + + `var baz *= *_0x([a-f0-9]){4}\\('0x0'\\);` ) ];