无限debugger与JS Hook(1)
全局禁用断点
通过浏览器全局禁用断点来达到绕过无限debugger的1目的,但是用之后无法设置断点进行调试
一律不在此处暂停
以 https://www.4399.com/flash/18012.htm 为例:
- 按下F12和其他快捷键发现没反应,点击右上角的设置
- 在此处打开开发者工具
- 打开后发现进入了断点调试状态
- 在这个断点处设置一律不再此处暂停,成功pass掉第一个断点
- 然后发现又进入了下一个断点,这个断点就无法通过简单的一律不在此处暂停来pass,因为它是动态生成的,需要用到下面讲到的一些方法来pass掉
设置条件断点
- 也是在这个工具栏设置,点击添加
条件断点
,之后程序便会工具条件的真与假来选择是否执行该行代码
构造器绕过
Function.prototype.constructor
- 无限debugger通常通过
new Function('debugger')
或Function.constructor('debugger')
动态生成包含断点的函数- 这样,我们通过修改其原型的构造器就能够做到bypass动态生成的无限debugger
下面以我们上面提到的4399为例,直接执行图中的脚本
- 这样,我们通过修改其原型的构造器就能够做到bypass动态生成的无限debugger
var _constructor = constructor;
Function.prototype.constructor = function(s) {
if (s == "debugger") {
console.log(s);
return null;
}
return _constructor(s);
}
成功干掉了这个动态生成的debugger,现在4399提醒我登录才能游玩
全局搜索一下,找到这串代码(疯狂调试模式),果然是通过Function.prototype.constructor来构造的
但是,这并不是通用的,有些网站会使用到call/apply
来动态生成。不过绕过的方法是类似的