JS调试过debugger和Hook JSON的方式

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
}())