123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- "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 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 ObjectExpressionObfuscator_1 = require('./node-obfuscators/ObjectExpressionObfuscator');
- const UnicodeArrayNode_1 = require('./nodes/UnicodeArrayNode');
- const UnicodeArrayNodesGroup_1 = require('./node-groups/UnicodeArrayNodesGroup');
- const Utils_1 = require('./Utils');
- const VariableDeclarationObfuscator_1 = require('./node-obfuscators/VariableDeclarationObfuscator');
- class Obfuscator {
- constructor(options = {}) {
- 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.options = options;
- }
- obfuscateNode(node) {
- if (this.options['rotateUnicodeArray']) {
- this.setNodesGroup(new UnicodeArrayNodesGroup_1.UnicodeArrayNodesGroup(node));
- }
- else {
- this.setNode('unicodeArrayNode', new UnicodeArrayNode_1.UnicodeArrayNode(node, Utils_1.Utils.getRandomVariableName(UnicodeArrayNode_1.UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH)));
- }
- this.beforeObfuscation(node);
- estraverse.replace(node, {
- enter: (node, parent) => this.nodeControllerFirstPass(node, parent)
- });
- estraverse.replace(node, {
- leave: (node, parent) => this.nodeControllerSecondPass(node, parent)
- });
- this.afterObfuscation(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(node) {
- this.nodes.forEach((node) => {
- if (node.getAppendState() === AppendState_1.AppendState.AfterObfuscation) {
- node.appendNode();
- }
- });
- }
- beforeObfuscation(node) {
- this.nodes.forEach((node) => {
- if (node.getAppendState() === AppendState_1.AppendState.BeforeObfuscation) {
- node.appendNode();
- }
- });
- }
- ;
- nodeControllerFirstPass(node, parent) {
- Object.defineProperty(node, 'parentNode', {
- configurable: true,
- enumerable: true,
- value: parent || node,
- writable: true
- });
- }
- nodeControllerSecondPass(node, parent) {
- switch (node.type) {
- default:
- this.initializeNodeObfuscators(node, parent);
- }
- }
- initializeNodeObfuscators(node, parent) {
- if (!this.nodeObfuscators.has(node.type)) {
- return;
- }
- this.nodeObfuscators.get(node.type).forEach((obfuscator) => {
- new obfuscator(this.nodes).obfuscateNode(node, parent);
- });
- }
- }
- exports.Obfuscator = Obfuscator;
|