sanex3339 9 år sedan
förälder
incheckning
8b2c1e1c84

+ 1 - 11
src/NodeUtils.js

@@ -18,17 +18,7 @@ class NodeUtils {
             return NodeUtils.getNodeScope(node.parentNode, --deep);
         }
         if (node.type !== 'BlockStatement') {
-            let blockStatementNode;
-            estraverse.traverse(node, {
-                enter: function (node, parent) {
-                    switch (node.type) {
-                        case 'BlockStatement':
-                            blockStatementNode = node;
-                            this['break']();
-                    }
-                }
-            });
-            return blockStatementNode;
+            return NodeUtils.getNodeScope(node.parentNode);
         }
         return node;
     }

+ 1 - 14
src/NodeUtils.ts

@@ -26,20 +26,7 @@ export class NodeUtils {
         }
 
         if (node.type !== 'BlockStatement') {
-            let blockStatementNode: any;
-
-            estraverse.traverse(node, {
-                enter: function (node, parent) {
-                    switch (node.type) {
-                        case 'BlockStatement':
-                            blockStatementNode = node;
-
-                            this['break']();
-                    }
-                }
-            });
-
-            return blockStatementNode;
+            return NodeUtils.getNodeScope(node.parentNode);
         }
 
         return node; // BlockStatement of scopeNodes

+ 12 - 8
src/Obfuscator.js

@@ -44,8 +44,10 @@ class Obfuscator {
         }
         this.beforeObfuscation(node);
         estraverse.replace(node, {
-            enter: (node, parent) => this.nodeControllerEnter(node, parent),
-            leave: (node, parent) => this.nodeControllerLeave(node, parent)
+            enter: (node, parent) => this.nodeControllerFirstPass(node, parent)
+        });
+        estraverse.replace(node, {
+            leave: (node, parent) => this.nodeControllerSecondPass(node, parent)
         });
         this.afterObfuscation(node);
     }
@@ -73,13 +75,15 @@ class Obfuscator {
         });
     }
     ;
