在JS逆向过程中,无限Debugger是常见的反调试手段,主要通过定时器循环、递归调用等方式反复触发debugger语句来干扰调试。以下是主要的绕过方法:
一、禁用断点
最直接的方法是在开发者工具中右键点击debugger行号,选择"Never pause here"选项,这样调试器会忽略该处的断点。
二、代码替换
利用开发者工具的Overrides功能,将远程JavaScript文件替换为本地修改后的版本,删除或注释掉其中的debugger语句。
三、重写定时器
对于使用setInterval或setTimeout实现的无限debugger,可以通过重写这些定时器函数来阻断其执行:

// 重写setInterval
const originalSetInterval = window.setInterval;
window.setInterval = function(callback, interval) {
    if (callback.toString().includes('debugger')) {
        return 0; // 阻止执行
    }
    return originalSetInterval(callback, interval);
};

 函数Hook
针对通过eval、Function构造函数等动态生成的debugger,可以Hook相关函数进行拦截:

// Hook Function构造函数
const originalFunction = window.Function;
window.Function = function(...args) {
    if (args.some(arg => arg.includes('debugger'))) {
        return function(){}; // 返回空函数
    }
    return originalFunction.apply(this, args);
};

四、条件断点
对于简单的debugger语句,可以设置条件断点,只有当特定条件满足时才暂停,从而避免无限循环。

五、 响应拦截
使用开发者工具的AutoResponse功能,直接将包含debugger的请求替换为清理后的版本。

这些方法可以根据具体的debugger实现方式组合使用,有效绕过各种形式的无限debugger干扰。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