小白爬虫冒险之反“反爬”:无限debugger、禁用开发者工具、干扰控制台...(持续更新)

news2025/1/30 19:57:39

背景浅谈

小白踏足JS逆向领域也有一年了,对于逆向这个需求呢主要要求就是让我们去破解**“反爬机制”**,即反“反爬”,脚本处理层面一般都是decipher网站对request设置的cipher,比如破解一个DES/AES加密拿到key。这篇文章先不去谈这类已经进入JS分析阶段的问题,而是往前推到我们的第一步——调试,这也是我们后续分析的前提,学习逆向的大侠们如果自己去找不同的网站练习很容易发现其实很多网站恰恰喜欢在这第一步就设置反爬策略,也就是我这篇博客接下来要谈到的类似于无限debugger的小问题。(毕竟网站也不想被逆向“菜狗”一直请求,所以先把一部分“菜狗”拦下来不让你去分析)

大年初一,我先写一部分短时间能想到的,内容可能也会相对粗糙,后期会加以润色,遇到其他的会继续在此更新。

问题及应对策略

1.无限debugger

无限debugger产生原因

防止爬虫人员调试网站、抓包等行为,恶心你,层层下陷的debugger仿佛“沼泽陷阱”

无限debugger原理

使用debugger关键字与setInterval()或者setTimeout()配合使用造成无限创建虚拟机debugger

setInterval()

点不完的定时器

setTimeout()

配合setInterval()组成递归从而造成无限内陷无法自拔直至程序崩溃

无限debugger破解思路

  1. 断点设置一律不在此处断住

  2. 断点设置条件置为false

  3. 被第一个debugger断住后利用请求堆栈向上溯源利用无限debugger原理定位调用入口,破解调用入口

  4. 脚本注入

    // 重写 debugger 函数
    window.eval = (code) => { 
      if (!code.includes("debugger")) eval(code); 
    };
    

2.禁用开发者工具

当你打开一个网站点击F12准备“大干一场”的时候突然发现网站不允许调试,倘若你刚好是一名“菜鸡”,那你不就炸了吗?

网站禁用开发者工具的实现通常依赖于检测用户是否打开了开发者工具,并通过技术手段进行干扰。以下是其底层原理及应对策略的分析:


一、禁用开发者工具的底层原理

  1. 窗口尺寸检测

    • 原理:开发者工具打开后,浏览器窗口的尺寸或布局可能发生变化(如窗口分栏)。网站通过监听 window.resize 事件或对比 window.outerWidth/innerWidth 的差值来判断。
    • 局限性:响应式设计的网站可能误判,且用户可通过取消开发者工具独立窗口规避。
  2. 控制台属性检测

    • 原理:通过检查 console 对象或 debugger 关键字的状态。例如:

      setInterval(() => {
        if (console.firebug || /./.constructor.prototype.toString = () => {}) {
          alert("开发者工具已打开!");
          window.location.href = "about:blank"; // 强制跳转
        }
      }, 1000);
      
    • 局限性:现代浏览器已修复大部分漏洞,且用户可通过禁用控制台日志输出绕过。

  3. 键盘事件监听

    • 原理:监听 F12Ctrl+Shift+ICtrl+Shift+J 等快捷键的按下事件,阻止默认行为:

      document.addEventListener('keydown', (e) => {
        if (e.keyCode === 123 || (e.ctrlKey && e.shiftKey && e.keyCode === 73)) {
          e.preventDefault();
          window.location.href = "about:blank";
        }
      });
      
    • 局限性:无法阻止通过浏览器菜单手动打开开发者工具。


二、应对策略

有一种很简单的绕过方式就是提前将开发者工具的窗口设置为独立窗口

1. 底层原理分析

开发者工具独立窗口的作用
当开发者工具以独立窗口(非停靠模式)打开时,主浏览器窗口的布局和尺寸不会发生变化。这直接影响网站通过 窗口尺寸变化布局偏移 来检测开发者工具的机制。


2. 针对窗口尺寸检测的绕过

原检测逻辑
网站通过监听 resize 事件或比较 window.outerWidthwindow.innerWidth 的差值,判断开发者工具是否打开(停靠模式会改变主窗口尺寸)。

代码映射

