JavaScript逆向爬虫——无限debugger的原理与绕过

debugger 是 JavaScript 中定义的一个专门用于断点调试的关键字,只要遇到它,JavaScript 的执行便会在此处中断,进入调试模式。
有了 debugger 这个关键字,就可以非常方便地对 JavaScript 代码进行调试,比如使用 JavaScript Hook 时,可以加入 debugger 关键字,使其在关键字的位置停下来,以便查找逆向突破口。
但有时候,debugger 会被网站开发者利用,使其成为阻挠我们正常调试的拦路虎——无限 debugger。
结合案例来体验如何绕过无限 debugger。

  1. 案例介绍
    案例网址:https://antispider8.scrape.center/,打开这个网站,一般操作和之前的网站没有啥不同。但是,一旦打开开发者工具,就会发现它立即进入了断点模式,如图所示:

    我们既没有设置任何断点,也没有执行任何额外的脚本,它就直接进入了断点模式。这时候我们可以点击 Resume script execution(恢复脚本执行)按钮,尝试跳过这个断点继续执行,如图所示:

    不管点击多少次按钮,它仍然一次次地进入断点模式,无限循环下去,我们称这样的情况为无限 debugger。
    解决办法是有的。首先介绍一下无限 debugger 的实现原理。
  2. 实现原理
    找到无限 debugger 的源头。在 Sources 面板中可以看到,debugger 关键字出现在一个 JavaScript 文件里,这时点击左下角的格式化按钮,如图所示:

    发现这里通过 setInterval 循环,每秒执行 1 次 debugger 语句。
    当然,还有很多类似的实现,比如无限 for 循环、无限 while 循环、无限递归调用等,它们都可以实现这样的效果,原理大同小异。
    知道了原理,那么解决的办法也有多种,我推荐一种方法是利用开发者工具 Overrides 面板选项卡替换文件实现。
  3. 替换文件
    利用它可以将远程的 JavaScript 文件替换成本地的 JavaScritp 文件,这里,我们只需在新的文件里面把 debugger 这个关键字删除,或者注释掉。
    修改如下:
      setInterval((function() {//debugger ; //可以直接删除此行或者注释此行console.log("debugger")}), 1e3),

打开 Sources 面板下的 Overrides 面板,将修改后的完整 JavaScript 文件复制你去,修改的内容如图所示:

注释完之后,重新刷新网页,这时候发现不会进入无限 debugger 模式了。
关于 Overrides 选项卡的用法,可以用小蜜蜂 AI 的智慧问答获取更多详细信息,网址:https://zglg.work。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/600272.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux重装系统步骤 包含raid【主要针对服务器重装

重装需要记录的信息 通过管理口进入系统: 1、 使用管理口ip,在浏览器中打开 并登陆进管理口界面 2、 虚拟控制台更改插件类型:如java、HTML5等,会话共享操作选择-完全访问-应用-启动虚拟控制台 需要记录信息如下: …

Linux下场景模拟--cpu、内存打满测试

Linux下场景模拟–cpu、内存打满测试 打满CPU占用 编写脚本vi /root/cpu_run_full.sh vi /root/cpu_run_full.sh填写如下内容&#xff1a; #!/bin/bash function while_run_cpu() {while true;doi2;done }function cpu_full() {for ((i0; i<$1; i));dowhile_run_cpu &am…

Pillow教程11:九宫格切图的实现方法(安排!!!)

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…

【JQ】加载中动画效果,带gif图片

效果图 CSS样式 /*加载中*/ #loading-overlay {position: fixed;top: 0;left: 0;right: 0;bottom: 0;background-color: rgba(0, 0, 0, 0.5); /* 半透明背景 */display: flex;justify-content: center;align-items: center; }.loading-container {position: fixed;top: 40%;le…

11.shell中的多进程实践

目录 概述实践代码执行结果 概述 shell中的多进程实践 实践 代码 #!/bin/bash# 多进程实践,以ping为例 # ping 10.35.232.130 -c2 拼两次结束check_host(){host${host_prefix}.$1if ping $host -c1 -W1 ; thenecho "$host可达"elseecho "$host不可达"…

2024/4/2—力扣—二叉树的最近公共祖先

代码实现&#xff1a; 思路&#xff1a; 递归判断左子树和右子树&#xff0c;查找p或者q是否在当前节点的子树上 1&#xff0c;在同一子树上&#xff0c;同一左子树&#xff0c;返回第一个找到的相同值&#xff0c;同一右子树上&#xff0c;返回第一个找到的相同值 2&#xff0…

Godot插值、贝塞尔曲线和Astar寻路

一、插值 线性插值是采用一次多项式上进行的插值计算&#xff0c;任意给定两个值A和B&#xff0c;那么在A和B之间的任意值可以定义为&#xff1a;P(t) A * (1 - t) B * t&#xff0c;0 < t < 1。 数学中用于线性拟合&#xff0c;游戏应用可以做出跟随效果&#xff08;…

一份完整的软件测试报告长什么样

软件测试报告是软件测试阶段的重要输出&#xff0c;它为软件开发团队、客户或管理层等利益相关方提供了详细的测试结果和软件质量评估。一份完整的软件测试报告通常包含以下几个关键部分&#xff1a; 引言和概述&#xff1a;   报告的开始部分通常有一个引言或概述&#xff…

基于单片机室内温湿度监测系统仿真设计

**单片机设计介绍&#xff0c;基于单片机室内温湿度监测系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机室内温湿度监测系统仿真设计的沟通概要主要涉及以下几个方面&#xff1a; 一、项目背景与目标 首…

starganvc2变声器项目实战及其源码解读

1.数据与项目文件解读 数据文件目录如下所示&#xff0c;需要注意的是&#xff0c;我们并不能直接对声音进行建模&#xff0c;而需要对声音数据进行预处理&#xff0c;从而得到一系列数值特征&#xff0c;然后对特征进行建模&#xff0c;特征数据存储到processed文件夹中 2.环…

局域网共享文件夹怎么加密?局域网共享文件夹加密方法介绍

在企业局域网中&#xff0c;共享文件夹扮演着重要的角色。为了保护数据安全&#xff0c;我们需要加密保护局域网共享文件夹。那么&#xff0c;局域网共享文件夹怎么加密&#xff1f;下面我们来了解一下吧。 局域网共享文件夹加密方法 局域网共享文件夹加密推荐使用共享文件夹加…

Java 8 内存管理原理解析及内存故障排查实践

介绍Java8虚拟机的内存区域划分、内存垃圾回收工作原理解析、虚拟机内存分配配置&#xff0c;介绍各垃圾收集器优缺点及场景应用、实践内存故障场景排查诊断&#xff0c;方便读者面临内存故障时有一个明确的思路和方向。 一、背景 Java是一种流行的编程语言&#xff0c;可以在不…