哈喽,大家好,小编等你很久了呢,今天我们一起学起新的内容吧!
目录
1.案例介绍
2.实现原理
3.禁用断点
4.替换文件
debugger是什么呢?我相信很多小伙伴听起来都是懵的状态,别怕,竖起耳朵听我细细道来!
debugger是JavaScript Hook时们可以加入debugger关键字,让它在关键位置停下来,以便查找逆向突破口,有的时候,debugger也会被开发者利用,阻止我们正常调试的拦路虎,这一篇介绍一个案例来绕过debugger。
1.案例介绍
我们先看一个案例(Scrape | Movie),打开这个网站,和之前的网站没什么不同,但是,一旦我们进入开发者模式,就会进入断点模式,
我们既没有设置断点模式,也没有执行任何额外的脚本,他就直接进入断点模式,这时候我们可以点击Resume scriptexecution(恢复脚本执行按钮),尝试跳过这个断点继续执行,
然而我们不管点击多少次,它仍然一次次的进入断点模式,无限循环下去,我们称这样的情况为无限debugger。
怎么办呢?是不是就无法正常添加断点调试了,又什么解决办法?
办法是有的,这篇我们就来总结一下无限debugger的对应方案。
2.实现原理
我们首先要做的就是找到无限debugger源头,在面板中可以看到,debugger出现在一个JavaScript文件里,点击左下角格式化 符号“{ }”,
格式化后可以发现这里通过setinterval循环,每秒执行1次debugger语句.
当然,还有很多类似的实现,如for循环,无限while循环等,它们都可以实现这样的效果,大同小异,对症下药!
3.禁用断点
因为debugger其实就对应一个断点,相当于断点显示声明了一个断点,解除它,我们只需要禁用这个断点就好了。
首先,我们仅用所有断点,全局禁用开关位于Sources右上角,叫做Deactivate breakpoints,
这时候我们重新点击一下Resume scriptexecution,跳过当前断点,页面就不会进入无限 debugger状态了,但是这种全局禁用并不是一个好的方案,因为禁用之后我们也无法在其他位置增加断点进行调试,所有断点失效。这时候我们可以选择禁用局部断点,取消刚才的Deactivate breakpoints页面就会重新进入无限debugger模式,我们尝试另一种方法跳过无限debugger。
我们现将当前Breakpoints里面的断点删除,然后再debugger语句所在行号上右击,会出现一个快捷菜单,右击后会有Never pause here选项,
选择这个选项,当前断点显示为橙色,并且断点前面多了一个?号,同时breakpoints出现了刚才断点的位置,再次单击Add conditional breakpoint.
这个模式更加高级,我们可以设置进入断点的条件,调试过程中,期望某个变量值大于某个具体指时候才停下来,但本篇中,这里是无限循环,没有什么变量可以作为判定依据,可以简单些一个表达式来控制,选择了Add conditional breakpoint.后,直接填入false即可,此时的效果就和选择Never pause here选项一样,重新点击Resume scrip execution按钮,也不会进入无限Debugger循环了。
4.替换文件
我们将当前的Java script 文件复制到文本编辑器中,删除或者直接注释debugger这个关键字,修改如下:
setInterval((function(){
// debugger; //可以直接删除此行或者注释次行
console.log("debugger")
}
打开Sources面板下Overrides面板,修改后完整的复制进去,替换完成后,就会发现不会进入无限debugeer模式了。
本期内容就到这里啦!打字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找!