Browse Source

Now StackTraceData is getting inside Obfuscator class and pass to the CustomNodeAppender through customNodes appendNode() method.

sanex3339 8 years ago
parent
commit
72c538a77b

+ 21 - 20
dist/index.js

@@ -88,7 +88,7 @@ module.exports =
 /******/ 	__webpack_require__.p = "";
 /******/
 /******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = 81);
+/******/ 	return __webpack_require__(__webpack_require__.s = 82);
 /******/ })
 /************************************************************************/
 /******/ ([
@@ -829,7 +829,6 @@ var _createClass = (function () { function defineProperties(target, props) { for
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
 var NodeUtils_1 = __webpack_require__(1);
-var StackTraceAnalyzer_1 = __webpack_require__(58);
 var Utils_1 = __webpack_require__(0);
 
 var CustomNodeAppender = function () {
@@ -839,15 +838,14 @@ var CustomNodeAppender = function () {
 
     _createClass(CustomNodeAppender, null, [{
         key: 'appendNode',
-        value: function appendNode(blockScopeBody, node) {
-            var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+        value: function appendNode(blockScopeStackTraceData, blockScopeBody, node) {
+            var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
 
-            var blockScopeTraceData = new StackTraceAnalyzer_1.StackTraceAnalyzer(blockScopeBody).analyze();
             var targetBlockScopeBody = void 0;
-            if (!blockScopeTraceData.length) {
+            if (!blockScopeStackTraceData.length) {
                 targetBlockScopeBody = blockScopeBody;
             } else {
-                targetBlockScopeBody = CustomNodeAppender.getOptimalBlockScopeBody(blockScopeTraceData, index);
+                targetBlockScopeBody = CustomNodeAppender.getOptimalBlockScopeBody(blockScopeStackTraceData, index);
             }
             NodeUtils_1.NodeUtils.prependNode(targetBlockScopeBody, node);
         }
@@ -1276,6 +1274,7 @@ var ObjectExpressionObfuscator_1 = __webpack_require__(52);
 var SelfDefendingNodesGroup_1 = __webpack_require__(44);
 var UnicodeArrayNodesGroup_1 = __webpack_require__(45);
 var VariableDeclarationObfuscator_1 = __webpack_require__(53);
+var StackTraceAnalyzer_1 = __webpack_require__(58);
 
 var Obfuscator = function () {
     function Obfuscator(options) {
@@ -1293,26 +1292,27 @@ var Obfuscator = function () {
                 return node;
             }
             NodeUtils_1.NodeUtils.parentize(node);
-            this.beforeObfuscation(node);
+            var stackTraceData = new StackTraceAnalyzer_1.StackTraceAnalyzer(node.body).analyze();
+            this.beforeObfuscation(node, stackTraceData);
             this.obfuscate(node);
-            this.afterObfuscation(node);
+            this.afterObfuscation(node, stackTraceData);
             return node;
         }
     }, {
         key: 'afterObfuscation',
-        value: function afterObfuscation(astTree) {
+        value: function afterObfuscation(astTree, stackTraceData) {
             this.nodes.forEach(function (node) {
                 if (node.getAppendState() === AppendState_1.AppendState.AfterObfuscation) {
-                    node.appendNode(astTree);
+                    node.appendNode(astTree, stackTraceData);
                 }
             });
         }
     }, {
         key: 'beforeObfuscation',
-        value: function beforeObfuscation(astTree) {
+        value: function beforeObfuscation(astTree, stackTraceData) {
             this.nodes.forEach(function (node) {
                 if (node.getAppendState() === AppendState_1.AppendState.BeforeObfuscation) {
-                    node.appendNode(astTree);
+                    node.appendNode(astTree, stackTraceData);
                 }
             });
         }
@@ -1722,8 +1722,8 @@ var ConsoleOutputDisableExpressionNode = function (_AbstractCustomNode_) {
 
     _createClass(ConsoleOutputDisableExpressionNode, [{
         key: 'appendNode',
-        value: function appendNode(blockScopeNode) {
-            CustomNodeAppender_1.CustomNodeAppender.appendNode(blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length));
+        value: function appendNode(blockScopeNode, stackTraceData) {
+            CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length));
         }
     }, {
         key: 'getNodeStructure',
@@ -1946,8 +1946,8 @@ var DomainLockNode = function (_AbstractCustomNode_) {
 
     _createClass(DomainLockNode, [{
         key: 'appendNode',
-        value: function appendNode(blockScopeNode) {
-            CustomNodeAppender_1.CustomNodeAppender.appendNode(blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length));
+        value: function appendNode(blockScopeNode, stackTraceData) {
+            CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length));
         }
     }, {
         key: 'getNodeStructure',
@@ -2009,8 +2009,8 @@ var SelfDefendingUnicodeNode = function (_AbstractCustomNode_) {
 
     _createClass(SelfDefendingUnicodeNode, [{
         key: 'appendNode',
-        value: function appendNode(blockScopeNode) {
-            CustomNodeAppender_1.CustomNodeAppender.appendNode(blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length));
+        value: function appendNode(blockScopeNode, stackTraceData) {
+            CustomNodeAppender_1.CustomNodeAppender.appendNode(stackTraceData, blockScopeNode.body, this.getNode(), CustomNodeAppender_1.CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length));
         }
     }, {
         key: 'getNodeStructure',
@@ -4053,7 +4053,8 @@ module.exports = require("fs");
 module.exports = require("mkdirp");
 
 /***/ },
-/* 81 */
+/* 81 */,
+/* 82 */
 /***/ function(module, exports, __webpack_require__) {
 
 "use strict";

+ 13 - 7
src/Obfuscator.ts

@@ -4,6 +4,7 @@ import * as ESTree from 'estree';
 import { ICustomNode } from './interfaces/custom-nodes/ICustomNode';
 import { IObfuscator } from './interfaces/IObfuscator';
 import { IOptions } from './interfaces/IOptions';
+import { IStackTraceData } from './interfaces/stack-trace-analyzer/IStackTraceData';
 
 import { TNodeObfuscator } from './types/TNodeObfuscator';
 
@@ -25,6 +26,7 @@ import { ObjectExpressionObfuscator } from './node-obfuscators/ObjectExpressionO
 import { SelfDefendingNodesGroup } from './node-groups/SelfDefendingNodesGroup';
 import { UnicodeArrayNodesGroup } from './node-groups/UnicodeArrayNodesGroup';
 import { VariableDeclarationObfuscator } from './node-obfuscators/VariableDeclarationObfuscator';
+import { StackTraceAnalyzer } from './stack-trace-analyzer/StackTraceAnalyzer';
 
 export class Obfuscator implements IObfuscator {
     /**
@@ -75,38 +77,42 @@ export class Obfuscator implements IObfuscator {
      * @param node
      * @returns {ESTree.Node}
      */
-    public obfuscateNode (node: ESTree.Node): ESTree.Node {
+    public obfuscateNode (node: ESTree.Program): ESTree.Node {
         if (Nodes.isProgramNode(node) && !node.body.length) {
             return node;
         }
 
         NodeUtils.parentize(node);
 
-        this.beforeObfuscation(node);
+        const stackTraceData: IStackTraceData[] = new StackTraceAnalyzer(node.body).analyze();
+
+        this.beforeObfuscation(node, stackTraceData);
         this.obfuscate(node);
-        this.afterObfuscation(node);
+        this.afterObfuscation(node, stackTraceData);
 
         return node;
     }
 
     /**
      * @param astTree
+     * @param stackTraceData
      */
-    private afterObfuscation (astTree: ESTree.Node): void {
+    private afterObfuscation (astTree: ESTree.Node, stackTraceData: IStackTraceData[]): void {
         this.nodes.forEach((node: ICustomNode) => {
             if (node.getAppendState() === AppendState.AfterObfuscation) {
-                node.appendNode(astTree);
+                node.appendNode(astTree, stackTraceData);
             }
         });
     }
 
     /**
      * @param astTree
+     * @param stackTraceData
      */
-    private beforeObfuscation (astTree: ESTree.Node): void {
+    private beforeObfuscation (astTree: ESTree.Node, stackTraceData: IStackTraceData[]): void {
         this.nodes.forEach((node: ICustomNode) => {
             if (node.getAppendState() === AppendState.BeforeObfuscation) {
-                node.appendNode(astTree);
+                node.appendNode(astTree, stackTraceData);
             }
         });
     };

+ 3 - 1
src/custom-nodes/AbstractCustomNode.ts

@@ -2,6 +2,7 @@ import * as ESTree from 'estree';
 
 import { ICustomNode } from '../interfaces/custom-nodes/ICustomNode';
 import { IOptions } from '../interfaces/IOptions';
+import { IStackTraceData } from '../interfaces/stack-trace-analyzer/IStackTraceData';
 
 import { AppendState } from '../enums/AppendState';
 
@@ -25,8 +26,9 @@ export abstract class AbstractCustomNode implements ICustomNode {
 
     /**
      * @param astTree
+     * @param stackTraceData
      */
-    public abstract appendNode (astTree: ESTree.Node): void;
+    public abstract appendNode (astTree: ESTree.Node, stackTraceData?: IStackTraceData[]): void;
 
     /**
      * @returns {AppendState}

+ 9 - 6
src/custom-nodes/CustomNodeAppender.ts

@@ -3,7 +3,6 @@ import * as ESTree from 'estree';
 import { IStackTraceData } from '../interfaces/stack-trace-analyzer/IStackTraceData';
 
 import { NodeUtils } from '../NodeUtils';
-import { StackTraceAnalyzer } from '../stack-trace-analyzer/StackTraceAnalyzer';
 import { Utils } from '../Utils';
 
 /**
@@ -25,19 +24,23 @@ import { Utils } from '../Utils';
  */
 export class CustomNodeAppender {
     /**
+     * @param blockScopeStackTraceData
      * @param blockScopeBody
      * @param node
      * @param index
      */
-    public static appendNode (blockScopeBody: ESTree.Node[], node: ESTree.Node, index: number = 0): void {
-        const blockScopeTraceData: IStackTraceData[] = new StackTraceAnalyzer(blockScopeBody).analyze();
-
+    public static appendNode (
+        blockScopeStackTraceData: IStackTraceData[],
+        blockScopeBody: ESTree.Node[],
+        node: ESTree.Node,
+        index: number = 0
+    ): void {
         let targetBlockScopeBody: ESTree.Node[];
 
-        if (!blockScopeTraceData.length) {
+        if (!blockScopeStackTraceData.length) {
             targetBlockScopeBody = blockScopeBody;
         } else {
-            targetBlockScopeBody = CustomNodeAppender.getOptimalBlockScopeBody(blockScopeTraceData, index);
+            targetBlockScopeBody = CustomNodeAppender.getOptimalBlockScopeBody(blockScopeStackTraceData, index);
         }
 
         NodeUtils.prependNode(targetBlockScopeBody, node);

+ 5 - 1
src/custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode.ts

@@ -2,6 +2,8 @@ import * as ESTree from 'estree';
 
 import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement';
 
+import { IStackTraceData } from '../../interfaces/stack-trace-analyzer/IStackTraceData';
+
 import { AppendState } from '../../enums/AppendState';
 
 import { ConsoleOutputDisableExpressionTemplate } from '../../templates/custom-nodes/console-output-nodes/console-output-disable-expression-node/ConsoleOutputDisableExpressionTemplate';
@@ -18,9 +20,11 @@ export class ConsoleOutputDisableExpressionNode extends AbstractCustomNode {
 
     /**
      * @param blockScopeNode
+     * @param stackTraceData
      */
-    public appendNode (blockScopeNode: TNodeWithBlockStatement): void {
+    public appendNode (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void {
         CustomNodeAppender.appendNode(
+            stackTraceData,
             blockScopeNode.body,
             this.getNode(),
             CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)

+ 5 - 1
src/custom-nodes/domain-lock-nodes/DomainLockNode.ts

@@ -4,6 +4,8 @@ import 'format-unicorn';
 
 import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement';
 
+import { IStackTraceData } from '../../interfaces/stack-trace-analyzer/IStackTraceData';
+
 import { AppendState } from '../../enums/AppendState';
 
 import { DomainLockNodeTemplate } from '../../templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate';
@@ -21,9 +23,11 @@ export class DomainLockNode extends AbstractCustomNode {
 
     /**
      * @param blockScopeNode
+     * @param stackTraceData
      */
-    public appendNode (blockScopeNode: TNodeWithBlockStatement): void {
+    public appendNode (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void {
         CustomNodeAppender.appendNode(
+            stackTraceData,
             blockScopeNode.body,
             this.getNode(),
             CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)

+ 5 - 1
src/custom-nodes/self-defending-nodes/SelfDefendingUnicodeNode.ts

@@ -2,6 +2,8 @@ import * as ESTree from 'estree';
 
 import { TNodeWithBlockStatement } from '../../types/TNodeWithBlockStatement';
 
+import { IStackTraceData } from '../../interfaces/stack-trace-analyzer/IStackTraceData';
+
 import { AppendState } from '../../enums/AppendState';
 
 import { NO_CUSTOM_NODES_PRESET } from '../../preset-options/NoCustomNodesPreset';
@@ -21,9 +23,11 @@ export class SelfDefendingUnicodeNode extends AbstractCustomNode {
 
     /**
      * @param blockScopeNode
+     * @param stackTraceData
      */
-    public appendNode (blockScopeNode: TNodeWithBlockStatement): void {
+    public appendNode (blockScopeNode: TNodeWithBlockStatement, stackTraceData: IStackTraceData[]): void {
         CustomNodeAppender.appendNode(
+            stackTraceData,
             blockScopeNode.body,
             this.getNode(),
             CustomNodeAppender.getIndexByThreshold(blockScopeNode.body.length)

+ 4 - 1
src/interfaces/custom-nodes/ICustomNode.d.ts

@@ -1,12 +1,15 @@
 import * as ESTree from 'estree';
 
+import { IStackTraceData } from '../stack-trace-analyzer/IStackTraceData';
+
 import { AppendState } from '../../enums/AppendState';
 
 export interface ICustomNode {
     /**
      * @param astTree
+     * @param stackTraceData
      */
-    appendNode (astTree: ESTree.Node): void;
+    appendNode (astTree: ESTree.Node, stackTraceData?: IStackTraceData[]): void;
 
     /**
      * @returns {AppendState}

+ 13 - 5
test/unit-tests/custom-nodes/CustomNodeAppender.spec.ts

@@ -1,8 +1,11 @@
 import * as chai from 'chai';
 import * as ESTree from 'estree';
 
+import { IStackTraceData } from '../../../src/interfaces/stack-trace-analyzer/IStackTraceData';
+
 import { CustomNodeAppender } from '../../../src/custom-nodes/CustomNodeAppender';
 import { NodeUtils } from '../../../src/NodeUtils';
+import { StackTraceAnalyzer } from '../../../src/stack-trace-analyzer/StackTraceAnalyzer';
 
 const assert: any = chai.assert;
 
@@ -10,7 +13,8 @@ describe('CustomNodeAppender', () => {
     describe('appendNode (blockScopeNode: TNodeWithBlockStatement, node: ESTree.Node): void', () => {
         let astTree: ESTree.Program,
             expectedAstTree: ESTree.Program,
-            node: ESTree.Node;
+            node: ESTree.Node,
+            stackTraceData: IStackTraceData[];
 
         beforeEach(() => {
             node = NodeUtils.convertCodeToStructure(`
@@ -80,7 +84,8 @@ describe('CustomNodeAppender', () => {
                 bar();
             `, false);
 
-            CustomNodeAppender.appendNode(astTree.body, node);
+            stackTraceData = new StackTraceAnalyzer(astTree.body).analyze();
+            CustomNodeAppender.appendNode(stackTraceData, astTree.body, node);
 
             NodeUtils.parentize(astTree);
 
@@ -150,7 +155,8 @@ describe('CustomNodeAppender', () => {
                 foo();
             `, false);
 
-            CustomNodeAppender.appendNode(astTree.body, node);
+            stackTraceData = new StackTraceAnalyzer(astTree.body).analyze();
+            CustomNodeAppender.appendNode(stackTraceData, astTree.body, node);
 
             NodeUtils.parentize(astTree);
 
@@ -225,7 +231,8 @@ describe('CustomNodeAppender', () => {
                     foo();
                 `, false);
 
-                CustomNodeAppender.appendNode(astTree.body, node, 2);
+                stackTraceData = new StackTraceAnalyzer(astTree.body).analyze();
+                CustomNodeAppender.appendNode(stackTraceData, astTree.body, node, 2);
 
                 NodeUtils.parentize(astTree);
 
@@ -264,7 +271,8 @@ describe('CustomNodeAppender', () => {
                     foo();
                 `, false);
 
-                CustomNodeAppender.appendNode(astTree.body, node, 1);
+                stackTraceData = new StackTraceAnalyzer(astTree.body).analyze();
+                CustomNodeAppender.appendNode(stackTraceData, astTree.body, node, 1);
 
                 NodeUtils.parentize(astTree);