爬虫从入门到精通(12) | js调试中的一些问题(无限debugger,调试干扰,内存爆破)

一、调试检测

1.无法打开f12

解决方案:

  • 使用鼠标右键打开
  • 更换其他浏览器,例如火狐浏览器

2.开发工具js干扰

解决方案:

打script断点找到检测点,重写该方法
在这里插入图片描述

二、内存爆破

  • 内存爆破指js通过死循环/频繁操作数据库(包括cookie)/频繁调取history等方式,使浏览器崩溃的一种反调试手段。
  • 还有一种特殊情况:js文件很大,电脑内存不足(这种情况在调试层面几乎无解)
  • 同样的js代码,在浏览器可以运行,自己调试却内存疯长,大部分情况是检测到了代码格式化(利用正则/toString() 判断代码是否进行格式化),其他情况可能就是检测了浏览器的指纹,判断是否为浏览器环境

解决是否判断js格式化的内存爆破

如果是使用正则或者toString的方式检测代码格式化,那么我们在本地运行的时候,搜索RegExp,把可以项删除或者取反即可

三、无限debugger

1.js中创建debugger的常见方式

1.1.直接创建debugger

debugger;

1.2.通过eval关键字创建debugger

此类为虚拟机中创建

eval('debugger');

在这里插入图片描述

1.3.通过Function创建debugger

此类为虚拟机中创建

Function是创建匿名函数,然后去执行

Function('debugger').call()
Function('debugger').apply()
Function().constructor('debugger').apply('action')

在这里插入图片描述
大部分debugger都是这三种的变形或者叠加

2.创建无限debugger

  • 无限debugger是指很频繁的执行debugger逻辑,并不是死循环,这样会造成浏览器卡死。
  • 常见的无限debugger就是通过上述三种方式变形,再配合定时器或者一个循环来创建的。

3.解决无限debugger

3.1.Never pause here 不在此处下断

在 debugger 位置,点击行号,右键 Never pause here,永远不在此处断下即可:
在这里插入图片描述

3.2.Add conditional breakpoint 条件断点

不适用于一直新开虚拟机的debugger
同样右键选择 Add conditional breakpoint,输入 false 即可跳过无限 debugger,其原理是添加条件断点,不管前面代码的逻辑是什么,运行到 debugger 的时候必定是 true 才能执行,只需要将其改为 false,那么它就不执行了:
在这里插入图片描述

3.3.重写定时器debugger

setInterval这种我们可以通过hook,即重写或者置空的方式过掉

setInterval_back = setInterval;

setInterval = function(a,b){
	if(a.toStirng().indexOf('debugger')!= -1){
		return setInterval_back;
	}
}

3.4.重写constructor的debugger

基本搞Function的通用形式

Function.prototype.constructor_back= Function.prototype.constructor_back;

Function.prototype.constructor_back= function(a,b){
	if(arguments==='debugger'){
	}else{
		// arguments由于不知道多少参数,所以用apply
		return Function.prototype.constructor_back.apply(this,arguments);
	}	
}

3.5.重写eval形式的debugger

在这里插入图片描述

eval_back=eval
eval=function(a){
	if (a==="debugger"){
	}else{
		return eval_back(a);
	}
}

3.6.中间人拦截替换无限debugger

①简单的静态js可以使用浏览器替换

在这里插入图片描述
在这里插入图片描述
此时文件变为紫色,此时可以修改该文件,ctrl+s保存刷新可以生效
在这里插入图片描述

②通过fiddler替换

fiddler界面右屏幕的AutoResponseder配置好,然后将需要修改的文件拖过来,选择find a file,找到我们已经修改好的源码文件
在这里插入图片描述

在这里插入图片描述

3.7.其他情况

如果上述方法失效,我们断到无限debugger的地方,向上找函数,把包含无限debugger的函数中的触发无限debugger的语句删掉即可。

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张烫麻辣亮。

谢谢老板支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值