Преглед изворни кода

added option for disabling console output

sanex3339 пре 9 година
родитељ
комит
898da19c2a

+ 6 - 6
src/Obfuscator.js

@@ -71,18 +71,18 @@ class Obfuscator {
     }
     ;
     insertNewNodes(astTree) {
-        if (this.options['rotateUnicodeArray']) {
-            this.setNodesGroup(new UnicodeArrayNodesGroup_1.UnicodeArrayNodesGroup(astTree));
-        }
-        else {
-            this.setNode('unicodeArrayNode', new UnicodeArrayNode_1.UnicodeArrayNode(astTree, Utils_1.Utils.getRandomVariableName(UnicodeArrayNode_1.UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH)));
-        }
         if (this.options['disableConsoleOutput']) {
             this.setNode('consoleOutputDisableExpressionNode', new ConsoleOutputDisableExpressionNode_1.ConsoleOutputDisableExpressionNode(astTree));
         }
         if (this.options['debugProtection']) {
             this.setNodesGroup(new DebugProtectionNodesGroup_1.DebugProtectionNodesGroup(astTree, this.options));
         }
+        if (this.options['rotateUnicodeArray']) {
+            this.setNodesGroup(new UnicodeArrayNodesGroup_1.UnicodeArrayNodesGroup(astTree));
+        }
+        else {
+            this.setNode('unicodeArrayNode', new UnicodeArrayNode_1.UnicodeArrayNode(astTree, Utils_1.Utils.getRandomVariableName(UnicodeArrayNode_1.UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH)));
+        }
     }
     nodeControllerFirstPass(node, parent) {
         Object.defineProperty(node, 'parentNode', {

+ 12 - 9
src/Obfuscator.ts

@@ -119,15 +119,6 @@ export class Obfuscator {
     };
 
     private insertNewNodes (astTree: ITreeNode): void {
-        if (this.options['rotateUnicodeArray']) {
-            this.setNodesGroup(new UnicodeArrayNodesGroup(astTree));
-        } else {
-            this.setNode(
-                'unicodeArrayNode',
-                new UnicodeArrayNode(astTree, Utils.getRandomVariableName(UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH))
-            );
-        }
-
         if (this.options['disableConsoleOutput']) {
             this.setNode(
                 'consoleOutputDisableExpressionNode',
@@ -138,6 +129,18 @@ export class Obfuscator {
         if (this.options['debugProtection']) {
             this.setNodesGroup(new DebugProtectionNodesGroup(astTree, this.options));
         }
+
+        /**
+         * Important to set this nodes latest to prevent runtime errors cause by `rotateUnicodeArray` option
+         */
+        if (this.options['rotateUnicodeArray']) {
+            this.setNodesGroup(new UnicodeArrayNodesGroup(astTree));
+        } else {
+            this.setNode(
+                'unicodeArrayNode',
+                new UnicodeArrayNode(astTree, Utils.getRandomVariableName(UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH))
+            );
+        }
     }
 
     /**

+ 5 - 6
src/nodes/ConsoleOutputDisableExpressionNode.js

@@ -2,6 +2,7 @@
 const estraverse = require('estraverse');
 const NodeType_1 = require("../enums/NodeType");
 const Node_1 = require('./Node');
+const NodeUtils_1 = require("../NodeUtils");
 class ConsoleOutputDisableExpressionNode extends Node_1.Node {
     constructor(astTree) {
         super();
@@ -11,13 +12,11 @@ class ConsoleOutputDisableExpressionNode extends Node_1.Node {
     appendNode() {
         estraverse.replace(this.astTree, {
             leave: (node, parent) => {
-                switch (node.type) {
-                    case NodeType_1.NodeType.Program:
-                        node.body.unshift(this.getNode());
-                        break;
-                    default:
-                        break;
+                if (NodeUtils_1.NodeUtils.isProgramNode(node)) {
+                    node.body.unshift(this.getNode());
+                    return estraverse.VisitorOption.Break;
                 }
+                return estraverse.VisitorOption.Skip;
             }
         });
     }

+ 6 - 8
src/nodes/ConsoleOutputDisableExpressionNode.ts

@@ -2,12 +2,12 @@
 
 import * as estraverse from 'estraverse';
 
-import { IProgramNode } from '../interfaces/nodes/IProgramNode';
 import { ITreeNode } from '../interfaces/nodes/ITreeNode';
 
 import { NodeType } from "../enums/NodeType";
 
 import { Node } from './Node';
+import { NodeUtils } from "../NodeUtils";
 
 export class ConsoleOutputDisableExpressionNode extends Node {
     /**
@@ -33,15 +33,13 @@ export class ConsoleOutputDisableExpressionNode extends Node {
     public appendNode (): void {
         estraverse.replace(this.astTree, {
             leave: (node: ITreeNode, parent: ITreeNode): any => {
-                switch (node.type) {
-                    case NodeType.Program:
-                        (<IProgramNode>node).body.unshift(this.getNode());
+                if (NodeUtils.isProgramNode(node)) {
+                    node.body.unshift(this.getNode());
 
-                        break;
-
-                    default:
-                        break;
+                    return estraverse.VisitorOption.Break;
                 }
+
+                return estraverse.VisitorOption.Skip;
             }
         });
     }

+ 5 - 6
src/nodes/UnicodeArrayNode.js

@@ -4,6 +4,7 @@ const estraverse = require('estraverse');
 const AppendState_1 = require('../enums/AppendState');
 const NodeType_1 = require("../enums/NodeType");
 const Node_1 = require('./Node');
+const NodeUtils_1 = require("../NodeUtils");
 const Utils_1 = require('../Utils');
 class UnicodeArrayNode extends Node_1.Node {
     constructor(astTree, unicodeArrayName, unicodeArrayRotateValue = 0) {
@@ -18,13 +19,11 @@ class UnicodeArrayNode extends Node_1.Node {
     appendNode() {
         estraverse.replace(this.astTree, {
             leave: (node, parent) => {
-                switch (node.type) {
-                    case NodeType_1.NodeType.Program:
-                        node.body.unshift(this.getNode());
-                        break;
-                    default:
-                        break;
+                if (NodeUtils_1.NodeUtils.isProgramNode(node)) {
+                    node.body.unshift(this.getNode());
+                    return estraverse.VisitorOption.Break;
                 }
+                return estraverse.VisitorOption.Skip;
             }
         });
     }

+ 6 - 8
src/nodes/UnicodeArrayNode.ts

@@ -1,13 +1,13 @@
 import * as escodegen from 'escodegen';
 import * as estraverse from 'estraverse';
 
-import { IProgramNode } from '../interfaces/nodes/IProgramNode';
 import { ITreeNode } from '../interfaces/nodes/ITreeNode';
 
 import { AppendState } from '../enums/AppendState';
 import { NodeType } from "../enums/NodeType";
 
 import { Node } from './Node';
+import { NodeUtils } from "../NodeUtils";
 import { Utils } from '../Utils';
 
 export class UnicodeArrayNode extends Node {
@@ -63,15 +63,13 @@ export class UnicodeArrayNode extends Node {
     public appendNode (): void {
         estraverse.replace(this.astTree, {
             leave: (node: ITreeNode, parent: ITreeNode): any => {
-                switch (node.type) {
-                    case NodeType.Program:
-                        (<IProgramNode>node).body.unshift(this.getNode());
+                if (NodeUtils.isProgramNode(node)) {
+                    node.body.unshift(this.getNode());
 
-                        break;
-
-                    default:
-                        break;
+                    return estraverse.VisitorOption.Break;
                 }
+
+                return estraverse.VisitorOption.Skip;
             }
         });
     }