|
@@ -1,100 +1,122 @@
|
|
"use strict";
|
|
"use strict";
|
|
-const estraverse = require('estraverse');
|
|
|
|
-const AppendState_1 = require('./enums/AppendState');
|
|
|
|
-const NodeType_1 = require('./enums/NodeType');
|
|
|
|
-const CatchClauseObfuscator_1 = require('./node-obfuscators/CatchClauseObfuscator');
|
|
|
|
-const ConsoleOutputDisableExpressionNode_1 = require('./custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode');
|
|
|
|
-const DebugProtectionNodesGroup_1 = require('./node-groups/DebugProtectionNodesGroup');
|
|
|
|
-const FunctionDeclarationObfuscator_1 = require('./node-obfuscators/FunctionDeclarationObfuscator');
|
|
|
|
-const FunctionObfuscator_1 = require('./node-obfuscators/FunctionObfuscator');
|
|
|
|
-const LiteralObfuscator_1 = require('./node-obfuscators/LiteralObfuscator');
|
|
|
|
-const MemberExpressionObfuscator_1 = require('./node-obfuscators/MemberExpressionObfuscator');
|
|
|
|
-const MethodDefinitionObfuscator_1 = require('./node-obfuscators/MethodDefinitionObfuscator');
|
|
|
|
-const NodeUtils_1 = require("./NodeUtils");
|
|
|
|
-const ObjectExpressionObfuscator_1 = require('./node-obfuscators/ObjectExpressionObfuscator');
|
|
|
|
-const SelfDefendingNodesGroup_1 = require("./node-groups/SelfDefendingNodesGroup");
|
|
|
|
-const UnicodeArrayNodesGroup_1 = require('./node-groups/UnicodeArrayNodesGroup');
|
|
|
|
-const VariableDeclarationObfuscator_1 = require('./node-obfuscators/VariableDeclarationObfuscator');
|
|
|
|
-class Obfuscator {
|
|
|
|
- constructor(options = {}) {
|
|
|
|
|
|
+
|
|
|
|
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
+
|
|
|
|
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
+
|
|
|
|
+var estraverse = require('estraverse');
|
|
|
|
+var AppendState_1 = require('./enums/AppendState');
|
|
|
|
+var NodeType_1 = require('./enums/NodeType');
|
|
|
|
+var CatchClauseObfuscator_1 = require('./node-obfuscators/CatchClauseObfuscator');
|
|
|
|
+var ConsoleOutputDisableExpressionNode_1 = require('./custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode');
|
|
|
|
+var DebugProtectionNodesGroup_1 = require('./node-groups/DebugProtectionNodesGroup');
|
|
|
|
+var FunctionDeclarationObfuscator_1 = require('./node-obfuscators/FunctionDeclarationObfuscator');
|
|
|
|
+var FunctionObfuscator_1 = require('./node-obfuscators/FunctionObfuscator');
|
|
|
|
+var LiteralObfuscator_1 = require('./node-obfuscators/LiteralObfuscator');
|
|
|
|
+var MemberExpressionObfuscator_1 = require('./node-obfuscators/MemberExpressionObfuscator');
|
|
|
|
+var MethodDefinitionObfuscator_1 = require('./node-obfuscators/MethodDefinitionObfuscator');
|
|
|
|
+var NodeUtils_1 = require("./NodeUtils");
|
|
|
|
+var ObjectExpressionObfuscator_1 = require('./node-obfuscators/ObjectExpressionObfuscator');
|
|
|
|
+var SelfDefendingNodesGroup_1 = require("./node-groups/SelfDefendingNodesGroup");
|
|
|
|
+var UnicodeArrayNodesGroup_1 = require('./node-groups/UnicodeArrayNodesGroup');
|
|
|
|
+var VariableDeclarationObfuscator_1 = require('./node-obfuscators/VariableDeclarationObfuscator');
|
|
|
|
+
|
|
|
|
+var Obfuscator = function () {
|
|
|
|
+ function Obfuscator() {
|
|
|
|
+ var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
|
|
|
|
+
|
|
|
|
+ _classCallCheck(this, Obfuscator);
|
|
|
|
+
|
|
this.nodes = new Map();
|
|
this.nodes = new Map();
|
|
- this.nodeObfuscators = new Map([
|
|
|
|
- [NodeType_1.NodeType.ArrowFunctionExpression, [FunctionObfuscator_1.FunctionObfuscator]],
|
|
|
|
- [NodeType_1.NodeType.ClassDeclaration, [FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator]],
|
|
|
|
- [NodeType_1.NodeType.CatchClause, [CatchClauseObfuscator_1.CatchClauseObfuscator]],
|
|
|
|
- [NodeType_1.NodeType.FunctionDeclaration, [
|
|
|
|
- FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator,
|
|
|
|
- FunctionObfuscator_1.FunctionObfuscator
|
|
|
|
- ]],
|
|
|
|
- [NodeType_1.NodeType.FunctionExpression, [FunctionObfuscator_1.FunctionObfuscator]],
|
|
|
|
- [NodeType_1.NodeType.MemberExpression, [MemberExpressionObfuscator_1.MemberExpressionObfuscator]],
|
|
|
|
- [NodeType_1.NodeType.MethodDefinition, [MethodDefinitionObfuscator_1.MethodDefinitionObfuscator]],
|
|
|
|
- [NodeType_1.NodeType.ObjectExpression, [ObjectExpressionObfuscator_1.ObjectExpressionObfuscator]],
|
|
|
|
- [NodeType_1.NodeType.VariableDeclaration, [VariableDeclarationObfuscator_1.VariableDeclarationObfuscator]],
|
|
|
|
- [NodeType_1.NodeType.Literal, [LiteralObfuscator_1.LiteralObfuscator]]
|
|
|
|
- ]);
|
|
|
|
|
|
+ this.nodeObfuscators = new Map([[NodeType_1.NodeType.ArrowFunctionExpression, [FunctionObfuscator_1.FunctionObfuscator]], [NodeType_1.NodeType.ClassDeclaration, [FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator]], [NodeType_1.NodeType.CatchClause, [CatchClauseObfuscator_1.CatchClauseObfuscator]], [NodeType_1.NodeType.FunctionDeclaration, [FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator, FunctionObfuscator_1.FunctionObfuscator]], [NodeType_1.NodeType.FunctionExpression, [FunctionObfuscator_1.FunctionObfuscator]], [NodeType_1.NodeType.MemberExpression, [MemberExpressionObfuscator_1.MemberExpressionObfuscator]], [NodeType_1.NodeType.MethodDefinition, [MethodDefinitionObfuscator_1.MethodDefinitionObfuscator]], [NodeType_1.NodeType.ObjectExpression, [ObjectExpressionObfuscator_1.ObjectExpressionObfuscator]], [NodeType_1.NodeType.VariableDeclaration, [VariableDeclarationObfuscator_1.VariableDeclarationObfuscator]], [NodeType_1.NodeType.Literal, [LiteralObfuscator_1.LiteralObfuscator]]]);
|
|
this.options = options;
|
|
this.options = options;
|
|
}
|
|
}
|
|
- obfuscateNode(node) {
|
|
|
|
- this.setNewNodes();
|
|
|
|
- NodeUtils_1.NodeUtils.parentize(node);
|
|
|
|
- this.beforeObfuscation(node);
|
|
|
|
- this.obfuscate(node);
|
|
|
|
- this.afterObfuscation(node);
|
|
|
|
- return node;
|
|
|
|
- }
|
|
|
|
- setNode(nodeName, node) {
|
|
|
|
- this.nodes.set(nodeName, node);
|
|
|
|
- }
|
|
|
|
- setNodesGroup(nodesGroup) {
|
|
|
|
- let nodes = nodesGroup.getNodes();
|
|
|
|
- nodes.forEach((node, key) => {
|
|
|
|
- this.nodes.set(key, node);
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- afterObfuscation(astTree) {
|
|
|
|
- this.nodes.forEach((node) => {
|
|
|
|
- if (node.getAppendState() === AppendState_1.AppendState.AfterObfuscation) {
|
|
|
|
- node.appendNode(astTree);
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- beforeObfuscation(astTree) {
|
|
|
|
- this.nodes.forEach((node) => {
|
|
|
|
- if (node.getAppendState() === AppendState_1.AppendState.BeforeObfuscation) {
|
|
|
|
- node.appendNode(astTree);
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- ;
|
|
|
|
- initializeNodeObfuscators(node, parentNode) {
|
|
|
|
- if (!this.nodeObfuscators.has(node.type)) {
|
|
|
|
- return;
|
|
|
|
|
|
+
|
|
|
|
+ _createClass(Obfuscator, [{
|
|
|
|
+ key: 'obfuscateNode',
|
|
|
|
+ value: function obfuscateNode(node) {
|
|
|
|
+ this.setNewNodes();
|
|
|
|
+ NodeUtils_1.NodeUtils.parentize(node);
|
|
|
|
+ this.beforeObfuscation(node);
|
|
|
|
+ this.obfuscate(node);
|
|
|
|
+ this.afterObfuscation(node);
|
|
|
|
+ return node;
|
|
}
|
|
}
|
|
- this.nodeObfuscators.get(node.type).forEach((obfuscator) => {
|
|
|
|
- new obfuscator(this.nodes, this.options).obfuscateNode(node, parentNode);
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- obfuscate(node) {
|
|
|
|
- estraverse.replace(node, {
|
|
|
|
- leave: (node, parentNode) => {
|
|
|
|
- this.initializeNodeObfuscators(node, parentNode);
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- setNewNodes() {
|
|
|
|
- if (this.options['selfDefending']) {
|
|
|
|
- this.setNodesGroup(new SelfDefendingNodesGroup_1.SelfDefendingNodesGroup(this.options));
|
|
|
|
|
|
+ }, {
|
|
|
|
+ key: 'setNode',
|
|
|
|
+ value: function setNode(nodeName, node) {
|
|
|
|
+ this.nodes.set(nodeName, node);
|
|
}
|
|
}
|
|
- if (this.options['disableConsoleOutput']) {
|
|
|
|
- this.setNode('consoleOutputDisableExpressionNode', new ConsoleOutputDisableExpressionNode_1.ConsoleOutputDisableExpressionNode());
|
|
|
|
|
|
+ }, {
|
|
|
|
+ key: 'setNodesGroup',
|
|
|
|
+ value: function setNodesGroup(nodesGroup) {
|
|
|
|
+ var _this = this;
|
|
|
|
+
|
|
|
|
+ var nodes = nodesGroup.getNodes();
|
|
|
|
+ nodes.forEach(function (node, key) {
|
|
|
|
+ _this.nodes.set(key, node);
|
|
|
|
+ });
|
|
}
|
|
}
|
|
- if (this.options['debugProtection']) {
|
|
|
|
- this.setNodesGroup(new DebugProtectionNodesGroup_1.DebugProtectionNodesGroup(this.options));
|
|
|
|
|
|
+ }, {
|
|
|
|
+ key: 'afterObfuscation',
|
|
|
|
+ value: function afterObfuscation(astTree) {
|
|
|
|
+ this.nodes.forEach(function (node) {
|
|
|
|
+ if (node.getAppendState() === AppendState_1.AppendState.AfterObfuscation) {
|
|
|
|
+ node.appendNode(astTree);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
}
|
|
}
|
|
- if (this.options['unicodeArray']) {
|
|
|
|
- this.setNodesGroup(new UnicodeArrayNodesGroup_1.UnicodeArrayNodesGroup(this.options));
|
|
|
|
|
|
+ }, {
|
|
|
|
+ key: 'beforeObfuscation',
|
|
|
|
+ value: function beforeObfuscation(astTree) {
|
|
|
|
+ this.nodes.forEach(function (node) {
|
|
|
|
+ if (node.getAppendState() === AppendState_1.AppendState.BeforeObfuscation) {
|
|
|
|
+ node.appendNode(astTree);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
}
|
|
}
|
|
- }
|
|
|
|
-}
|
|
|
|
|
|
+ }, {
|
|
|
|
+ key: 'initializeNodeObfuscators',
|
|
|
|
+ value: function initializeNodeObfuscators(node, parentNode) {
|
|
|
|
+ var _this2 = this;
|
|
|
|
+
|
|
|
|
+ if (!this.nodeObfuscators.has(node.type)) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ this.nodeObfuscators.get(node.type).forEach(function (obfuscator) {
|
|
|
|
+ new obfuscator(_this2.nodes, _this2.options).obfuscateNode(node, parentNode);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }, {
|
|
|
|
+ key: 'obfuscate',
|
|
|
|
+ value: function obfuscate(node) {
|
|
|
|
+ var _this3 = this;
|
|
|
|
+
|
|
|
|
+ estraverse.replace(node, {
|
|
|
|
+ leave: function leave(node, parentNode) {
|
|
|
|
+ _this3.initializeNodeObfuscators(node, parentNode);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }, {
|
|
|
|
+ key: 'setNewNodes',
|
|
|
|
+ value: function setNewNodes() {
|
|
|
|
+ if (this.options['selfDefending']) {
|
|
|
|
+ this.setNodesGroup(new SelfDefendingNodesGroup_1.SelfDefendingNodesGroup(this.options));
|
|
|
|
+ }
|
|
|
|
+ if (this.options['disableConsoleOutput']) {
|
|
|
|
+ this.setNode('consoleOutputDisableExpressionNode', new ConsoleOutputDisableExpressionNode_1.ConsoleOutputDisableExpressionNode());
|
|
|
|
+ }
|
|
|
|
+ if (this.options['debugProtection']) {
|
|
|
|
+ this.setNodesGroup(new DebugProtectionNodesGroup_1.DebugProtectionNodesGroup(this.options));
|
|
|
|
+ }
|
|
|
|
+ if (this.options['unicodeArray']) {
|
|
|
|
+ this.setNodesGroup(new UnicodeArrayNodesGroup_1.UnicodeArrayNodesGroup(this.options));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }]);
|
|
|
|
+
|
|
|
|
+ return Obfuscator;
|
|
|
|
+}();
|
|
|
|
+
|
|
exports.Obfuscator = Obfuscator;
|
|
exports.Obfuscator = Obfuscator;
|