ConsoleOutputDisableExpressionNode.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. "use strict";
  2. const esprima = require('esprima');
  3. const estraverse = require('estraverse');
  4. const Node_1 = require('./Node');
  5. const NodeUtils_1 = require("../NodeUtils");
  6. class ConsoleOutputDisableExpressionNode extends Node_1.Node {
  7. constructor(astTree) {
  8. super();
  9. this.astTree = astTree;
  10. this.node = this.getNodeStructure();
  11. }
  12. appendNode() {
  13. estraverse.replace(this.astTree, {
  14. leave: (node, parent) => {
  15. if (NodeUtils_1.NodeUtils.isProgramNode(node)) {
  16. NodeUtils_1.NodeUtils.prependNode(node.body, this.getNode());
  17. return estraverse.VisitorOption.Break;
  18. }
  19. return estraverse.VisitorOption.Skip;
  20. }
  21. });
  22. }
  23. getNodeStructure() {
  24. return NodeUtils_1.NodeUtils.getBlockScopeNodeByIndex(esprima.parse(`
  25. (function () {
  26. var _ = '(\u0004\u0006\u0003\u0005[]' + '["filter"]["\u0007tructor"]' + '("return this")()' + '.' + '\u0003;\u0006\u0002\u0005\u0004};' + '_\u0003.log\u0001.in' + 'fo\u0001.' + 'war' + 'n\u0001.er' + 'r' + 'or\u0001})();' + '\u0001\u0005_\u0002;' + '_\u0003\u0002function' + '\u0003\u0007ole\u0004\u0002 ()' + '{\u0005 = \u0006var ' + '_\u0007cons',
  27. Y,
  28. $;
  29. for (Y in $ = "\u0007\u0006\u0005\u0004\u0003\u0002\u0001") {
  30. var arr = _.split($[Y]);
  31. _ = arr.join(arr.pop());
  32. }
  33. []["filter"]["constructor"](_)();
  34. })()
  35. `));
  36. }
  37. }
  38. exports.ConsoleOutputDisableExpressionNode = ConsoleOutputDisableExpressionNode;