From 5c1278124fd0eaaf11b6f4e144806b54a732d9b2 Mon Sep 17 00:00:00 2001 From: Marco Sciortino Date: Mon, 26 Aug 2024 22:02:08 +0100 Subject: [PATCH] Added test to show reservedName option works inconsistently with functions defined within classes --- .../JavaScriptObfuscator.spec.ts | 35 +++++++++++++++++++ .../fixtures/class-with-function.js | 6 ++++ 2 files changed, 41 insertions(+) create mode 100644 test/functional-tests/javascript-obfuscator/fixtures/class-with-function.js diff --git a/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts b/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts index e264a30f..ae2c20e1 100644 --- a/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts +++ b/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts @@ -95,6 +95,41 @@ describe('JavaScriptObfuscator', () => { }); }); + describe('class function not obfuscated if option "reservedNames', () => { + let obfuscations: string[]; + + beforeEach(() => { + obfuscations = [] + const code: string = readFileAsString(__dirname + '/fixtures/class-with-function.js'); + for (let i = 0; i < 100; i++) { + const obfuscatedCode:string = JavaScriptObfuscator.obfuscate( + code, + { + controlFlowFlattening: true, + deadCodeInjection: true, + reservedNames: ['bar'] + } + ).getObfuscatedCode(); + + obfuscations.push(obfuscatedCode) + } + }); + + it('class should always have "bar" function not obfuscated', () => { + let obfuscated: number = 0; + let notObfuscated: number = 0; + for (const codeAsString of obfuscations) { + if (codeAsString.includes("['bar']")) { notObfuscated++; } + else { obfuscated++; } + + } + + console.log({obfuscated, notObfuscated}) + assert.equal(obfuscated, 0) + assert.equal(notObfuscated, obfuscations.length) + }); + }); + describe('invalid source code type', () => { let obfuscatedCode: string; diff --git a/test/functional-tests/javascript-obfuscator/fixtures/class-with-function.js b/test/functional-tests/javascript-obfuscator/fixtures/class-with-function.js new file mode 100644 index 00000000..a05cc8cd --- /dev/null +++ b/test/functional-tests/javascript-obfuscator/fixtures/class-with-function.js @@ -0,0 +1,6 @@ +class Foo{ + bar(){ + console.log(1) + baz() + } +} \ No newline at end of file