首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【技术专题】突破前端反调试:No Debugger

问题导引

做网页POST,抓包分析是必不可少的,遇到加密,必然分析网站的前端代码,一般F12打开控制台,结果发现页面一打开控制台就不断的debugger,很影响看页面内容。

▲该死的debugger

每次在断点处停下来的时候页面都会跳到source这个tab页面,也能够看到他的debugger的代码,其实他的实现很简单,只有这一行代码:

(function() { var a = new Date(); debugger; return new Date() - a > 100;}())

其目的就是:

不停地打断你,页面跳到source页面,阻止你看他代码不断的产生不可回收的对象,占据你的内存,造成内存泄漏,没过多久浏览器就会卡顿。

但我们要调试,怎么办呢?

解法探密

应对策略一:禁用断点

在Chrome控制台的Source Tab页点击Deactivate breakpoints按钮或者按下Ctrl + f8,这样就能禁用断点了,问题就得到了解决,但也让你无法调试了。

应对策略二:重定义函数

我们看网站代码有时候就是为了调试网站的代码,直接禁止断点后我们还调试网站的代码了?

比如遇到:

// 举个例子setInterval(startDebug, 100); function startDebug() { debugger; };

像这样子禁止调试,我们还是有方法的:

直接根据当前的函数进行重定义——

function startDebug() {};

应对策略三:条件断点

你以为就样子就可以了吗?

但现在的网站做更绝,直接用用匿名函数来实现,比如:

// 举个例子setInterval(function () { debugger }, 100);

那也不用怕,我们还有新的绝招——

-> 在debugger处选择右键

->Add conditional breakpoint

->填写False

应对策略四:终极技能

这是最后的终极技能,什么都不管,直接用代码来解决问题:

直接在console栏里面输入——

var _constructor = constructor;Function.prototype.constructor = function(s) { if (s == "debugger"){ console.log(s); return null; } return _constructor(s);

}

(部分内容引用 思否用户 user_name)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200630A0BHEJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券