MethodDefinitionObfuscator.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import * as estraverse from 'estraverse';
  2. import { IMethodDefinitionNode } from "../interfaces/nodes/IMethodDefinitionNode";
  3. import { INode } from "../interfaces/nodes/INode";
  4. import { NodeObfuscator } from './NodeObfuscator';
  5. import { NodeUtils } from "../NodeUtils";
  6. import { Utils } from "../Utils";
  7. /**
  8. * replaces:
  9. * function foo () { //... };
  10. * foo();
  11. *
  12. * on:
  13. * function _0x12d45f () { //... };
  14. * _0x12d45f();
  15. */
  16. export class MethodDefinitionObfuscator extends NodeObfuscator {
  17. /**
  18. * @type {string[]}
  19. */
  20. private ignoredNames: string[] = ['constructor'];
  21. /**
  22. * @param methodDefinitionNode
  23. * @param parentNode
  24. */
  25. public obfuscateNode (methodDefinitionNode: IMethodDefinitionNode, parentNode: INode): void {
  26. this.replaceMethodName(methodDefinitionNode);
  27. }
  28. /**
  29. * @param methodDefinitionNode
  30. */
  31. private replaceMethodName (methodDefinitionNode: IMethodDefinitionNode): void {
  32. estraverse.replace(methodDefinitionNode.key, {
  33. leave: (node: INode): any => {
  34. if (
  35. NodeUtils.isIdentifierNode(node) &&
  36. !Utils.arrayContains(this.ignoredNames, node.name) &&
  37. methodDefinitionNode.computed === false
  38. ) {
  39. methodDefinitionNode.computed = true;
  40. node.name = this.replaceLiteralStringByUnicodeArrayTranslatorCall(node.name);
  41. return;
  42. }
  43. return estraverse.VisitorOption.Skip;
  44. }
  45. });
  46. }
  47. }