SelfDefendingCustomNodesFactory.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { injectable, inject } from 'inversify';
  2. import { ServiceIdentifiers } from '../../../container/ServiceIdentifiers';
  3. import { TCustomNodeFactory } from '../../../types/container/TCustomNodeFactory';
  4. import { TObfuscationEvent } from '../../../types/event-emitters/TObfuscationEvent';
  5. import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode';
  6. import { IOptions } from '../../../interfaces/options/IOptions';
  7. import { IStackTraceData } from '../../../interfaces/stack-trace-analyzer/IStackTraceData';
  8. import { CustomNodes } from '../../../enums/container/CustomNodes';
  9. import { ObfuscationEvents } from '../../../enums/ObfuscationEvents';
  10. import { AbstractCustomNodesFactory } from '../../AbstractCustomNodesFactory';
  11. import { NodeAppender } from '../../../node/NodeAppender';
  12. import { Utils } from '../../../Utils';
  13. @injectable()
  14. export class SelfDefendingCustomNodesFactory extends AbstractCustomNodesFactory {
  15. /**
  16. * @type {TObfuscationEvent}
  17. */
  18. protected appendEvent: TObfuscationEvent = ObfuscationEvents.AfterObfuscation;
  19. /**
  20. * @type {TCustomNodeFactory}
  21. */
  22. private readonly customNodeFactory: TCustomNodeFactory;
  23. /**
  24. * @param customNodeFactory
  25. * @param options
  26. */
  27. constructor (
  28. @inject(ServiceIdentifiers['Factory<ICustomNode>']) customNodeFactory: TCustomNodeFactory,
  29. @inject(ServiceIdentifiers.IOptions) options: IOptions
  30. ) {
  31. super(options);
  32. this.customNodeFactory = customNodeFactory;
  33. }
  34. /**
  35. * @param stackTraceData
  36. * @returns {Map<string, ICustomNode>}
  37. */
  38. public initializeCustomNodes (stackTraceData: IStackTraceData[]): Map <string, ICustomNode> | undefined {
  39. if (!this.options.selfDefending) {
  40. return;
  41. }
  42. const callsControllerFunctionName: string = Utils.getRandomVariableName();
  43. const randomStackTraceIndex: number = NodeAppender.getRandomStackTraceIndex(stackTraceData.length);
  44. const selfDefendingUnicodeNode: ICustomNode = this.customNodeFactory(CustomNodes.SelfDefendingUnicodeNode);
  45. const nodeCallsControllerFunctionNode: ICustomNode = this.customNodeFactory(CustomNodes.NodeCallsControllerFunctionNode);
  46. selfDefendingUnicodeNode.initialize(callsControllerFunctionName, randomStackTraceIndex);
  47. nodeCallsControllerFunctionNode.initialize(callsControllerFunctionName, randomStackTraceIndex);
  48. return this.syncCustomNodesWithNodesFactory(new Map <string, ICustomNode> ([
  49. ['selfDefendingUnicodeNode', selfDefendingUnicodeNode],
  50. ['SelfDefendingNodeCallsControllerFunctionNode', nodeCallsControllerFunctionNode]
  51. ]));
  52. }
  53. }