// 原代码中的窗口监听
window.addEventListener("resize", e); // 监听窗口变化触发检测
var c = setInterval(e, 500);          // 定时检测

独立窗口的绕过效果

  • 主窗口尺寸不变,resize 事件不会被触发。
  • 定时执行的 e() 函数仍会运行,但若其逻辑依赖窗口尺寸,则无法检测到工具开启。

局限性
e() 函数包含其他检测逻辑(如控制台属性劫持),独立窗口无法绕过这些检测。


3. 有效性
检测类型独立窗口绕过效果需额外应对措施
窗口尺寸/布局变化有效无需额外操作
控制台属性劫持无效禁用 __defineGetter__ 或静默控制台
定时轮询检测部分有效清除定时器 (clearInterval)
Firebug 对象检测有效(Firebug 已淘汰)无需操作

3.干扰控制台


网站干扰控制台的底层实现原理及应对策略

网站干扰控制台的目的是阻止用户通过开发者工具(如控制台)调试、分析或修改页面逻辑。以下是常见的干扰手段及其应对方法:


一、底层实现原理

1. 禁用控制台方法(Console Methods)

原理
通过重写 console.logconsole.error 等方法,使其无法输出内容或抛出错误。

// 示例:禁用 console.log
console.log = function() {}; 
// 或抛出错误
console.log = function() { throw new Error("Console is disabled"); };

效果
用户在控制台执行 console.log 时无输出或直接报错。


2. 控制台打开检测与警告

原理
通过对比窗口尺寸、计算代码执行时间差,或劫持 console 对象,检测控制台是否打开。

// 示例:通过代码执行时间差检测
const start = Date.now();
console.log("检测控制台");
const delay = Date.now() - start;
if (delay > 50) { 
  alert("控制台已打开!");
  window.location.href = "about:blank"; 
}

效果
用户打开控制台时,页面跳转或弹出警告。


3. 控制台输出劫持

原理
劫持 console 方法,修改输出内容或频率。

// 示例:劫持 console.log 输出乱码
const originalLog = console.log;
console.log = function(...args) {
  originalLog.call(console, "干扰输出: " + Math.random().toString(36));
};

效果
用户看到的控制台输出被篡改,无法获取真实信息。


4. 内存耗尽攻击

原理
通过高频输出大量内容或死循环,导致控制台卡死或浏览器崩溃。

// 示例:每秒输出 10 万条日志
setInterval(() => {
  for (let i = 0; i < 1e5; i++) console.log("垃圾数据");
}, 1000);

效果
控制台因处理海量日志而失去响应。


二、应对策略

1. 恢复原生 Console 方法

方法
在控制台中重置 console 对象,或使用浏览器插件提前注入修复脚本。

// 在控制台执行以下代码恢复 console.log
delete console.log; // 仅对部分重写有效
// 或直接从 iframe 中获取原生 console
const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
console.log = iframe.contentWindow.console.log;

适用场景
针对 console 方法被重写或禁用的情况。


2. 屏蔽控制台检测逻辑

方法
使用浏览器插件(如 某猴)在页面加载前注入代码,覆盖检测逻辑。

// ==UserScript==
// @run-at       document-start
// 禁用控制台检测
Object.defineProperty(window, 'console', {
  value: window.console,
  writable: false,
  configurable: false
});
// 覆盖定时器函数
window.setInterval = function() {}; // 禁用所有定时器

适用场景
针对基于定时器或 console 劫持的检测。


3. 使用无头浏览器或代理拦截

方法
通过无头浏览器(如 Puppeteer)或本地代理(如 Charles)直接修改网页内容。

  • Puppeteer 示例

    const puppeteer = require('puppeteer');
    (async () => {
      const browser = await puppeteer.launch();
      const page = await browser.newPage();
      await page.setRequestInterception(true);
      // 拦截并删除干扰脚本
      page.on('request', (req) => {
        if (req.url().includes('anti-console.js')) req.abort();
        else req.continue();
      });
      await page.goto('https://target-site.com');
    })();
    

    适用场景
    自动化绕过所有前端干扰逻辑。


4. 禁用 JavaScript 执行

方法
通过浏览器设置或插件(如 NoScript)直接禁用页面 JavaScript。

  • 操作路径
    Chrome → 设置 → 隐私与安全 → 网站设置 → JavaScript → 禁用。
    缺点
    可能导致页面功能完全失效。

