【web安全】js逆向之绕过无限debugger

总结一下常用的绕过无限debugger的方法

Never pause here

这是最简单的方法,在 debugger 位置,点击行号,右键 Never pause here,即永远不在此次断下

image

这种方法很简单,但是在很多网站上都无效

文件替换

主要思路是定位到触发debugger的代码行,然后启用本地文件替换,删除对应代码行

比如这里触发了debugger,追调用栈到最顶层

image

定位到触发dubber的代码

image

右键源码文件,选择替换内容

image

把这一行注释或者删除掉,保存即可

image

刷新页面,重新加载页面,就会使用本地的源码文件替换,从而绕过debugger

这种方法也不具有通用性

Hook解决

还可以通过hook触发debugger的代码来解决,首先需要定位debugger是如何触发的,比如通过constructor

image

进行Hook,如果constructor参数为“debugger”,则不执行操作

Function.prototype.constructor_ = Function.prototype.constructor;
Function.prototype.constructor = function (a) {
    if(a == "debugger") {
        return function (){};
    }
    return Function.prototype.constructor_(a);
};

或者hook定时器setInterval,如果参数time == 2000,则不执行操作

// Hook setInterval
var setInterval_ = setInterval
setInterval = function (func, time){
    if (time == 2000) {
        return function () {};
    }
    return setInterval_(func, time)
}

总之需要根据具体场景,编写Hook代码

通杀之编译js

吾爱破解上有师傅提出的:https://www.52pojie.cn//thread-1868749-1-1.html

方法大致就是在js源码里把debugger关键字给替换掉,比如替换成xebugger,然后进行编译,编译后的node就无法调用debugger了

但是对于chrome来说,其内置了v8引擎,重新编译v8是比较麻烦的,作者使用了比较暴力但有效的方法,直接修改chrome.dll中的debugger为xebugger

image

接着再使用debugger就提示找不到了,绕过了chrome的编译问题

通杀之火狐

Firefox 更新到 121.0 之后,多了一个 Pause on debugger statement(在调试器语句上暂停)选项,这个新选项是默认勾选的,即不禁用,理论上,取消勾选之后,就能绕过无限 debugger

取消勾选即可

image

根据实际测试,取消勾选 Pause on debugger statement 确实能直接绕过无限 debugger