无限debugger
一. eval('debugger') 实现
解决方式:hook eval
_eval = eval;eval= function(){if (arguments[0].indexOf('debugger') === -1)return _eval(arguments[0])}
- 保存原始的
eval函数:借助_eval = eval,把原始的全局eval函数保存到_eval变量里。 - 重新定义
eval函数:- 当新的
eval函数被调用时,它会先查看传入的第一个参数(也就是要执行的代码字符串)中是否包含debugger字符串。 - 一旦发现包含
debugger,该函数就会直接返回undefined,不会执行这段代码。 - 若不包含
debugger,则会调用之前保存的原始eval函数来执行代码
- 当新的
二 . 添加script标签,插入debugger
cont = document.body;
var newScript = document.createElement("script");
newScript.type = "text/javascript";
newScript.innerHTML = "debugger";
cont.appendChild(newScript);
解决方案:document.createElement里面把script重写
扩展


hook 原型链 解决无限debugger
_appendChild = Node.prototype.appendChild;
Node.prototype.appendChild = function () {if (arguments[0].innerHTML &&arguments[0