三、总结:干扰手段与应对对照表

干扰手段底层原理应对策略
禁用 Console 方法重写 console.log 等原生方法恢复 console 或通过 iframe 获取原生方法
控制台打开检测窗口尺寸/代码执行时间差检测覆盖检测逻辑或使用无头浏览器
控制台输出劫持篡改 console 输出内容重置 console 或拦截日志输出
内存耗尽攻击高频输出海量日志禁用控制台日志或过滤高频输出

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享| RL-GPT 框架通过慢agent和快agent结合提高AI解决复杂任务的能力-Arxiv

结论 “RL-GPT: Integrating Reinforcement Learning and Code-as-policy” RL-GPT 框架为解决大语言模型在复杂任务处理中的难题提供了创新有效的途径&#xff0c; 旨在将强化学习&#xff08;RL&#xff09;和代码即策略相结合&#xff0c; 以解决大语言模型&#xff08…

Prompt提示词完整案例:让chatGPT成为“书单推荐”的高手

大家好&#xff0c;我是老六哥&#xff0c;我正在共享使用AI提高工作效率的技巧。欢迎关注我&#xff0c;共同提高使用AI的技能&#xff0c;让AI成功你的个人助理。 许多人可能会跟老六哥一样&#xff0c;有过这样的体验&#xff1a;当我们遇到一个能力出众或对事物有独到见解的…

【开源免费】基于SpringBoot+Vue.JS在线考试学习交流网页平台(JAVA毕业设计)

本文项目编号 T 158 &#xff0c;文末自助获取源码 \color{red}{T158&#xff0c;文末自助获取源码} T158&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

如何解压rar格式文件?8种方法(Win/Mac/手机/网页端)

RAR 文件是一种常见的压缩文件格式&#xff0c;由尤金・罗谢尔&#xff08;Eugene Roshal&#xff09;开发&#xff0c;因其扩展名 “rar” 而得名。它通过特定算法将一个或多个文件、文件夹进行压缩&#xff0c;大幅减小存储空间&#xff0c;方便数据传输与备份。然而&#xf…

Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)

文章目录 Kafka 副本机制&#xff08;包含AR、ISR、OSR、HW 和 LEO 介绍&#xff09;1. 副本的基本概念2. 副本同步和一致性2.1 AR&#xff08;Assigned Replicas&#xff09;2.2 ISR&#xff08;In-Sync Replicas&#xff09;2.3 OSR&#xff08;Out-of-Sync Replicas&#xf…

网关登录校验

网关登录校验 单体架构时我们只需要完成一次用户登录、身份校验&#xff0c;就可以在所有业务中获取到用户信息。而微服务拆分后&#xff0c;每个微服务都独立部署&#xff0c;不再共享数据。也就意味着每个微服务都需要做登录校验&#xff0c;这显然不可取。 鉴权思路分析 …

【C语言】在Windows上为可执行文件.exe添加自定义图标

本文详细介绍了在 Windows 环境下,如何为使用 GCC 编译器编译的 C程序 添加自定义图标,从而生成带有图标的 .exe 可执行文件。通过本文的指导,读者可以了解到所需的条件以及具体的操作步骤,使生成的程序更具专业性和个性化。 目录 1. 准备条件2. 具体步骤步骤 1: 准备资源文…

计算机毕业设计Python+知识图谱大模型AI医疗问答系统 健康膳食推荐系统 食谱推荐系统 医疗大数据 机器学习 深度学习 人工智能 爬虫 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

商品信息管理自动化测试

目录 前言 一、思维导图 二、代码编写 1.在pom.xml文件中添加相关依赖 2.自动化代码编写 三、代码测试 小结 前言 1. 针对商品信息管理项目进行测试&#xff0c;商品信息管理项目主要有商品列表页、部门列表页、员工列表页&#xff0c;主要功能&#xff1a;对商品信息的…

【实践】基于SakuraLLM的离线日文漫画及视频汉化

介绍 LLM 大型语言模型&#xff08;英语&#xff1a;large language model&#xff0c;LLM&#xff09;&#xff0c;也称大语言模型&#xff0c;是由具有大量参数&#xff08;通常数十亿个权重或更多&#xff09;的人工神经网络组成的一类语言模型。在进行语言理解与分析&…

