From 5a0dede60ec367440d6f52ab8ab6d9ea68a66a7b Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Thu, 12 Jan 2017 00:15:55 +0300 Subject: [PATCH] CatchClause obfuscator ObjectPattern test Tests refactoring --- .../CatchClauseTransformer.spec.ts | 18 +++ .../fixtures/object-pattern-as-parameter.js | 7 ++ .../FunctionTransformer.spec.ts | 4 +- ...ment.js => object-pattern-as-parameter.js} | 0 .../VariableDeclarationTransformer.spec.ts | 103 +++++++++++++----- ...able-call-before-variable-declaration-3.js | 14 +++ 6 files changed, 114 insertions(+), 32 deletions(-) create mode 100644 test/functional-tests/node-transformers/obfuscation-transformers/catch-clause-transformer/fixtures/object-pattern-as-parameter.js rename test/functional-tests/node-transformers/obfuscation-transformers/function-transformer/fixtures/{object-pattern-as-argument.js => object-pattern-as-parameter.js} (100%) create mode 100644 test/functional-tests/node-transformers/obfuscation-transformers/variable-declaration-transformer/fixtures/variable-call-before-variable-declaration-3.js diff --git a/test/functional-tests/node-transformers/obfuscation-transformers/catch-clause-transformer/CatchClauseTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscation-transformers/catch-clause-transformer/CatchClauseTransformer.spec.ts index 29f457ae..d1d8e1db 100644 --- a/test/functional-tests/node-transformers/obfuscation-transformers/catch-clause-transformer/CatchClauseTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscation-transformers/catch-clause-transformer/CatchClauseTransformer.spec.ts @@ -37,4 +37,22 @@ describe('CatchClauseTransformer', () => { assert.equal(firstMatch, secondMatch); }); }); + + describe('object pattern as parameter', () => { + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + readFileAsString(__dirname + '/fixtures/object-pattern-as-parameter.js'), + { + ...NO_CUSTOM_NODES_PRESET + } + ); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + + it('shouldn\'t transform function parameter object pattern identifier', () => { + const functionParameterMatch: RegExp = /\} *catch *\(\{ *name *\}\) *\{/; + const functionBodyMatch: RegExp = /return *name;/; + + assert.match(obfuscatedCode, functionParameterMatch); + assert.match(obfuscatedCode, functionBodyMatch); + }); + }); }); diff --git a/test/functional-tests/node-transformers/obfuscation-transformers/catch-clause-transformer/fixtures/object-pattern-as-parameter.js b/test/functional-tests/node-transformers/obfuscation-transformers/catch-clause-transformer/fixtures/object-pattern-as-parameter.js new file mode 100644 index 00000000..8a6c040b --- /dev/null +++ b/test/functional-tests/node-transformers/obfuscation-transformers/catch-clause-transformer/fixtures/object-pattern-as-parameter.js @@ -0,0 +1,7 @@ +(function () { + try { + + } catch ({ name }) { + return name; + } +})(); diff --git a/test/functional-tests/node-transformers/obfuscation-transformers/function-transformer/FunctionTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscation-transformers/function-transformer/FunctionTransformer.spec.ts index d15b97b3..95040aeb 100644 --- a/test/functional-tests/node-transformers/obfuscation-transformers/function-transformer/FunctionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscation-transformers/function-transformer/FunctionTransformer.spec.ts @@ -35,9 +35,9 @@ describe('FunctionTransformer', () => { }); }); - describe('object pattern as argument', () => { + describe('object pattern as parameter', () => { const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( - readFileAsString(__dirname + '/fixtures/object-pattern-as-argument.js'), + readFileAsString(__dirname + '/fixtures/object-pattern-as-parameter.js'), { ...NO_CUSTOM_NODES_PRESET } diff --git a/test/functional-tests/node-transformers/obfuscation-transformers/function-transformer/fixtures/object-pattern-as-argument.js b/test/functional-tests/node-transformers/obfuscation-transformers/function-transformer/fixtures/object-pattern-as-parameter.js similarity index 100% rename from test/functional-tests/node-transformers/obfuscation-transformers/function-transformer/fixtures/object-pattern-as-argument.js rename to test/functional-tests/node-transformers/obfuscation-transformers/function-transformer/fixtures/object-pattern-as-parameter.js diff --git a/test/functional-tests/node-transformers/obfuscation-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts b/test/functional-tests/node-transformers/obfuscation-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts index 91d4d101..df211160 100644 --- a/test/functional-tests/node-transformers/obfuscation-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts +++ b/test/functional-tests/node-transformers/obfuscation-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts @@ -77,48 +77,91 @@ describe('VariableDeclarationTransformer', () => { }); describe(`variable calls before variable declaration when function param has the same name as variables name`, () => { - let obfuscationResult: IObfuscationResult, - functionParamIdentifierName: string|null, - innerFunctionParamIdentifierName: string|null, - constructorIdentifierName: string|null, - objectIdentifierName: string|null, - variableDeclarationIdentifierName: string|null; + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + readFileAsString(__dirname + '/fixtures/variable-call-before-variable-declaration-2.js'), + { + ...NO_CUSTOM_NODES_PRESET + } + ); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); - beforeEach(() => { - obfuscationResult = JavaScriptObfuscator.obfuscate( - readFileAsString(__dirname + '/fixtures/variable-call-before-variable-declaration-2.js'), - { - ...NO_CUSTOM_NODES_PRESET - } - ); + const functionParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/function *_0x[a-f0-9]{4,6} *\((_0x[a-f0-9]{4,6})\,(_0x[a-f0-9]{4,6})\) *\{/); + const innerFunctionParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/function _0x[a-f0-9]{4,6} *\((_0x[a-f0-9]{4,6})\) *\{/); + const constructorIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/console\['\\x6c\\x6f\\x67'\]\((_0x[a-f0-9]{4,6})\)/); + const objectIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/return\{'\\x74':(_0x[a-f0-9]{4,6})\}/); + const variableDeclarationIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/var *(_0x[a-f0-9]{4,6});/); + + const outerFunctionParamIdentifierName: string|null = (functionParamIdentifierMatch)[1]; + const innerFunctionParamIdentifierName: string|null = (innerFunctionParamIdentifierMatch)[1]; + const constructorIdentifierName: string|null = (constructorIdentifierMatch)[1]; + const objectIdentifierName: string|null = (objectIdentifierMatch)[1]; + const variableDeclarationIdentifierName: string|null = (variableDeclarationIdentifierMatch)[1]; + + it('should\'t name variables inside inner function with names from outer function params', () => { + assert.notEqual(outerFunctionParamIdentifierName, constructorIdentifierName); + assert.notEqual(outerFunctionParamIdentifierName, innerFunctionParamIdentifierName); }); - it('should correct transform variables inside function body', () => { - const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); - const functionParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode - .match(/function *_0x[a-f0-9]{4,6} *\((_0x[a-f0-9]{4,6})\,(_0x[a-f0-9]{4,6})\) *\{/); - const innerFunctionParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode - .match(/function _0x[a-f0-9]{4,6} *\((_0x[a-f0-9]{4,6})\) *\{/); - const constructorIdentifierMatch: RegExpMatchArray|null = obfuscatedCode - .match(/console\['\\x6c\\x6f\\x67'\]\((_0x[a-f0-9]{4,6})\)/); - const objectIdentifierMatch: RegExpMatchArray|null = obfuscatedCode - .match(/return\{'\\x74':(_0x[a-f0-9]{4,6})\}/); - const variableDeclarationIdentifierMatch: RegExpMatchArray|null = obfuscatedCode - .match(/var *(_0x[a-f0-9]{4,6});/); + it('should correct transform variables inside outer function body', () => { + assert.equal(outerFunctionParamIdentifierName, objectIdentifierName); + assert.equal(outerFunctionParamIdentifierName, variableDeclarationIdentifierName); + }); - functionParamIdentifierName = (functionParamIdentifierMatch)[1]; - innerFunctionParamIdentifierName = (innerFunctionParamIdentifierMatch)[1]; - constructorIdentifierName = (constructorIdentifierMatch)[1]; - objectIdentifierName = (objectIdentifierMatch)[1]; - variableDeclarationIdentifierName = (variableDeclarationIdentifierMatch)[1]; + it('should correct transform variables inside inner function body', () => { + assert.equal(innerFunctionParamIdentifierName, constructorIdentifierName); + }); + it('should keep equal names after transformation for variables with same names', () => { + assert.equal(variableDeclarationIdentifierName, objectIdentifierName); + }); + }); + + describe(`variable calls before variable declaration when catch clause param has the same name as variables name`, () => { + const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate( + readFileAsString(__dirname + '/fixtures/variable-call-before-variable-declaration-3.js'), + { + ...NO_CUSTOM_NODES_PRESET + } + ); + const obfuscatedCode: string = obfuscationResult.getObfuscatedCode(); + + const catchClauseParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/catch *\((_0x[a-f0-9]{4,6})\) *\{/); + const innerFunctionParamIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/function _0x[a-f0-9]{4,6} *\((_0x[a-f0-9]{4,6})\) *\{/); + const constructorIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/console\['\\x6c\\x6f\\x67'\]\((_0x[a-f0-9]{4,6})\)/); + const objectIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/return\{'\\x74':(_0x[a-f0-9]{4,6})\}/); + const variableDeclarationIdentifierMatch: RegExpMatchArray|null = obfuscatedCode + .match(/var *(_0x[a-f0-9]{4,6});/); + + const functionParamIdentifierName: string|null = (catchClauseParamIdentifierMatch)[1]; + const innerFunctionParamIdentifierName: string|null = (innerFunctionParamIdentifierMatch)[1]; + const constructorIdentifierName: string|null = (constructorIdentifierMatch)[1]; + const objectIdentifierName: string|null = (objectIdentifierMatch)[1]; + const variableDeclarationIdentifierName: string|null = (variableDeclarationIdentifierMatch)[1]; + + it('should\'t name variables inside inner function with names from catch clause param', () => { assert.notEqual(functionParamIdentifierName, constructorIdentifierName); assert.notEqual(functionParamIdentifierName, innerFunctionParamIdentifierName); + }); + it('should correct transform variables inside catch clause body', () => { assert.equal(functionParamIdentifierName, objectIdentifierName); assert.equal(functionParamIdentifierName, variableDeclarationIdentifierName); + }); + it('should correct transform variables inside inner function body', () => { assert.equal(innerFunctionParamIdentifierName, constructorIdentifierName); + }); + + it('should keep equal names after transformation for variables with same names', () => { assert.equal(variableDeclarationIdentifierName, objectIdentifierName); }); }); diff --git a/test/functional-tests/node-transformers/obfuscation-transformers/variable-declaration-transformer/fixtures/variable-call-before-variable-declaration-3.js b/test/functional-tests/node-transformers/obfuscation-transformers/variable-declaration-transformer/fixtures/variable-call-before-variable-declaration-3.js new file mode 100644 index 00000000..d2003cf2 --- /dev/null +++ b/test/functional-tests/node-transformers/obfuscation-transformers/variable-declaration-transformer/fixtures/variable-call-before-variable-declaration-3.js @@ -0,0 +1,14 @@ +(function () { + try { + + } catch (t) { + return function () { + function baz (t) { + console.log(t); + } + + return {t: t}; + var t; + }(); + } +})(); \ No newline at end of file