Bypass Debugger
# Bypass Debugger
# 脚本描述
绕过无限Debugger, 如绕不过去或报错请使用火狐浏览器忽略断点。
# 使用场景
当打开控制台后一直弹出debugger,即可使用本脚本进行绕过。
打开后成功绕过,现在就不会弹无限debugger了:

# 常见问题
开启后如果还存在debugger或者控制台报错,可能是由于以下问题导致:
# 代码写死触发无限debugger
例如通过定时器触发无限debugger:
setInterval(function() {
debugger;
}, 1);
1
2
3
2
3
效果:
开启后也依然弹出debugger。
出现这种原因主要是因为我没有在脚本中hook诸如setInterval之类的定时器方法,不hook是因为很多网站都会用到这个方法,hook之后可能会出现一些本不应该出现的报错。但实际上这种绕过也是非常的简单:
右击debugger这一行:

点击
一律不在此处暂停:
现在就不会弹出无限debugger了:

# eval作用域问题导致报错
我在原脚本中Hook了eval,因为eval也有可能拿来触发无限debugger:

但实际上hook了eval之后,会触发作用域问题,例如开启之后控制台出现以下的场景,就证明触发了eval作用域问题:
我在24年研究过这个问题,如果感兴趣可以看一下我写的这篇文章:JS逆向系列-深入探究Hook eval后存在的作用域问题
我在这里就不详讲了,总之目前没有方案解决这个问题。
# 其他问题
当然也有可能某些网站使用了本脚本未应用的反制方案触发了无限debugger,此时可切换至火狐浏览器无视debugger进行调试。当然也可以联系我提供相关案例(vx:I-0xsdeo)。
# 核心原理
目前引起无限Debugger的三种核心方式为:
eval
Function
Function.prototype.constructor
本脚本通过hook以上三种核心方式以绕过无限debugger。
更具体的脚本原理参见我以前写的文章:JS逆向系列-Bypass Debugger