Quellcode durchsuchen

IdentifierReplacer temp workaround with runtime crash because we caching node transformers

sanex3339 vor 8 Jahren
Ursprung
Commit
129dd25388

+ 32 - 2
dist/index.js

@@ -3541,6 +3541,7 @@ var NodeType_1 = __webpack_require__(9);
 var AbstractNodeTransformer_1 = __webpack_require__(11);
 var AbstractNodeTransformer_1 = __webpack_require__(11);
 var Node_1 = __webpack_require__(4);
 var Node_1 = __webpack_require__(4);
 var NodeUtils_1 = __webpack_require__(10);
 var NodeUtils_1 = __webpack_require__(10);
+var Utils_1 = __webpack_require__(0);
 var CatchClauseObfuscator = function (_AbstractNodeTransfor) {
 var CatchClauseObfuscator = function (_AbstractNodeTransfor) {
     _inherits(CatchClauseObfuscator, _AbstractNodeTransfor);
     _inherits(CatchClauseObfuscator, _AbstractNodeTransfor);
 
 
@@ -3556,6 +3557,10 @@ var CatchClauseObfuscator = function (_AbstractNodeTransfor) {
     _createClass(CatchClauseObfuscator, [{
     _createClass(CatchClauseObfuscator, [{
         key: "transformNode",
         key: "transformNode",
         value: function transformNode(catchClauseNode) {
         value: function transformNode(catchClauseNode) {
+            this.identifierReplacer.setPrefix(Utils_1.Utils.getRandomGenerator().string({
+                length: 5,
+                pool: Utils_1.Utils.randomGeneratorPool
+            }));
             this.storeCatchClauseParam(catchClauseNode);
             this.storeCatchClauseParam(catchClauseNode);
             this.replaceCatchClauseParam(catchClauseNode);
             this.replaceCatchClauseParam(catchClauseNode);
         }
         }
@@ -3631,6 +3636,7 @@ var NodeType_1 = __webpack_require__(9);
 var AbstractNodeTransformer_1 = __webpack_require__(11);
 var AbstractNodeTransformer_1 = __webpack_require__(11);
 var Node_1 = __webpack_require__(4);
 var Node_1 = __webpack_require__(4);
 var NodeUtils_1 = __webpack_require__(10);
 var NodeUtils_1 = __webpack_require__(10);
+var Utils_1 = __webpack_require__(0);
 var FunctionDeclarationObfuscator = function (_AbstractNodeTransfor) {
 var FunctionDeclarationObfuscator = function (_AbstractNodeTransfor) {
     _inherits(FunctionDeclarationObfuscator, _AbstractNodeTransfor);
     _inherits(FunctionDeclarationObfuscator, _AbstractNodeTransfor);
 
 
@@ -3646,6 +3652,10 @@ var FunctionDeclarationObfuscator = function (_AbstractNodeTransfor) {
     _createClass(FunctionDeclarationObfuscator, [{
     _createClass(FunctionDeclarationObfuscator, [{
         key: "transformNode",
         key: "transformNode",
         value: function transformNode(functionDeclarationNode, parentNode) {
         value: function transformNode(functionDeclarationNode, parentNode) {
+            this.identifierReplacer.setPrefix(Utils_1.Utils.getRandomGenerator().string({
+                length: 5,
+                pool: Utils_1.Utils.randomGeneratorPool
+            }));
             var blockScopeOfFunctionDeclarationNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(functionDeclarationNode);
             var blockScopeOfFunctionDeclarationNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(functionDeclarationNode);
             if (blockScopeOfFunctionDeclarationNode.type === NodeType_1.NodeType.Program) {
             if (blockScopeOfFunctionDeclarationNode.type === NodeType_1.NodeType.Program) {
                 return;
                 return;
@@ -3725,6 +3735,7 @@ var NodeType_1 = __webpack_require__(9);
 var AbstractNodeTransformer_1 = __webpack_require__(11);
 var AbstractNodeTransformer_1 = __webpack_require__(11);
 var Node_1 = __webpack_require__(4);
 var Node_1 = __webpack_require__(4);
 var NodeUtils_1 = __webpack_require__(10);
 var NodeUtils_1 = __webpack_require__(10);
+var Utils_1 = __webpack_require__(0);
 var FunctionObfuscator = function (_AbstractNodeTransfor) {
 var FunctionObfuscator = function (_AbstractNodeTransfor) {
     _inherits(FunctionObfuscator, _AbstractNodeTransfor);
     _inherits(FunctionObfuscator, _AbstractNodeTransfor);
 
 
@@ -3740,6 +3751,10 @@ var FunctionObfuscator = function (_AbstractNodeTransfor) {
     _createClass(FunctionObfuscator, [{
     _createClass(FunctionObfuscator, [{
         key: "transformNode",
         key: "transformNode",
         value: function transformNode(functionNode) {
         value: function transformNode(functionNode) {
+            this.identifierReplacer.setPrefix(Utils_1.Utils.getRandomGenerator().string({
+                length: 5,
+                pool: Utils_1.Utils.randomGeneratorPool
+            }));
             this.storeFunctionParams(functionNode);
             this.storeFunctionParams(functionNode);
             this.replaceFunctionParams(functionNode);
             this.replaceFunctionParams(functionNode);
         }
         }
@@ -3825,6 +3840,7 @@ var NodeType_1 = __webpack_require__(9);
 var AbstractNodeTransformer_1 = __webpack_require__(11);
 var AbstractNodeTransformer_1 = __webpack_require__(11);
 var Node_1 = __webpack_require__(4);
 var Node_1 = __webpack_require__(4);
 var NodeUtils_1 = __webpack_require__(10);
 var NodeUtils_1 = __webpack_require__(10);
+var Utils_1 = __webpack_require__(0);
 var LabeledStatementObfuscator = function (_AbstractNodeTransfor) {
 var LabeledStatementObfuscator = function (_AbstractNodeTransfor) {
     _inherits(LabeledStatementObfuscator, _AbstractNodeTransfor);
     _inherits(LabeledStatementObfuscator, _AbstractNodeTransfor);
 
 
@@ -3840,6 +3856,10 @@ var LabeledStatementObfuscator = function (_AbstractNodeTransfor) {
     _createClass(LabeledStatementObfuscator, [{
     _createClass(LabeledStatementObfuscator, [{
         key: "transformNode",
         key: "transformNode",
         value: function transformNode(labeledStatementNode) {
         value: function transformNode(labeledStatementNode) {
+            this.identifierReplacer.setPrefix(Utils_1.Utils.getRandomGenerator().string({
+                length: 5,
+                pool: Utils_1.Utils.randomGeneratorPool
+            }));
             this.storeLabeledStatementName(labeledStatementNode);
             this.storeLabeledStatementName(labeledStatementNode);
             this.replaceLabeledStatementName(labeledStatementNode);
             this.replaceLabeledStatementName(labeledStatementNode);
         }
         }
@@ -4292,6 +4312,7 @@ var NodeType_1 = __webpack_require__(9);
 var AbstractNodeTransformer_1 = __webpack_require__(11);
 var AbstractNodeTransformer_1 = __webpack_require__(11);
 var Node_1 = __webpack_require__(4);
 var Node_1 = __webpack_require__(4);
 var NodeUtils_1 = __webpack_require__(10);
 var NodeUtils_1 = __webpack_require__(10);
+var Utils_1 = __webpack_require__(0);
 var VariableDeclarationObfuscator = function (_AbstractNodeTransfor) {
 var VariableDeclarationObfuscator = function (_AbstractNodeTransfor) {
     _inherits(VariableDeclarationObfuscator, _AbstractNodeTransfor);
     _inherits(VariableDeclarationObfuscator, _AbstractNodeTransfor);
 
 
@@ -4307,6 +4328,10 @@ var VariableDeclarationObfuscator = function (_AbstractNodeTransfor) {
     _createClass(VariableDeclarationObfuscator, [{
     _createClass(VariableDeclarationObfuscator, [{
         key: "transformNode",
         key: "transformNode",
         value: function transformNode(variableDeclarationNode, parentNode) {
         value: function transformNode(variableDeclarationNode, parentNode) {
+            this.identifierReplacer.setPrefix(Utils_1.Utils.getRandomGenerator().string({
+                length: 5,
+                pool: Utils_1.Utils.randomGeneratorPool
+            }));
             var blockScopeOfVariableDeclarationNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(variableDeclarationNode);
             var blockScopeOfVariableDeclarationNode = NodeUtils_1.NodeUtils.getBlockScopeOfNode(variableDeclarationNode);
             if (blockScopeOfVariableDeclarationNode.type === NodeType_1.NodeType.Program) {
             if (blockScopeOfVariableDeclarationNode.type === NodeType_1.NodeType.Program) {
                 return;
                 return;
@@ -4458,17 +4483,22 @@ var IdentifierReplacer = function (_AbstractReplacer_1$A) {
     _createClass(IdentifierReplacer, [{
     _createClass(IdentifierReplacer, [{
         key: "replace",
         key: "replace",
         value: function replace(nodeValue) {
         value: function replace(nodeValue) {
-            var obfuscatedIdentifierName = this.namesMap.get(nodeValue);
+            var obfuscatedIdentifierName = this.namesMap.get(nodeValue + "-" + this.uniquePrefix);
             if (!obfuscatedIdentifierName) {
             if (!obfuscatedIdentifierName) {
                 return nodeValue;
                 return nodeValue;
             }
             }
             return obfuscatedIdentifierName;
             return obfuscatedIdentifierName;
         }
         }
+    }, {
+        key: "setPrefix",
+        value: function setPrefix(uniquePrefix) {
+            this.uniquePrefix = uniquePrefix;
+        }
     }, {
     }, {
         key: "storeNames",
         key: "storeNames",
         value: function storeNames(nodeName) {
         value: function storeNames(nodeName) {
             if (!this.isReservedName(nodeName)) {
             if (!this.isReservedName(nodeName)) {
-                this.namesMap.set(nodeName, Utils_1.Utils.getRandomVariableName());
+                this.namesMap.set(nodeName + "-" + this.uniquePrefix, Utils_1.Utils.getRandomVariableName());
             }
             }
         }
         }
     }, {
     }, {

+ 6 - 0
src/node-transformers/node-obfuscators/CatchClauseObfuscator.ts

@@ -16,6 +16,7 @@ import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
 import { IdentifierReplacer } from './replacers/IdentifierReplacer';
 import { IdentifierReplacer } from './replacers/IdentifierReplacer';
 import { Node } from '../../node/Node';
 import { Node } from '../../node/Node';
 import { NodeUtils } from '../../node/NodeUtils';
 import { NodeUtils } from '../../node/NodeUtils';
+import { Utils } from '../../Utils';
 
 
 /**
 /**
  * replaces:
  * replaces:
@@ -51,6 +52,11 @@ export class CatchClauseObfuscator extends AbstractNodeTransformer {
      * @param catchClauseNode
      * @param catchClauseNode
      */
      */
     public transformNode (catchClauseNode: ESTree.CatchClause): void {
     public transformNode (catchClauseNode: ESTree.CatchClause): void {
+        this.identifierReplacer.setPrefix(Utils.getRandomGenerator().string({
+            length: 5,
+            pool: Utils.randomGeneratorPool
+        }));
+
         this.storeCatchClauseParam(catchClauseNode);
         this.storeCatchClauseParam(catchClauseNode);
         this.replaceCatchClauseParam(catchClauseNode);
         this.replaceCatchClauseParam(catchClauseNode);
     }
     }

+ 6 - 0
src/node-transformers/node-obfuscators/FunctionDeclarationObfuscator.ts

@@ -18,6 +18,7 @@ import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
 import { IdentifierReplacer } from './replacers/IdentifierReplacer';
 import { IdentifierReplacer } from './replacers/IdentifierReplacer';
 import { Node } from '../../node/Node';
 import { Node } from '../../node/Node';
 import { NodeUtils } from '../../node/NodeUtils';
 import { NodeUtils } from '../../node/NodeUtils';
+import { Utils } from '../../Utils';
 
 
 /**
 /**
  * replaces:
  * replaces:
@@ -55,6 +56,11 @@ export class FunctionDeclarationObfuscator extends AbstractNodeTransformer {
      * @param parentNode
      * @param parentNode
      */
      */
     public transformNode (functionDeclarationNode: ESTree.FunctionDeclaration, parentNode: ESTree.Node): void {
     public transformNode (functionDeclarationNode: ESTree.FunctionDeclaration, parentNode: ESTree.Node): void {
+        this.identifierReplacer.setPrefix(Utils.getRandomGenerator().string({
+            length: 5,
+            pool: Utils.randomGeneratorPool
+        }));
+
         const blockScopeOfFunctionDeclarationNode: TNodeWithBlockStatement = NodeUtils
         const blockScopeOfFunctionDeclarationNode: TNodeWithBlockStatement = NodeUtils
             .getBlockScopeOfNode(functionDeclarationNode);
             .getBlockScopeOfNode(functionDeclarationNode);
 
 

+ 6 - 0
src/node-transformers/node-obfuscators/FunctionObfuscator.ts

@@ -16,6 +16,7 @@ import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
 import { IdentifierReplacer } from './replacers/IdentifierReplacer';
 import { IdentifierReplacer } from './replacers/IdentifierReplacer';
 import { Node } from '../../node/Node';
 import { Node } from '../../node/Node';
 import { NodeUtils } from '../../node/NodeUtils';
 import { NodeUtils } from '../../node/NodeUtils';
+import { Utils } from '../../Utils';
 
 
 /**
 /**
  * replaces:
  * replaces:
@@ -51,6 +52,11 @@ export class FunctionObfuscator extends AbstractNodeTransformer {
      * @param functionNode
      * @param functionNode
      */
      */
     public transformNode (functionNode: ESTree.Function): void {
     public transformNode (functionNode: ESTree.Function): void {
+        this.identifierReplacer.setPrefix(Utils.getRandomGenerator().string({
+            length: 5,
+            pool: Utils.randomGeneratorPool
+        }));
+
         this.storeFunctionParams(functionNode);
         this.storeFunctionParams(functionNode);
         this.replaceFunctionParams(functionNode);
         this.replaceFunctionParams(functionNode);
     }
     }

+ 6 - 0
src/node-transformers/node-obfuscators/LabeledStatementObfuscator.ts

@@ -16,6 +16,7 @@ import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
 import { IdentifierReplacer } from './replacers/IdentifierReplacer';
 import { IdentifierReplacer } from './replacers/IdentifierReplacer';
 import { Node } from '../../node/Node';
 import { Node } from '../../node/Node';
 import { NodeUtils } from '../../node/NodeUtils';
 import { NodeUtils } from '../../node/NodeUtils';
+import { Utils } from '../../Utils';
 
 
 /**
 /**
  * replaces:
  * replaces:
@@ -59,6 +60,11 @@ export class LabeledStatementObfuscator extends AbstractNodeTransformer {
      * @param labeledStatementNode
      * @param labeledStatementNode
      */
      */
     public transformNode (labeledStatementNode: ESTree.LabeledStatement): void {
     public transformNode (labeledStatementNode: ESTree.LabeledStatement): void {
+        this.identifierReplacer.setPrefix(Utils.getRandomGenerator().string({
+            length: 5,
+            pool: Utils.randomGeneratorPool
+        }));
+
         this.storeLabeledStatementName(labeledStatementNode);
         this.storeLabeledStatementName(labeledStatementNode);
         this.replaceLabeledStatementName(labeledStatementNode);
         this.replaceLabeledStatementName(labeledStatementNode);
     }
     }

+ 6 - 0
src/node-transformers/node-obfuscators/VariableDeclarationObfuscator.ts

@@ -18,6 +18,7 @@ import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
 import { IdentifierReplacer } from './replacers/IdentifierReplacer';
 import { IdentifierReplacer } from './replacers/IdentifierReplacer';
 import { Node } from '../../node/Node';
 import { Node } from '../../node/Node';
 import { NodeUtils } from '../../node/NodeUtils';
 import { NodeUtils } from '../../node/NodeUtils';
+import { Utils } from '../../Utils';
 
 
 /**
 /**
  * replaces:
  * replaces:
@@ -56,6 +57,11 @@ export class VariableDeclarationObfuscator extends AbstractNodeTransformer {
      * @param parentNode
      * @param parentNode
      */
      */
     public transformNode (variableDeclarationNode: ESTree.VariableDeclaration, parentNode: ESTree.Node): void {
     public transformNode (variableDeclarationNode: ESTree.VariableDeclaration, parentNode: ESTree.Node): void {
+        this.identifierReplacer.setPrefix(Utils.getRandomGenerator().string({
+            length: 5,
+            pool: Utils.randomGeneratorPool
+        }));
+
         const blockScopeOfVariableDeclarationNode: TNodeWithBlockStatement = NodeUtils
         const blockScopeOfVariableDeclarationNode: TNodeWithBlockStatement = NodeUtils
             .getBlockScopeOfNode(variableDeclarationNode);
             .getBlockScopeOfNode(variableDeclarationNode);
 
 

+ 14 - 2
src/node-transformers/node-obfuscators/replacers/IdentifierReplacer.ts

@@ -15,6 +15,11 @@ export class IdentifierReplacer extends AbstractReplacer {
      */
      */
     private readonly namesMap: Map<string, string> = new Map<string, string>();
     private readonly namesMap: Map<string, string> = new Map<string, string>();
 
 
+    /**
+     * @type {string}
+     */
+    private uniquePrefix: string;
+
     /**
     /**
      * @param customNodesStorage
      * @param customNodesStorage
      * @param options
      * @param options
@@ -31,7 +36,7 @@ export class IdentifierReplacer extends AbstractReplacer {
      * @returns {string}
      * @returns {string}
      */
      */
     public replace (nodeValue: string): string {
     public replace (nodeValue: string): string {
-        const obfuscatedIdentifierName: string|undefined = this.namesMap.get(nodeValue);
+        const obfuscatedIdentifierName: string|undefined = this.namesMap.get(`${nodeValue}-${this.uniquePrefix}`);
 
 
         if (!obfuscatedIdentifierName) {
         if (!obfuscatedIdentifierName) {
             return nodeValue;
             return nodeValue;
@@ -40,6 +45,13 @@ export class IdentifierReplacer extends AbstractReplacer {
         return obfuscatedIdentifierName;
         return obfuscatedIdentifierName;
     }
     }
 
 
+    /**
+     * @param uniquePrefix
+     */
+    public setPrefix (uniquePrefix: string): void {
+        this.uniquePrefix = uniquePrefix
+    }
+
     /**
     /**
      * Store all identifiers names as keys in given `namesMap` with random names as value.
      * Store all identifiers names as keys in given `namesMap` with random names as value.
      * Reserved names will be ignored.
      * Reserved names will be ignored.
@@ -48,7 +60,7 @@ export class IdentifierReplacer extends AbstractReplacer {
      */
      */
     public storeNames (nodeName: string): void {
     public storeNames (nodeName: string): void {
         if (!this.isReservedName(nodeName)) {
         if (!this.isReservedName(nodeName)) {
-            this.namesMap.set(nodeName, Utils.getRandomVariableName());
+            this.namesMap.set(`${nodeName}-${this.uniquePrefix}`, Utils.getRandomVariableName());
         }
         }
     }
     }