FunctionDeclarationObfuscator.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. "use strict";
  2. const NodeObfuscator_1 = require('./NodeObfuscator');
  3. const Utils_1 = require('../Utils');
  4. let estraverse = require('estraverse');
  5. class FunctionDeclarationObfuscator extends NodeObfuscator_1.NodeObfuscator {
  6. constructor(...args) {
  7. super(...args);
  8. this.functionName = new Map();
  9. }
  10. obfuscateNode(functionDeclarationNode, parentNode) {
  11. if (parentNode.type === 'Program') {
  12. return;
  13. }
  14. this.replaceFunctionName(functionDeclarationNode);
  15. this.replaceFunctionCalls(parentNode);
  16. }
  17. replaceFunctionName(functionDeclarationNode) {
  18. estraverse.replace(functionDeclarationNode.id, {
  19. leave: (node) => {
  20. if (node.type !== 'Identifier') {
  21. return;
  22. }
  23. this.functionName.set(node.name, Utils_1.Utils.getRandomVariableName());
  24. node.name = this.functionName.get(node.name);
  25. }
  26. });
  27. }
  28. replaceFunctionCalls(functionParentNode) {
  29. estraverse.replace(functionParentNode, {
  30. leave: (node, parentNode) => {
  31. this.replaceNodeIdentifierByNewValue(node, parentNode, this.functionName);
  32. }
  33. });
  34. }
  35. }
  36. exports.FunctionDeclarationObfuscator = FunctionDeclarationObfuscator;