LiteralObfuscator.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import * as escodegen from 'escodegen';
  2. import { ILiteralNode } from "../interfaces/nodes/ILiteralNode";
  3. import { INode } from "../interfaces/nodes/INode";
  4. import { NodeObfuscator } from './NodeObfuscator';
  5. import { NodeUtils } from "../NodeUtils";
  6. export class LiteralObfuscator extends NodeObfuscator {
  7. /**
  8. * @param literalNode
  9. * @param parentNode
  10. */
  11. public obfuscateNode (literalNode: ILiteralNode, parentNode: INode): void {
  12. if (NodeUtils.isPropertyNode(parentNode) && parentNode.key === literalNode) {
  13. return;
  14. }
  15. if (literalNode['x-verbatim-property']) {
  16. return;
  17. }
  18. let content: string;
  19. switch (typeof literalNode.value) {
  20. case 'boolean':
  21. content = this.replaceLiteralBooleanByJSFuck(<boolean>literalNode.value);
  22. break;
  23. case 'number':
  24. content = this.replaceLiteralNumberByHexadecimalValue(<number>literalNode.value);
  25. break;
  26. case 'string':
  27. content = this.replaceLiteralStringByUnicodeArrayCall(<string>literalNode.value);
  28. break;
  29. default:
  30. return;
  31. }
  32. literalNode['x-verbatim-property'] = {
  33. content : content,
  34. precedence: escodegen.Precedence.Primary
  35. };
  36. }
  37. }