FunctionObfuscator.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. "use strict";
  2. const estraverse = require('estraverse');
  3. const NodeObfuscator_1 = require('./NodeObfuscator');
  4. const NodeUtils_1 = require("../NodeUtils");
  5. const Utils_1 = require('../Utils');
  6. class FunctionObfuscator extends NodeObfuscator_1.NodeObfuscator {
  7. constructor(...args) {
  8. super(...args);
  9. this.functionParams = new Map();
  10. }
  11. obfuscateNode(functionNode) {
  12. this.replaceFunctionParams(functionNode);
  13. this.replaceFunctionParamsInBody(functionNode);
  14. }
  15. replaceFunctionParams(functionNode) {
  16. functionNode.params.forEach((paramsNode) => {
  17. estraverse.replace(paramsNode, {
  18. leave: (node) => {
  19. if (NodeUtils_1.NodeUtils.isIdentifierNode(node)) {
  20. this.functionParams.set(node.name, Utils_1.Utils.getRandomVariableName());
  21. node.name = this.functionParams.get(node.name);
  22. return;
  23. }
  24. return estraverse.VisitorOption.Skip;
  25. }
  26. });
  27. });
  28. }
  29. replaceFunctionParamsInBody(functionNode) {
  30. estraverse.replace(functionNode.body, {
  31. leave: (node, parentNode) => {
  32. this.replaceNodeIdentifierByNewValue(node, parentNode, this.functionParams);
  33. }
  34. });
  35. }
  36. }
  37. exports.FunctionObfuscator = FunctionObfuscator;