无限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