Obfuscator.js 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. "use strict";
  2. const AppendState_1 = require('./enums/AppendState');
  3. const FunctionDeclarationObfuscator_1 = require('./node-obfuscators/FunctionDeclarationObfuscator');
  4. const FunctionObfuscator_1 = require('./node-obfuscators/FunctionObfuscator');
  5. const LiteralObfuscator_1 = require('./node-obfuscators/LiteralObfuscator');
  6. const MemberExpressionObfuscator_1 = require('./node-obfuscators/MemberExpressionObfuscator');
  7. const MethodDefinitionObfuscator_1 = require('./node-obfuscators/MethodDefinitionObfuscator');
  8. const ObjectExpressionObfuscator_1 = require('./node-obfuscators/ObjectExpressionObfuscator');
  9. const UnicodeArrayNode_1 = require('./nodes/UnicodeArrayNode');
  10. const UnicodeArrayNodesGroup_1 = require('./node-groups/UnicodeArrayNodesGroup');
  11. const Utils_1 = require('./Utils');
  12. const VariableDeclarationObfuscator_1 = require('./node-obfuscators/VariableDeclarationObfuscator');
  13. let estraverse = require('estraverse');
  14. class Obfuscator {
  15. constructor(options) {
  16. this.nodes = new Map();
  17. this.nodeObfuscators = new Map([
  18. ['ClassDeclaration', [FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator]],
  19. ['FunctionDeclaration', [
  20. FunctionDeclarationObfuscator_1.FunctionDeclarationObfuscator,
  21. FunctionObfuscator_1.FunctionObfuscator
  22. ]],
  23. ['ArrowFunctionExpression', [FunctionObfuscator_1.FunctionObfuscator]],
  24. ['FunctionExpression', [FunctionObfuscator_1.FunctionObfuscator]],
  25. ['MethodDefinition', [MethodDefinitionObfuscator_1.MethodDefinitionObfuscator]],
  26. ['VariableDeclaration', [VariableDeclarationObfuscator_1.VariableDeclarationObfuscator]],
  27. ['ObjectExpression', [ObjectExpressionObfuscator_1.ObjectExpressionObfuscator]],
  28. ['MemberExpression', [MemberExpressionObfuscator_1.MemberExpressionObfuscator]],
  29. ['Literal', [LiteralObfuscator_1.LiteralObfuscator]]
  30. ]);
  31. this.options = {
  32. rotateUnicodeArray: true
  33. };
  34. Object.assign(this.options, options);
  35. }
  36. obfuscateNode(node) {
  37. if (this.options['rotateUnicodeArray']) {
  38. this.setNodesGroup('unicodeArrayNodesGroup', new UnicodeArrayNodesGroup_1.UnicodeArrayNodesGroup(node));
  39. }
  40. else {
  41. this.setNode('unicodeArrayNode', new UnicodeArrayNode_1.UnicodeArrayNode(node, Utils_1.Utils.getRandomVariableName(UnicodeArrayNode_1.UnicodeArrayNode.UNICODE_ARRAY_RANDOM_LENGTH)));
  42. }
  43. this.beforeObfuscation(node);
  44. estraverse.replace(node, {
  45. leave: (node, parent) => this.nodeController(node, parent)
  46. });
  47. this.afterObfuscation(node);
  48. }
  49. setNode(nodeName, node) {
  50. this.nodes.set(nodeName, node);
  51. }
  52. setNodesGroup(groupName, nodesGroup) {
  53. let nodes = nodesGroup.getNodes();
  54. nodes.forEach((node, key) => {
  55. this.nodes.set(key, node);
  56. });
  57. }
  58. afterObfuscation(node) {
  59. this.nodes.forEach((node) => {
  60. if (node.getAppendState() === AppendState_1.AppendState.AfterObfuscation) {
  61. node.appendNode();
  62. }
  63. });
  64. }
  65. beforeObfuscation(node) {
  66. this.nodes.forEach((node) => {
  67. if (node.getAppendState() === AppendState_1.AppendState.BeforeObfuscation) {
  68. node.appendNode();
  69. }
  70. });
  71. }
  72. ;
  73. nodeController(node, parent) {
  74. switch (node.type) {
  75. default:
  76. this.initializeNodeObfuscators(node, parent);
  77. }
  78. }
  79. initializeNodeObfuscators(node, parent) {
  80. if (!this.nodeObfuscators.has(node.type)) {
  81. return;
  82. }
  83. this.nodeObfuscators.get(node.type).forEach((obfuscator) => {
  84. new obfuscator(this.nodes).obfuscateNode(node, parent);
  85. });
  86. }
  87. }
  88. exports.Obfuscator = Obfuscator;
  89. //# sourceMappingURL=Obfuscator.js.map