瀏覽代碼

Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/217

sanex3339 7 年之前
父節點
當前提交
a5a4239463

+ 1 - 0
CHANGELOG.md

@@ -4,6 +4,7 @@ v0.15.0
 ---
 * **Breaking change:** dropped `node@4` and `node@5` support.
 * **New CLI option:** `exclude` allows to exclude specific files or directories from obfuscation.
+* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/217
 * Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/210
 
 v0.14.3

File diff suppressed because it is too large
+ 0 - 0
dist/index.js


+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "javascript-obfuscator",
-  "version": "0.15.0-dev.2",
+  "version": "0.15.0-dev.3",
   "description": "JavaScript obfuscator",
   "keywords": [
     "obfuscator",

+ 2 - 1
src/node-transformers/obfuscating-transformers/FunctionDeclarationTransformer.ts

@@ -167,13 +167,14 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer {
 
         estraverse.replace(blockScopeNode, {
             enter: (node: ESTree.Node, parentNode: ESTree.Node | null): void => {
-                if (parentNode && NodeGuards.isReplaceableIdentifierNode(node, parentNode)) {
+                if (parentNode && !node.obfuscatedNode && NodeGuards.isReplaceableIdentifierNode(node, parentNode)) {
                     const newIdentifier: ESTree.Identifier = this.identifierObfuscatingReplacer
                         .replace(node.name, nodeIdentifier);
                     const newIdentifierName: string = newIdentifier.name;
 
                     if (node.name !== newIdentifierName) {
                         node.name = newIdentifierName;
+                        node.obfuscatedNode = true;
                     } else {
                         const storedReplaceableIdentifiers: ESTree.Identifier[] = storedReplaceableIdentifiersNamesMap.get(node.name) || [];
 

+ 1 - 0
src/node-transformers/obfuscating-transformers/VariableDeclarationTransformer.ts

@@ -192,6 +192,7 @@ export class VariableDeclarationTransformer extends AbstractNodeTransformer {
 
                     if (node.name !== newIdentifierName) {
                         node.name = newIdentifierName;
+                        node.obfuscatedNode = true;
                     } else {
                         const storedReplaceableIdentifiers: ESTree.Identifier[] = storedReplaceableIdentifiersNamesMap.get(node.name) || [];
 

+ 5 - 26
test/dev/dev.ts

@@ -6,38 +6,17 @@ import { NO_ADDITIONAL_NODES_PRESET } from '../../src/options/presets/NoCustomNo
 
     let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
         `
-        (function(){
-            function foo () {
-                var a = 1;
-                inner1();
-                var b = 2;
-                function inner1 () {}
-                var c = 3;
-            }
-            function bar () {
-                var a = 1;
-            }
-            function baz () {
-                var a = 1;
-            }
-            function bark () {
-                var a = 1;
-            }
-            function hawk () {
-                var a = 1;
-            }
-            function eagle () {
-                var a = 1;
+        (function() {        
+            function test() {
+                function func1() {}
+                let a, b, c, d, e;
             }
         })();
         `,
         {
             ...NO_ADDITIONAL_NODES_PRESET,
             compact: false,
-            stringArray: true,
-            stringArrayThreshold: 1,
-            deadCodeInjection: true,
-            deadCodeInjectionThreshold: 1
+            identifierNamesGenerator: 'mangled'
         }
     ).getObfuscatedCode();
 

+ 30 - 0
test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts

@@ -7,6 +7,8 @@ import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/N
 import { getRegExpMatch } from '../../../../helpers/getRegExpMatch';
 import { readFileAsString } from '../../../../helpers/readFileAsString';
 
+import { IdentifierNamesGenerator } from '../../../../../src/enums/generators/identifier-names-generators/IdentifierNamesGenerator';
+
 import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFacade';
 
 describe('VariableDeclarationTransformer', () => {
@@ -435,4 +437,32 @@ describe('VariableDeclarationTransformer', () => {
             assert.match(obfuscatedCode, regExp);
         });
     });
+
+    describe('Variant #13: renamed identifiers shouldn\'t be renamed twice', () => {
+        const functionRegExp: RegExp = /function *d\(\) *{/;
+        const variableDeclarationsRegExp: RegExp = /let *e, *f, *g, *h;/;
+
+        let obfuscatedCode: string;
+
+        before(() => {
+            const code: string = readFileAsString(__dirname + '/fixtures/prevent-renaming-of-renamed-identifiers.js');
+            const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
+                code,
+                {
+                    ...NO_ADDITIONAL_NODES_PRESET,
+                    identifierNamesGenerator: IdentifierNamesGenerator.MangledIdentifierNamesGenerator
+                }
+            );
+
+            obfuscatedCode = obfuscationResult.getObfuscatedCode();
+        });
+
+        it('Match #1: shouldn\'t rename twice function declaration name', () => {
+            assert.match(obfuscatedCode, functionRegExp);
+        });
+
+        it('Match #2: should correctly rename variable declarations', () => {
+            assert.match(obfuscatedCode, variableDeclarationsRegExp);
+        });
+    });
 });

+ 6 - 0
test/functional-tests/node-transformers/obfuscating-transformers/variable-declaration-transformer/fixtures/prevent-renaming-of-renamed-identifiers.js

@@ -0,0 +1,6 @@
+(function() {
+    function test() {
+        function inner() {}
+        let a, b, c, d;
+    }
+})();

Some files were not shown because too many files changed in this diff