NodeObfuscator.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. "use strict";
  2. const JSFuck_1 = require("../enums/JSFuck");
  3. const NodeUtils_1 = require("../NodeUtils");
  4. const Utils_1 = require('../Utils');
  5. class NodeObfuscator {
  6. constructor(nodes) {
  7. this.nodes = nodes;
  8. }
  9. replaceNodeIdentifierByNewValue(node, parentNode, namesMap) {
  10. if (NodeUtils_1.NodeUtils.isIdentifierNode(node) && namesMap.has(node.name)) {
  11. if ((NodeUtils_1.NodeUtils.isPropertyNode(parentNode) && parentNode.key === node) ||
  12. (NodeUtils_1.NodeUtils.isMemberExpressionNode(parentNode) && parentNode.computed === false && parentNode.property === node)) {
  13. return;
  14. }
  15. node.name = namesMap.get(node.name);
  16. }
  17. }
  18. replaceLiteralBooleanByJSFuck(nodeValue) {
  19. return nodeValue ? JSFuck_1.JSFuck.True : JSFuck_1.JSFuck.False;
  20. }
  21. replaceLiteralNumberByHexadecimalValue(nodeValue) {
  22. const prefix = '0x';
  23. if (!Utils_1.Utils.isInteger(nodeValue)) {
  24. return String(nodeValue);
  25. }
  26. return `${prefix}${Utils_1.Utils.decToHex(nodeValue)}`;
  27. }
  28. replaceLiteralStringByArrayElement(nodeValue) {
  29. let value = Utils_1.Utils.stringToUnicode(nodeValue), unicodeArray = this.nodes.get('unicodeArrayNode').getNodeData(), sameIndex = unicodeArray.indexOf(value), index, hexadecimalIndex;
  30. if (sameIndex < 0) {
  31. index = unicodeArray.length;
  32. unicodeArray.push(Utils_1.Utils.stringToUnicode(nodeValue));
  33. }
  34. else {
  35. index = sameIndex;
  36. }
  37. hexadecimalIndex = this.replaceLiteralNumberByHexadecimalValue(index);
  38. return `${this.nodes.get('unicodeArrayNode').getNodeIdentifier()}[${hexadecimalIndex}]`;
  39. }
  40. }
  41. exports.NodeObfuscator = NodeObfuscator;