Obfuscator.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. "use strict";
  2. 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; }; }();
  3. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  4. var estraverse = require('estraverse');
  5. var AppendState_1 = require('./enums/AppendState');
  6. var NodeType_1 = require('./enums/NodeType');
  7. var CatchClauseObfuscator_1 = require('./node-obfuscators/CatchClauseObfuscator');
  8. var ConsoleOutputDisableExpressionNode_1 = require('./custom-nodes/console-output-nodes/ConsoleOutputDisableExpressionNode');
  9. var DebugProtectionNodesGroup_1 = require('./node-groups/DebugProtectionNodesGroup');
  10. var FunctionDeclarationObfuscator_1 = require('./node-obfuscators/FunctionDeclarationObfuscator');
  11. var FunctionObfuscator_1 = require('./node-obfuscators/FunctionObfuscator');
  12. var LiteralObfuscator_1 = require('./node-obfuscators/LiteralObfuscator');
  13. var MemberExpressionObfuscator_1 = require('./node-obfuscators/MemberExpressionObfuscator');
  14. var MethodDefinitionObfuscator_1 = require('./node-obfuscators/MethodDefinitionObfuscator');
  15. var NodeUtils_1 = require("./NodeUtils");
  16. var ObjectExpressionObfuscator_1 = require('./node-obfuscators/ObjectExpressionObfuscator');
  17. var SelfDefendingNodesGroup_1 = require("./node-groups/SelfDefendingNodesGroup");
  18. var UnicodeArrayNodesGroup_1 = require('./node-groups/UnicodeArrayNodesGroup');
  19. var VariableDeclarationObfuscator_1 = require('./node-obfuscators/VariableDeclarationObfuscator');
  20. var Obfuscator = function () {
  21. function Obfuscator() {
  22. var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
  23. _classCallCheck(this, Obfuscator);
  24. this.nodes = new Map();
  25. 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]]]);
  26. this.options = options;
  27. }
  28. _createClass(Obfuscator, [{
  29. key: 'obfuscateNode',
  30. value: function obfuscateNode(node) {
  31. this.setNewNodes();
  32. NodeUtils_1.NodeUtils.parentize(node);
  33. this.beforeObfuscation(node);
  34. this.obfuscate(node);
  35. this.afterObfuscation(node);
  36. return node;
  37. }
  38. }, {
  39. key: 'setNode',
  40. value: function setNode(nodeName, node) {
  41. this.nodes.set(nodeName, node);
  42. }
  43. }, {
  44. key: 'setNodesGroup',
  45. value: function setNodesGroup(nodesGroup) {
  46. var _this = this;
  47. var nodes = nodesGroup.getNodes();
  48. nodes.forEach(function (node, key) {
  49. _this.nodes.set(key, node);
  50. });
  51. }
  52. }, {
  53. key: 'afterObfuscation',
  54. value: function afterObfuscation(astTree) {
  55. this.nodes.forEach(function (node) {
  56. if (node.getAppendState() === AppendState_1.AppendState.AfterObfuscation) {
  57. node.appendNode(astTree);
  58. }
  59. });
  60. }
  61. }, {
  62. key: 'beforeObfuscation',
  63. value: function beforeObfuscation(astTree) {
  64. this.nodes.forEach(function (node) {
  65. if (node.getAppendState() === AppendState_1.AppendState.BeforeObfuscation) {
  66. node.appendNode(astTree);
  67. }
  68. });
  69. }
  70. }, {
  71. key: 'initializeNodeObfuscators',
  72. value: function initializeNodeObfuscators(node, parentNode) {
  73. var _this2 = this;
  74. if (!this.nodeObfuscators.has(node.type)) {
  75. return;
  76. }
  77. this.nodeObfuscators.get(node.type).forEach(function (obfuscator) {
  78. new obfuscator(_this2.nodes, _this2.options).obfuscateNode(node, parentNode);
  79. });
  80. }
  81. }, {
  82. key: 'obfuscate',
  83. value: function obfuscate(node) {
  84. var _this3 = this;
  85. estraverse.replace(node, {
  86. leave: function leave(node, parentNode) {
  87. _this3.initializeNodeObfuscators(node, parentNode);
  88. }
  89. });
  90. }
  91. }, {
  92. key: 'setNewNodes',
  93. value: function setNewNodes() {
  94. if (this.options['selfDefending']) {
  95. this.setNodesGroup(new SelfDefendingNodesGroup_1.SelfDefendingNodesGroup(this.options));
  96. }
  97. if (this.options['disableConsoleOutput']) {
  98. this.setNode('consoleOutputDisableExpressionNode', new ConsoleOutputDisableExpressionNode_1.ConsoleOutputDisableExpressionNode());
  99. }
  100. if (this.options['debugProtection']) {
  101. this.setNodesGroup(new DebugProtectionNodesGroup_1.DebugProtectionNodesGroup(this.options));
  102. }
  103. if (this.options['unicodeArray']) {
  104. this.setNodesGroup(new UnicodeArrayNodesGroup_1.UnicodeArrayNodesGroup(this.options));
  105. }
  106. }
  107. }]);
  108. return Obfuscator;
  109. }();
  110. exports.Obfuscator = Obfuscator;