常见的同态加密算法收集

随着对crypten与密码学的了解&#xff0c;我们将逐渐深入学习相关知识。今天&#xff0c;我们将跟随同态加密的发展历程对相关算法进行简单的收集整理 。 目录 同态加密概念 RSA算法 ElGamal算法 ELGamal签名算法 Paillier算法 BGN方案 Gentry 方案 BGV 方案 BFV 方案…

SSM-MyBatis-总结

文章目录 一、Hello MyBatis1.1 流程1.2 总结 二、Crud 的一些注意点三、参数传递3.1 #{ } VS ${ }3.2 单、复参数传递&#xff08;1&#xff09;单参数&#xff08;2&#xff09;多参数 -- Param&#xff08;3&#xff09;总结 四、查询结果返回--结果封装4.1 ResultType 一般…

万字长文总结前端开发知识---JavaScriptVue3Axios

JavaScript学习目录 一、JavaScript1. 引入方式1.1 内部脚本 (Inline Script)1.2 外部脚本 (External Script) 2. 基础语法2.1 声明变量2.2 声明常量2.3 输出信息 3. 数据类型3.1 基本数据类型3.2 模板字符串 4. 函数4.1 具名函数 (Named Function)4.2 匿名函数 (Anonymous Fun…

Flutter android debug 编译报错问题。插件编译报错

下面相关内容 都以 Mac 电脑为例子。 一、问题 起因&#xff1a;&#xff08;更新 Android studio 2024.2.2.13、 Flutter SDK 3.27.2&#xff09; 最近 2025年 1 月 左右&#xff0c;我更新了 Android studio 和 Flutter SDK 再运行就会出现下面的问题。当然 下面的提示只是其…

【Proteus仿真】【51单片机】简易计算器系统设计

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、LCD1602液晶显示 2、矩阵按键​ 3、可以进行简单的加减乘除运算 4、最大 9999*9999 二、使用步骤 系统运行后&#xff0c;LCD1602显示数据&#xff0c;通过矩阵按键…

JavaScript函数中this的指向

总结&#xff1a;谁调用我&#xff0c;我就指向谁&#xff08;es6箭头函数不算&#xff09; 一、ES6之前 每一个函数内部都有一个关键字是 this &#xff0c;可以直接使用 重点&#xff1a; 函数内部的 this 只和函数的调用方式有关系&#xff0c;和函数的定义方式没有关系 …

51单片机入门_01_单片机(MCU)概述(使用STC89C52芯片;使用到的硬件及课程安排)

文章目录 1. 什么是单片机1.1 微型计算机的组成1.2 微型计算机的应用形态1.3 单板微型计算机1.4 单片机(MCU)1.4.1 单片机内部结构1.4.2 单片机应用系统的组成 1.5 80C51单片机系列1.5.1 STC公司的51单片机1.5.1 STC公司单片机的命名规则 2. 单片机的特点及应用领域2.1 单片机的…

51单片机入门_02_C语言基础0102

C语言基础部分可以参考我之前写的专栏C语言基础入门48篇 以及《从入门到就业C全栈班》中的C语言部分&#xff0c;本篇将会结合51单片机讲差异部分。 课程主要按照以下目录进行介绍。 文章目录 1. 进制转换2. C语言简介3. C语言中基本数据类型4. 标识符与关键字5. 变量与常量6.…

时间轮:XXL-JOB 高效、精准定时任务调度实现思路分析

大家好&#xff0c;我是此林。 定时任务是我们项目中经常会遇到的一个场景。那么如果让我们手动来实现一个定时任务框架&#xff0c;我们会怎么做呢&#xff1f; 1. 基础实现&#xff1a;简单的线程池时间轮询 最直接的方式是创建一个定时任务线程池&#xff0c;用户每提交一…

人工智能如何驱动SEO关键词优化策略的转型与效果提升

内容概要 随着数字化时代的到来&#xff0c;人工智能&#xff08;AI&#xff09;技术对各行各业的影响日益显著&#xff0c;在搜索引擎优化&#xff08;SEO&#xff09;领域尤为如此。AI的应用不仅改变了关键词研究的方法&#xff0c;而且提升了内容生成和搜索优化的效率&…