"use strict";
const esprima = require('esprima');
const Node_1 = require('../Node');
const NodeUtils_1 = require('../../NodeUtils');
const Utils_1 = require("../../Utils");
class DebugProtectionFunctionNode extends Node_1.Node {
constructor(debugProtectionFunctionName, options) {
super(options);
this.debugProtectionFunctionName = debugProtectionFunctionName;
this.node = this.getNodeStructure();
}
appendNode(blockScopeNode) {
let programBodyLength = blockScopeNode.body.length, randomIndex = Utils_1.Utils.getRandomGenerator().integer({
min: 0,
max: programBodyLength
});
NodeUtils_1.NodeUtils.insertNodeAtIndex(blockScopeNode.body, this.getNode(), randomIndex);
}
getNodeIdentifier() {
return this.debugProtectionFunctionName;
}
getNodeStructure() {
return NodeUtils_1.NodeUtils.getBlockStatementNodeByIndex(esprima.parse(`
var ${this.debugProtectionFunctionName} = function () {
function debuggerProtection (counter) {
if (('' + counter / counter)['length'] !== 1 || counter % 20 === 0) {
(function () {}.constructor('debugger')());
} else {
[].filter.constructor(${Utils_1.Utils.stringToJSFuck('debugger')})();
}
debuggerProtection(++counter);
}
try {
debuggerProtection(0);
} catch (y) {}
};
`));
}
}
exports.DebugProtectionFunctionNode = DebugProtectionFunctionNode;
//# sourceMappingURL=DebugProtectionFunctionNode.js.map |