【web安全】js逆向之绕过无限debugger
总结一下常用的绕过无限debugger的方法
Never pause here
这是最简单的方法,在 debugger 位置,点击行号,右键 Never pause here,即永远不在此次断下
这种方法很简单,但是在很多网站上都无效
文件替换
主要思路是定位到触发debugger的代码行,然后启用本地文件替换,删除对应代码行
比如这里触发了debugger,追调用栈到最顶层
定位到触发dubber的代码
右键源码文件,选择替换内容
把这一行注释或者删除掉,保存即可
刷新页面,重新加载页面,就会使用本地的源码文件替换,从而绕过debugger
这种方法也不具有通用性
Hook解决
还可以通过hook触发debugger的代码来解决,首先需要定位debugger是如何触发的,比如通过constructor
进行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
接着再使用debugger就提示找不到了,绕过了chrome的编译问题
通杀之火狐
Firefox 更新到 121.0 之后,多了一个 Pause on debugger statement(在调试器语句上暂停)选项,这个新选项是默认勾选的,即不禁用,理论上,取消勾选之后,就能绕过无限 debugger
取消勾选即可
根据实际测试,取消勾选 Pause on debugger statement 确实能直接绕过无限 debugger