From 47c560ed7a64ba8490039796fb261ef415f6a17f Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Tue, 24 May 2016 19:03:21 +0300 Subject: [PATCH] refactoring --- src/NodeUtils.js | 1 + src/NodeUtils.ts | 2 + .../UnicodeArrayRotateFunctionNode.js | 275 ++-------------- .../UnicodeArrayRotateFunctionNode.ts | 306 +++--------------- tests/dev-test.js | 1 - tests/dev-test.ts | 2 +- 6 files changed, 71 insertions(+), 516 deletions(-) diff --git a/src/NodeUtils.js b/src/NodeUtils.js index 8b66ed30..b72d8cc6 100644 --- a/src/NodeUtils.js +++ b/src/NodeUtils.js @@ -22,6 +22,7 @@ class NodeUtils { if (node.parentNode.type === NodeType_1.NodeType.Program) { return node.parentNode; } + console.log(node.type, node.parentNode.type); if (!Utils_1.Utils.arrayContains(NodeUtils.scopeNodes, node.parentNode.type)) { return NodeUtils.getBlockScopeOfNode(node.parentNode, depth); } diff --git a/src/NodeUtils.ts b/src/NodeUtils.ts index 6f2bb7e1..4c9f61bf 100644 --- a/src/NodeUtils.ts +++ b/src/NodeUtils.ts @@ -65,6 +65,8 @@ export class NodeUtils { return node.parentNode; } + console.log(node.type, node.parentNode.type); + if (!Utils.arrayContains(NodeUtils.scopeNodes, node.parentNode.type)) { return NodeUtils.getBlockScopeOfNode(node.parentNode, depth); } diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.js b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.js index 2c9df26d..75b7694d 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.js +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.js @@ -1,9 +1,8 @@ "use strict"; +const esprima = require('esprima'); 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 UnicodeArrayRotateFunctionNode extends Node_1.Node { constructor(unicodeArrayName, unicodeArray, unicodeArrayRotateValue) { super(); @@ -23,263 +22,25 @@ class UnicodeArrayRotateFunctionNode extends Node_1.Node { return super.getNode(); } getNodeStructure() { - return { - "type": NodeType_1.NodeType.ExpressionStatement, - "expression": { - "type": NodeType_1.NodeType.CallExpression, - "callee": { - 'type': NodeType_1.NodeType.FunctionExpression, - 'id': null, - 'params': [ - { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'array' - }, - { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'times' - }, - { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'reverse' + return NodeUtils_1.NodeUtils.getBlockScopeNodeByIndex(esprima.parse(` + (function (array, times, reverse) { + if (times < 0) { + return; } - ], - 'defaults': [], - 'body': { - 'type': NodeType_1.NodeType.BlockStatement, - 'body': [ - { - 'type': NodeType_1.NodeType.IfStatement, - 'test': { - 'type': NodeType_1.NodeType.BinaryExpression, - 'operator': '<', - 'left': { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'times' - }, - 'right': { - 'type': NodeType_1.NodeType.Literal, - 'value': 0, - 'raw': '0' - } - }, - 'consequent': { - 'type': NodeType_1.NodeType.BlockStatement, - 'body': [ - { - 'type': NodeType_1.NodeType.ReturnStatement, - 'argument': null - } - ] - }, - 'alternate': null - }, - { - 'type': NodeType_1.NodeType.ExpressionStatement, - 'expression': { - 'type': NodeType_1.NodeType.AssignmentExpression, - 'operator': '=', - 'left': { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'reverse' - }, - 'right': { - 'type': NodeType_1.NodeType.LogicalExpression, - 'operator': '||', - 'left': { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'reverse' - }, - 'right': { - 'type': NodeType_1.NodeType.Literal, - 'value': false, - 'raw': 'false' - } - } - } - }, - { - 'type': NodeType_1.NodeType.VariableDeclaration, - 'declarations': [ - { - 'type': NodeType_1.NodeType.VariableDeclarator, - 'id': { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'temp' - }, - 'init': null - } - ], - 'kind': 'var' - }, - { - 'type': NodeType_1.NodeType.WhileStatement, - 'test': { - 'type': NodeType_1.NodeType.UpdateExpression, - 'operator': '--', - 'argument': { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'times' - }, - 'prefix': false - }, - 'body': { - 'type': NodeType_1.NodeType.BlockStatement, - 'body': [ - { - 'type': NodeType_1.NodeType.IfStatement, - 'test': { - 'type': NodeType_1.NodeType.UnaryExpression, - 'operator': '!', - 'argument': { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'reverse' - }, - 'prefix': true - }, - 'consequent': { - 'type': NodeType_1.NodeType.BlockStatement, - 'body': [ - { - 'type': NodeType_1.NodeType.ExpressionStatement, - 'expression': { - 'type': NodeType_1.NodeType.AssignmentExpression, - 'operator': '=', - 'left': { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'temp' - }, - 'right': { - 'type': NodeType_1.NodeType.CallExpression, - 'callee': { - 'type': NodeType_1.NodeType.MemberExpression, - 'computed': true, - 'object': { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'array' - }, - 'property': { - 'type': NodeType_1.NodeType.Literal, - 'name': 'pop', - 'x-verbatim-property': Utils_1.Utils.stringToUnicode('pop') - } - }, - 'arguments': [] - } - } - }, - { - 'type': NodeType_1.NodeType.ExpressionStatement, - 'expression': { - 'type': NodeType_1.NodeType.CallExpression, - 'callee': { - 'type': NodeType_1.NodeType.MemberExpression, - 'computed': true, - 'object': { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'array' - }, - 'property': { - 'type': NodeType_1.NodeType.Literal, - 'name': 'unshift', - 'x-verbatim-property': Utils_1.Utils.stringToUnicode('unshift') - } - }, - 'arguments': [ - { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'temp' - } - ] - } - } - ] - }, - 'alternate': { - 'type': NodeType_1.NodeType.BlockStatement, - 'body': [ - { - 'type': NodeType_1.NodeType.ExpressionStatement, - 'expression': { - 'type': NodeType_1.NodeType.AssignmentExpression, - 'operator': '=', - 'left': { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'temp' - }, - 'right': { - 'type': NodeType_1.NodeType.CallExpression, - 'callee': { - 'type': NodeType_1.NodeType.MemberExpression, - 'computed': true, - 'object': { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'array' - }, - 'property': { - 'type': NodeType_1.NodeType.Literal, - 'name': 'shift', - 'x-verbatim-property': Utils_1.Utils.stringToUnicode('shift') - } - }, - 'arguments': [] - } - } - }, - { - 'type': NodeType_1.NodeType.ExpressionStatement, - 'expression': { - 'type': NodeType_1.NodeType.CallExpression, - 'callee': { - 'type': NodeType_1.NodeType.MemberExpression, - 'computed': true, - 'object': { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'array' - }, - 'property': { - 'type': NodeType_1.NodeType.Literal, - 'name': 'push', - 'x-verbatim-property': Utils_1.Utils.stringToUnicode('push') - } - }, - 'arguments': [ - { - 'type': NodeType_1.NodeType.Identifier, - 'name': 'temp' - } - ] - } - } - ] - } - } - ] - } + + var temp; + + while (times--) { + if (!reverse) { + temp = array.pop(); + array.unshift(temp); + } else { + temp = array.shift(); + array.push(temp); } - ] - }, - 'generator': false, - 'expression': false - }, - "arguments": [ - { - 'type': NodeType_1.NodeType.Identifier, - 'name': this.unicodeArrayName - }, - { - 'type': NodeType_1.NodeType.Literal, - 'value': this.unicodeArrayRotateValue, - 'raw': `'${this.unicodeArrayRotateValue}'` - }, - { - 'type': NodeType_1.NodeType.Literal, - 'value': true, - 'raw': 'true' - } - ] - } - }; + } + })(${this.unicodeArrayName}, ${this.unicodeArrayRotateValue}, true); + `)); } } exports.UnicodeArrayRotateFunctionNode = UnicodeArrayRotateFunctionNode; diff --git a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts index 835bc3a4..80379d52 100644 --- a/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts +++ b/src/custom-nodes/unicode-array-nodes/UnicodeArrayRotateFunctionNode.ts @@ -1,13 +1,15 @@ +import * as esprima from 'esprima'; + import { INode } from "../../interfaces/nodes/INode"; import { BlockScopeNode } from "../../types/BlockScopeNode"; import { AppendState } from "../../enums/AppendState"; -import { NodeType } from "../../enums/NodeType"; import { Node } from '../Node'; import { NodeUtils } from "../../NodeUtils"; -import { Utils } from '../../Utils'; +import {Utils} from "../../Utils"; +import {Obfuscator} from "../../Obfuscator"; export class UnicodeArrayRotateFunctionNode extends Node { /** @@ -71,262 +73,52 @@ export class UnicodeArrayRotateFunctionNode extends Node { * @returns any */ protected getNodeStructure (): any { - return { - "type": NodeType.ExpressionStatement, - "expression": { - "type": NodeType.CallExpression, - "callee": { - 'type': NodeType.FunctionExpression, - 'id': null, - 'params': [ - { - 'type': NodeType.Identifier, - 'name': 'array' - }, - { - 'type': NodeType.Identifier, - 'name': 'times' - }, - { - 'type': NodeType.Identifier, - 'name': 'reverse' + return NodeUtils.getBlockScopeNodeByIndex( + esprima.parse(` + (function (array, times, reverse) { + if (times < 0) { + return; } - ], - 'defaults': [], - 'body': { - 'type': NodeType.BlockStatement, - 'body': [ - { - 'type': NodeType.IfStatement, - 'test': { - 'type': NodeType.BinaryExpression, - 'operator': '<', - 'left': { - 'type': NodeType.Identifier, - 'name': 'times' - }, - 'right': { - 'type': NodeType.Literal, - 'value': 0, - 'raw': '0' - } - }, - 'consequent': { - 'type': NodeType.BlockStatement, - 'body': [ - { - 'type': NodeType.ReturnStatement, - 'argument': null - } - ] - }, - 'alternate': null - }, - { - 'type': NodeType.ExpressionStatement, - 'expression': { - 'type': NodeType.AssignmentExpression, - 'operator': '=', - 'left': { - 'type': NodeType.Identifier, - 'name': 'reverse' - }, - 'right': { - 'type': NodeType.LogicalExpression, - 'operator': '||', - 'left': { - 'type': NodeType.Identifier, - 'name': 'reverse' - }, - 'right': { - 'type': NodeType.Literal, - 'value': false, - 'raw': 'false' - } - } - } - }, - { - 'type': NodeType.VariableDeclaration, - 'declarations': [ - { - 'type': NodeType.VariableDeclarator, - 'id': { - 'type': NodeType.Identifier, - 'name': 'temp' - }, - 'init': null - } - ], - 'kind': 'var' - }, - { - 'type': NodeType.WhileStatement, - 'test': { - 'type': NodeType.UpdateExpression, - 'operator': '--', - 'argument': { - 'type': NodeType.Identifier, - 'name': 'times' - }, - 'prefix': false - }, - 'body': { - 'type': NodeType.BlockStatement, - 'body': [ - { - 'type': NodeType.IfStatement, - 'test': { - 'type': NodeType.UnaryExpression, - 'operator': '!', - 'argument': { - 'type': NodeType.Identifier, - 'name': 'reverse' - }, - 'prefix': true - }, - 'consequent': { - 'type': NodeType.BlockStatement, - 'body': [ - { - 'type': NodeType.ExpressionStatement, - 'expression': { - 'type': NodeType.AssignmentExpression, - 'operator': '=', - 'left': { - 'type': NodeType.Identifier, - 'name': 'temp' - }, - 'right': { - 'type': NodeType.CallExpression, - 'callee': { - 'type': NodeType.MemberExpression, - 'computed': true, - 'object': { - 'type': NodeType.Identifier, - 'name': 'array' - }, - 'property': { - 'type': NodeType.Literal, - 'name': 'pop', - 'x-verbatim-property': Utils.stringToUnicode('pop') - } - }, - 'arguments': [] - } - } - }, - { - 'type': NodeType.ExpressionStatement, - 'expression': { - 'type': NodeType.CallExpression, - 'callee': { - 'type': NodeType.MemberExpression, - 'computed': true, - 'object': { - 'type': NodeType.Identifier, - 'name': 'array' - }, - 'property': { - 'type': NodeType.Literal, - 'name': 'unshift', - 'x-verbatim-property': Utils.stringToUnicode('unshift') - } - }, - 'arguments': [ - { - 'type': NodeType.Identifier, - 'name': 'temp' - } - ] - } - } - ] - }, - 'alternate': { - 'type': NodeType.BlockStatement, - 'body': [ - { - 'type': NodeType.ExpressionStatement, - 'expression': { - 'type': NodeType.AssignmentExpression, - 'operator': '=', - 'left': { - 'type': NodeType.Identifier, - 'name': 'temp' - }, - 'right': { - 'type': NodeType.CallExpression, - 'callee': { - 'type': NodeType.MemberExpression, - 'computed': true, - 'object': { - 'type': NodeType.Identifier, - 'name': 'array' - }, - 'property': { - 'type': NodeType.Literal, - 'name': 'shift', - 'x-verbatim-property': Utils.stringToUnicode('shift') - } - }, - 'arguments': [] - } - } - }, - { - 'type': NodeType.ExpressionStatement, - 'expression': { - 'type': NodeType.CallExpression, - 'callee': { - 'type': NodeType.MemberExpression, - 'computed': true, - 'object': { - 'type': NodeType.Identifier, - 'name': 'array' - }, - 'property': { - 'type': NodeType.Literal, - 'name': 'push', - 'x-verbatim-property': Utils.stringToUnicode('push') - } - }, - 'arguments': [ - { - 'type': NodeType.Identifier, - 'name': 'temp' - } - ] - } - } - ] - } - } - ] - } + + var temp; + + while (times--) { + if (!reverse) { + temp = array.pop(); + array.unshift(temp); + } else { + temp = array.shift(); + array.push(temp); } - ] - }, - 'generator': false, - 'expression': false - }, - "arguments": [ - { - 'type': NodeType.Identifier, - 'name': this.unicodeArrayName - }, - { - 'type': NodeType.Literal, - 'value': this.unicodeArrayRotateValue, - 'raw': `'${this.unicodeArrayRotateValue}'` - }, - { - 'type': NodeType.Literal, - 'value': true, - 'raw': 'true' - } - ] - } - }; + } + })(${this.unicodeArrayName}, ${this.unicodeArrayRotateValue}, true); + `) + ); + + /*return new Obfuscator({ + rotateUnicodeArray: false + }).obfuscateNode( + NodeUtils.getBlockScopeNodeByIndex( + esprima.parse(` + (function (array, times, reverse) { + if (times < 0) { + return; + } + + var temp; + + while (times--) { + if (!reverse) { + temp = array.pop(); + array.unshift(temp); + } else { + temp = array.shift(); + array.push(temp); + } + } + })(${this.unicodeArrayName}, ${this.unicodeArrayRotateValue}, true); + `) + ) + );*/ } } diff --git a/tests/dev-test.js b/tests/dev-test.js index e867442e..5775b51b 100644 --- a/tests/dev-test.js +++ b/tests/dev-test.js @@ -48,7 +48,6 @@ let obfuscatedCode = index_1.JavaScriptObfuscator.obfuscate(` })(); `, { disableConsoleOutput: false, - rotateUnicodeArray: false }); console.log(obfuscatedCode); console.log(eval(obfuscatedCode)); diff --git a/tests/dev-test.ts b/tests/dev-test.ts index 186b1024..9ca7801a 100644 --- a/tests/dev-test.ts +++ b/tests/dev-test.ts @@ -50,7 +50,7 @@ let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( `, { disableConsoleOutput: false, - rotateUnicodeArray: false + //rotateUnicodeArray: false } );