Browse Source

CatchClause obfuscator ObjectPattern fix

sanex3339 8 years ago
parent
commit
5addfa0b72

+ 4 - 0
CHANGELOG.md

@@ -1,5 +1,9 @@
 Change Log
 ===
+v0.8.5
+---
+* fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/29
+
 v0.8.4
 ---
 * fixed https://github.com/javascript-obfuscator/webpack-obfuscator/issues/13

+ 15 - 31
dist/index.js

@@ -5521,10 +5521,8 @@ var inversify_1 = __webpack_require__(2);
 var ServiceIdentifiers_1 = __webpack_require__(4);
 var estraverse = __webpack_require__(18);
 var NodeObfuscationReplacers_1 = __webpack_require__(20);
-var NodeType_1 = __webpack_require__(15);
 var AbstractNodeTransformer_1 = __webpack_require__(17);
 var Node_1 = __webpack_require__(12);
-var NodeUtils_1 = __webpack_require__(8);
 var CatchClauseTransformer = function (_AbstractNodeTransfor) {
     (0, _inherits3.default)(CatchClauseTransformer, _AbstractNodeTransfor);
 
@@ -5548,23 +5546,23 @@ var CatchClauseTransformer = function (_AbstractNodeTransfor) {
     }, {
         key: "storeCatchClauseParam",
         value: function storeCatchClauseParam(catchClauseNode, nodeIdentifier) {
-            var _this2 = this;
-
-            NodeUtils_1.NodeUtils.typedTraverse(catchClauseNode.param, NodeType_1.NodeType.Identifier, {
-                enter: function enter(node) {
-                    return _this2.identifierReplacer.storeNames(node.name, nodeIdentifier);
-                }
-            });
+            if (Node_1.Node.isIdentifierNode(catchClauseNode.param)) {
+                this.identifierReplacer.storeNames(catchClauseNode.param.name, nodeIdentifier);
+            }
         }
     }, {
         key: "replaceCatchClauseParam",
         value: function replaceCatchClauseParam(catchClauseNode, nodeIdentifier) {
-            var _this3 = this;
+            var _this2 = this;
 
             estraverse.replace(catchClauseNode, {
                 enter: function enter(node, parentNode) {
                     if (Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) {
-                        node.name = _this3.identifierReplacer.replace(node.name, nodeIdentifier);
+                        var newNodeName = _this2.identifierReplacer.replace(node.name, nodeIdentifier);
+                        if (node.name !== newNodeName) {
+                            node.name = newNodeName;
+                            node.obfuscated = true;
+                        }
                     }
                 }
             });
@@ -5649,18 +5647,12 @@ var FunctionDeclarationTransformer = function (_AbstractNodeTransfor) {
     }, {
         key: "storeFunctionName",
         value: function storeFunctionName(functionDeclarationNode, nodeIdentifier) {
-            var _this2 = this;
-
-            NodeUtils_1.NodeUtils.typedTraverse(functionDeclarationNode.id, NodeType_1.NodeType.Identifier, {
-                enter: function enter(node) {
-                    return _this2.identifierReplacer.storeNames(node.name, nodeIdentifier);
-                }
-            });
+            this.identifierReplacer.storeNames(functionDeclarationNode.id.name, nodeIdentifier);
         }
     }, {
         key: "replaceFunctionName",
         value: function replaceFunctionName(scopeNode, nodeIdentifier) {
-            var _this3 = this;
+            var _this2 = this;
 
             var replaceableIdentifiersForCurrentScope = void 0;
             if (this.replaceableIdentifiers.has(scopeNode)) {
@@ -5696,7 +5688,7 @@ var FunctionDeclarationTransformer = function (_AbstractNodeTransfor) {
             estraverse.replace(scopeNode, {
                 enter: function enter(node, parentNode) {
                     if (Node_1.Node.isReplaceableIdentifierNode(node, parentNode)) {
-                        var newNodeName = _this3.identifierReplacer.replace(node.name, nodeIdentifier);
+                        var newNodeName = _this2.identifierReplacer.replace(node.name, nodeIdentifier);
                         if (node.name !== newNodeName) {
                             node.name = newNodeName;
                         } else {
@@ -5841,10 +5833,8 @@ var inversify_1 = __webpack_require__(2);
 var ServiceIdentifiers_1 = __webpack_require__(4);
 var estraverse = __webpack_require__(18);
 var NodeObfuscationReplacers_1 = __webpack_require__(20);
-var NodeType_1 = __webpack_require__(15);
 var AbstractNodeTransformer_1 = __webpack_require__(17);
 var Node_1 = __webpack_require__(12);
-var NodeUtils_1 = __webpack_require__(8);
 var LabeledStatementTransformer = function (_AbstractNodeTransfor) {
     (0, _inherits3.default)(LabeledStatementTransformer, _AbstractNodeTransfor);
 
@@ -5868,23 +5858,17 @@ var LabeledStatementTransformer = function (_AbstractNodeTransfor) {
     }, {
         key: "storeLabeledStatementName",
         value: function storeLabeledStatementName(labeledStatementNode, nodeIdentifier) {
-            var _this2 = this;
-
-            NodeUtils_1.NodeUtils.typedTraverse(labeledStatementNode.label, NodeType_1.NodeType.Identifier, {
-                enter: function enter(node) {
-                    return _this2.identifierReplacer.storeNames(node.name, nodeIdentifier);
-                }
-            });
+            this.identifierReplacer.storeNames(labeledStatementNode.label.name, nodeIdentifier);
         }
     }, {
         key: "replaceLabeledStatementName",
         value: function replaceLabeledStatementName(labeledStatementNode, nodeIdentifier) {
-            var _this3 = this;
+            var _this2 = this;
 
             estraverse.replace(labeledStatementNode, {
                 enter: function enter(node, parentNode) {
                     if (Node_1.Node.isLabelIdentifierNode(node, parentNode)) {
-                        node.name = _this3.identifierReplacer.replace(node.name, nodeIdentifier);
+                        node.name = _this2.identifierReplacer.replace(node.name, nodeIdentifier);
                     }
                 }
             });

+ 9 - 6
src/node-transformers/obfuscation-transformers/CatchClauseTransformer.ts

@@ -9,11 +9,9 @@ import { IObfuscationReplacer } from '../../interfaces/node-transformers/IObfusc
 import { IObfuscationReplacerWithStorage } from '../../interfaces/node-transformers/IObfuscationReplacerWithStorage';
 
 import { NodeObfuscatorsReplacers } from '../../enums/container/NodeObfuscationReplacers';
-import { NodeType } from '../../enums/NodeType';
 
 import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
 import { Node } from '../../node/Node';
-import { NodeUtils } from '../../node/NodeUtils';
 
 /**
  * replaces:
@@ -61,9 +59,9 @@ export class CatchClauseTransformer extends AbstractNodeTransformer {
      * @param nodeIdentifier
      */
     private storeCatchClauseParam (catchClauseNode: ESTree.CatchClause, nodeIdentifier: number): void {
-        NodeUtils.typedTraverse(catchClauseNode.param, NodeType.Identifier, {
-            enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name, nodeIdentifier)
-        });
+        if (Node.isIdentifierNode(catchClauseNode.param)) {
+            this.identifierReplacer.storeNames(catchClauseNode.param.name, nodeIdentifier);
+        }
     }
 
     /**
@@ -74,7 +72,12 @@ export class CatchClauseTransformer extends AbstractNodeTransformer {
         estraverse.replace(catchClauseNode, {
             enter: (node: ESTree.Node, parentNode: ESTree.Node): any => {
                 if (Node.isReplaceableIdentifierNode(node, parentNode)) {
-                    node.name = this.identifierReplacer.replace(node.name, nodeIdentifier);
+                    const newNodeName: string = this.identifierReplacer.replace(node.name, nodeIdentifier);
+
+                    if (node.name !== newNodeName) {
+                        node.name = newNodeName;
+                        node.obfuscated = true;
+                    }
                 }
             }
         });

+ 1 - 3
src/node-transformers/obfuscation-transformers/FunctionDeclarationTransformer.ts

@@ -76,9 +76,7 @@ export class FunctionDeclarationTransformer extends AbstractNodeTransformer {
      * @param nodeIdentifier
      */
     private storeFunctionName (functionDeclarationNode: ESTree.FunctionDeclaration, nodeIdentifier: number): void {
-        NodeUtils.typedTraverse(functionDeclarationNode.id, NodeType.Identifier, {
-            enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name, nodeIdentifier)
-        });
+        this.identifierReplacer.storeNames(functionDeclarationNode.id.name, nodeIdentifier);
     }
 
     /**

+ 1 - 5
src/node-transformers/obfuscation-transformers/LabeledStatementTransformer.ts

@@ -9,11 +9,9 @@ import { IObfuscationReplacer } from '../../interfaces/node-transformers/IObfusc
 import { IObfuscationReplacerWithStorage } from '../../interfaces/node-transformers/IObfuscationReplacerWithStorage';
 
 import { NodeObfuscatorsReplacers } from '../../enums/container/NodeObfuscationReplacers';
-import { NodeType } from '../../enums/NodeType';
 
 import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
 import { Node } from '../../node/Node';
-import { NodeUtils } from '../../node/NodeUtils';
 
 /**
  * replaces:
@@ -69,9 +67,7 @@ export class LabeledStatementTransformer extends AbstractNodeTransformer {
      * @param nodeIdentifier
      */
     private storeLabeledStatementName (labeledStatementNode: ESTree.LabeledStatement, nodeIdentifier: number): void {
-        NodeUtils.typedTraverse(labeledStatementNode.label, NodeType.Identifier, {
-            enter: (node: ESTree.Identifier) => this.identifierReplacer.storeNames(node.name, nodeIdentifier)
-        });
+        this.identifierReplacer.storeNames(labeledStatementNode.label.name, nodeIdentifier);
     }
 
     /**

+ 1 - 1
test/functional-tests/node-transformers/obfuscation-transformers/variable-declaration-transformer/VariableDeclarationTransformer.spec.ts

@@ -147,7 +147,7 @@ describe('VariableDeclarationTransformer', () => {
         });
     });
 
-    describe('object pattern as argument', () => {
+    describe('object pattern as variable declarator', () => {
         const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
             readFileAsString(__dirname + '/fixtures/object-pattern.js'),
             {