无限debugger的原理与绕过

发布于:2022-12-19 ⋅ 阅读:(646) ⋅ 点赞:(0)

哈喽,大家好,小编等你很久了呢,今天我们一起学起新的内容吧!

目录

无限debugger的原理与绕过

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模式了。

本期内容就到这里啦!打字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到