-    nodeControllerEnter(node, parent) {
-        switch (node.type) {
-            default:
-                node.parentNode = parent;
-        }
+    nodeControllerFirstPass(node, parent) {
+        Object.defineProperty(node, 'parentNode', {
+            enumerable: true,
+            configurable: true,
+            writable: true,
+            value: parent || node
+        });
     }
-    nodeControllerLeave(node, parent) {
+    nodeControllerSecondPass(node, parent) {
         switch (node.type) {
             default:
                 this.initializeNodeObfuscators(node, parent);

+ 13 - 8
src/Obfuscator.ts

@@ -73,8 +73,11 @@ export class Obfuscator {
         this.beforeObfuscation(node);
 
         estraverse.replace(node, {
-            enter: (node, parent) => this.nodeControllerEnter(node, parent),
-            leave: (node, parent) => this.nodeControllerLeave(node, parent)
+            enter: (node, parent) => this.nodeControllerFirstPass(node, parent)
+        });
+
+        estraverse.replace(node, {
+            leave: (node, parent) => this.nodeControllerSecondPass(node, parent)
         });
 
         this.afterObfuscation(node);
@@ -125,18 +128,20 @@ export class Obfuscator {
      * @param node
      * @param parent
      */
-    private nodeControllerEnter (node, parent): void {
-        switch (node.type) {
-            default:
-                node.parentNode = parent;
-        }
+    private nodeControllerFirstPass (node, parent): void {
+        Object.defineProperty(node, 'parentNode', {
+            enumerable: true,
+            configurable: true,
+            writable: true,
+            value: parent || node
+        });
     }
 
     /**
      * @param node
      * @param parent
      */
-    private nodeControllerLeave (node, parent): void {
+    private nodeControllerSecondPass (node, parent): void {
         switch (node.type) {
             default:
                 this.initializeNodeObfuscators(node, parent);

+ 1 - 1
src/node-obfuscators/CatchClauseObfuscator.js

@@ -15,7 +15,7 @@ class CatchClauseObfuscator extends NodeObfuscator_1.NodeObfuscator {
         estraverse.replace(catchClauseNode.param, {
             leave: (node, parentNode) => {
                 if (node.type !== 'Identifier') {
-                    return;
+                    return estraverse.VisitorOption.Skip;
                 }
                 this.catchClauseParam.set(node.name, Utils_1.Utils.getRandomVariableName());
                 node.name = this.catchClauseParam.get(node.name);

+ 1 - 1
src/node-obfuscators/CatchClauseObfuscator.ts

@@ -32,7 +32,7 @@ export class CatchClauseObfuscator extends NodeObfuscator {
         estraverse.replace(catchClauseNode.param, {
             leave: (node, parentNode) => {
                 if (node.type !== 'Identifier') {
-                    return;
+                    return estraverse.VisitorOption.Skip;
                 }
 
                 this.catchClauseParam.set(node.name, Utils.getRandomVariableName());

+ 1 - 1
src/node-obfuscators/FunctionDeclarationObfuscator.js

@@ -19,7 +19,7 @@ class FunctionDeclarationObfuscator extends NodeObfuscator_1.NodeObfuscator {
         estraverse.replace(functionDeclarationNode.id, {
             leave: (node) => {
                 if (node.type !== 'Identifier') {
-                    return;
+                    return estraverse.VisitorOption.Skip;
                 }
                 this.functionName.set(node.name, Utils_1.Utils.getRandomVariableName());
                 node.name = this.functionName.get(node.name);

+ 1 - 1
src/node-obfuscators/FunctionDeclarationObfuscator.ts

@@ -39,7 +39,7 @@ export class FunctionDeclarationObfuscator extends NodeObfuscator {
         estraverse.replace(functionDeclarationNode.id, {
             leave: (node) => {
                 if (node.type !== 'Identifier') {
-                    return;
+                    return estraverse.VisitorOption.Skip;
                 }
 
                 this.functionName.set(node.name, Utils.getRandomVariableName());

+ 1 - 1
src/node-obfuscators/FunctionObfuscator.js

@@ -16,7 +16,7 @@ class FunctionObfuscator extends NodeObfuscator_1.NodeObfuscator {
             estraverse.replace(paramsNode, {
                 leave: (node) => {
                     if (node.type !== 'Identifier') {
-                        return;
+                        return estraverse.VisitorOption.Skip;
                     }
                     this.functionParams.set(node.name, Utils_1.Utils.getRandomVariableName());
                     node.name = this.functionParams.get(node.name);

+ 1 - 1
src/node-obfuscators/FunctionObfuscator.ts

@@ -33,7 +33,7 @@ export class FunctionObfuscator extends NodeObfuscator {
             estraverse.replace(paramsNode, {
                 leave: (node) => {
                     if (node.type !== 'Identifier') {
-                       return;
+                        return estraverse.VisitorOption.Skip;
                     }
 
                     this.functionParams.set(node.name, Utils.getRandomVariableName());

+ 1 - 1
src/node-obfuscators/MethodDefinitionObfuscator.js

@@ -16,7 +16,7 @@ class MethodDefinitionObfuscator extends NodeObfuscator_1.NodeObfuscator {
                 if (node.type !== 'Identifier' ||
                     this.ignoredNames.indexOf(node.name) >= 0 ||
                     methodDefinitionNode.computed === true) {
-                    return;
+                    return estraverse.VisitorOption.Skip;
                 }
                 methodDefinitionNode.computed = true;
                 node.name = this.replaceLiteralStringByArrayElement(node.name);

+ 1 - 1
src/node-obfuscators/MethodDefinitionObfuscator.ts

@@ -42,7 +42,7 @@ export class MethodDefinitionObfuscator extends NodeObfuscator {
                     this.ignoredNames.indexOf(node.name) >= 0 ||
                     methodDefinitionNode.computed === true
                 ) {
-                    return;
+                    return estraverse.VisitorOption.Skip;
                 }
 
                 methodDefinitionNode.computed = true;

+ 4 - 2
src/node-obfuscators/VariableDeclarationObfuscator.js

@@ -20,7 +20,7 @@ class VariableDeclarationObfuscator extends NodeObfuscator_1.NodeObfuscator {
             estraverse.replace(declarationNode, {
                 enter: (node) => {
                     if (node.type !== 'VariableDeclarator') {
-                        return;
+                        return estraverse.VisitorOption.Skip;
                     }
                     estraverse.replace(node.id, {
                         enter: (node) => {
@@ -43,7 +43,9 @@ class VariableDeclarationObfuscator extends NodeObfuscator_1.NodeObfuscator {
         let isNodeAfterVariableDeclaratorFlag = false, isNodeBeforeVariableDeclaratorFlag = true, functionParentScope, functionNextNode, functionIndex = -1;
         estraverse.replace(scopeNode, {
             enter: (node, parentNode) => {
-                if (node.parentNode && (node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression')) {
+                if (node.type === 'FunctionDeclaration' ||
+                    node.type === 'FunctionExpression' ||
+                    node.type === 'ArrowFunctionExpression') {
                     functionParentScope = NodeUtils_1.NodeUtils.getNodeScope(node);
                     functionIndex = functionParentScope.body.indexOf(node);
                     if (functionIndex >= 0) {

+ 6 - 2
src/node-obfuscators/VariableDeclarationObfuscator.ts

@@ -41,7 +41,7 @@ export class VariableDeclarationObfuscator extends NodeObfuscator {
             estraverse.replace(declarationNode, {
                 enter: (node) => {
                     if (node.type !== 'VariableDeclarator') {
-                        return;
+                        return estraverse.VisitorOption.Skip;
                     }
 
                     estraverse.replace(node.id, {
@@ -78,7 +78,11 @@ export class VariableDeclarationObfuscator extends NodeObfuscator {
 
         estraverse.replace(scopeNode, {
             enter: (node, parentNode) => {
-                if (node.parentNode && (node.type === 'FunctionDeclaration' || node.type === 'FunctionExpression')) {
+                if (
+                    node.type === 'FunctionDeclaration' ||
+                    node.type === 'FunctionExpression' ||
+                    node.type === 'ArrowFunctionExpression'
+                ) {
                     functionParentScope = NodeUtils.getNodeScope(
                         node
                     );