diff --git a/src/Obfuscator.js b/src/Obfuscator.js index 8b5c0bd4..7d81a90a 100644 --- a/src/Obfuscator.js +++ b/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', { diff --git a/src/Obfuscator.ts b/src/Obfuscator.ts index 2045f453..894a7c4e 100644 --- a/src/Obfuscator.ts +++ b/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)) + ); + } } /** diff --git a/src/nodes/ConsoleOutputDisableExpressionNode.js b/src/nodes/ConsoleOutputDisableExpressionNode.js index 17ea499b..41fc6685 100644 --- a/src/nodes/ConsoleOutputDisableExpressionNode.js +++ b/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; } }); } diff --git a/src/nodes/ConsoleOutputDisableExpressionNode.ts b/src/nodes/ConsoleOutputDisableExpressionNode.ts index f4c54b07..7c6fb08c 100644 --- a/src/nodes/ConsoleOutputDisableExpressionNode.ts +++ b/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: - (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; } }); } diff --git a/src/nodes/UnicodeArrayNode.js b/src/nodes/UnicodeArrayNode.js index 4994abb2..53da762b 100644 --- a/src/nodes/UnicodeArrayNode.js +++ b/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; } }); } diff --git a/src/nodes/UnicodeArrayNode.ts b/src/nodes/UnicodeArrayNode.ts index fc8ebb38..f4bb2e41 100644 --- a/src/nodes/UnicodeArrayNode.ts +++ b/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: - (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; } }); }