JS调试过debugger
主要是两种方式:
1.在浏览器控制台,找到debugger代码位置,在所在行开头直接右键,点击“一律不再此处停止”
2.针对使用构造器constructor执行debugger,需要通过重写构造器过掉debugger。
let _constructor = constructor; //let在有的浏览器中可能要换成 var
Function.prototype.constructor = function(s) {
if ( s== "debugger") {
console.log(s);
return null;
}
return _constructor(s);
}
以上两种方法的组合,可以解决 80% 的debugger问题。
剩余的 20% 靠个人能力和天赋了。
Hook JSON的方式
今天在观*网站上使用下面这段代码 hook 的时候,发现了 console.log方法没有打印日志。
//hook代码
(function() {
var _stringify = JSON.stringify;
JSON.stringify = function(ps) {
console.log("Hook JSON.stringify ——> ", ps);
debugger;
return _stringify(ps); // 不改变原有的执行逻辑
}
})();
便猜到了,为了反爬,网站的开发者将 console.log 方法禁用了。于是只能请出了另一段代码,可以重新打印日志。
(function(){
var iframe = document.createElement('iframe')
document.body.appendChild(iframe)
window.console = iframe.contentWindow.console
}())
