美文网首页
爬虫无限Debugger反调解决方法

爬虫无限Debugger反调解决方法

作者: 会爬虫的小蟒蛇 | 来源:发表于2022-06-04 00:00 被阅读0次

很多网站为了应对爬虫调试 会在代码中插入Debugger 此时一旦F12打开调试界面就会被断住

Debugger分为三种 非虚拟机、虚拟机和API

错误方法

首先介绍一种 能绕过所有Debugger 但是却杀敌一千自损八百的方法(不推荐)

image-20220604133204086.png

将activate breakpoints打开 此时所有断点都会失效

这样即可绕过所有Debugger 但同样你自己也不可以下断了 所以不推荐

非虚拟机

这种Debugger一般写在js代码中 形成原理如以下代码

function myDebugger() {
    debugger;
    console.log(1);
}
myDebugger(); // 此处如果加一个循环 就会陷入无限Debugger

如果是单个Debugger可以用如下方法解决

方法一

image-20220604134234103.png

首先在Debugger那一行下断 然后右键 Continue to here 这样即可跳过这种断点

方法二

image-20220604134754810.png

首先在Debugger那一行下断 然后右键 Edit breakpoint

image-20220604134941897.png

将Debugger属性修改为false 即可跳过断点

循环debugger解决方法 :: 代码替换

方法一

谷歌内核默认提供替换工具

image-20220604135941150.png

在 Sources 面板下 有一个 Overrides 面板 然后Select folder for overrides(随便选择一个空文件夹)

image-20220604140254350.png

然后再浏览器上方会出现一个横条 申请权限 这里点允许

image-20220604140532747.png

然后对于你要重写的js文件 右键 save for overrides

image-20220604140713151.png

此时文件前方会出现一个紫色的小圆圈 这就代表着 这个js代码你可以任意重写

删除debugger代码 ctrl+s保存 然后刷新网页即可

方法二

浏览器插件 如油猴等 这里不做赘述

方法三

代理替换 如Fiddler 这个后续会单独写一篇博客详细讲解

虚拟机 (eval Function)

这种Debugger形成原理如以下代码

var VMDebugger = Function.prototype.constructor("debugger;")
VMDebugger(); // 此处如果加一个循环 就会陷入无限Debugger

或者

eval("debugger;");

代码运行后 会进入虚拟机中

image-20220604142534855.png

此时已经被Debugger断住

方法一

image-20220604142844301.png

在Call stack中 回退到上一个js调用栈

然后就可以用非虚拟机中代码替换的方式 对js代码进行处理 以此绕过Debugger

缺点是 js中可能对"eval"或“function”进行混淆 此时如果想替换混淆后的代码 需要知道是如何被混淆的

方法二

从"eval"和"Function"下手 对他们进行hook操作 代码如下

Function.prototype.constructor = function(){}

缺点是 如果hook的代码中 除debugger外 还有业务逻辑 那么整个前端的运行会出问题

那么我们需要对他进行改进

Function.prototype.constructor = function(x){
    if(x){
        // 替换debugger
    }
}

判断传入参数x中 有没有debugger 如果有替换成相同长度空格(可能会对传入长度进行检测)

相关文章

网友评论

      本文标题:爬虫无限Debugger反调解决方法

      本文链接:https://www.haomeiwen.com/subject/chnkmrtx.html