突破前端反调试--阻止页面不断debugger(F12不能调试)

突破前端反调试--阻止页面不断debugger

chrome-devtools前端调试调试前端网页爬虫

原文地址:  https://segmentfault.com/a/11...
 

问题复现

一次扒某网站的前端代码,打开控制台要看Network,结果发现他们页面一打开控制台就不断的debugger100ms一次,很影响看页面内容。就像下面这样的

clipboard.png

问题分析

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

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

虽然简单,但是却很有效。

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

所以他带来的影响还是挺大的,我们需要解决这个问题。

问题解决

这个问题解决起来还是蛮简单的,问题解决只需要一句话:禁止断点
而对应的操作是在Chrome控制台Source Tab页点击Deactivate breakpoints按钮或者按下Ctrl + f8(下图)。

clipboard.png

这样就能禁用断点了,问题就得到了解决,但是当你需要调试的时候记得要起他哦。很简单的操作,但是你如果对Chrome控制台调试不熟悉的话还是比较头疼的。在这里记录一下,分享给更多的人。

更新

2018-09-10更新

后来发现这种做法有时候有些不妥,就比如有我们看别人网站代码有时候就是为了调试网站的代码,那么这时我们这么直接干脆的禁止断点后我们也没办法调试网站的代码了,那这就有点杀敌一千自损八百的意思。那有什么办法可以满足我们既能阻止网站一直debugger还能让我们继续调试网站的代码呢?这就要看网站怎么实现不断debugger了:
有的网站做的比较简单,是用具名函数做的,类似这样

setInterval(startDebug, 100); // 举个例子而已,很多网站并不是这么实现的
function startDebug() { debugger; };

这种情况比较好解决,我们随便重新定义这个方法就行了,形如:

function startDebug() {};

但是也有的网站做的比较厉害点,用匿名函数来实现,形如:

setInterval(function () { debugger }, 100); // 举个例子而已,很多网站并不是这么实现的

这种情况就比较蛋疼了,目前我是没啥解决方法,如果有人知道的话,不妨在下面留言了。

2019-03-13更新

下面有位老兄(@XYShaoKang)提到用条件断点来应对这样的实现

setInterval(function () { debugger }, 100); // 举个例子而已,很多网站并不是这么实现的

我试了下,确实可以,但是有局限性。
先说可以应对的情况,一个动图说明问题。

clipboard.png

再来说说不能应对的情况,还是一个动图说明问题。

clipboard.png

也就是说,条件端点的适用情况与具体代码的书写风格有关系。
另外,我发现Add conditional breakpoint下面的Never pause here也能在突破反调试的时候也能起到一定作用。局限性与上Add conditional breakpoint一样。
同样用两个动图说明问题。

能work的情况

clipboard.png

不能work的情况

clipboard.png

 

 

 

 

 

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: HyperTerminal是一种串口通信工具,通常用于与串口设备进行通信和调试。CMSIS-DAP是一种调试器,它提供了与微控制器进行通信的方式,可以实现调试功能。 在使用HyperTerminal和CMSIS-DAP调试器时,遇到无法显示传真的问题,可能有以下几个可能的原因: 1. 配置错误:首先需要确保HyperTerminal和CMSIS-DAP调试器的相关配置正确。检查HyperTerminal的串口设置,包括波特率、数据位、停止位和校验位等是否与目标设备一致。同时,确保CMSIS-DAP调试器已正确连接到目标设备,并与HyperTerminal成功建立了通信。 2. 传真格式不兼容:另一个可能的原因是传真格式不兼容。传真数据通常以二进制或十六进制的形式进行传输,而HyperTerminal默认显示ASCII码。因此,如果传真数据是以二进制或十六进制格式进行传输,HyperTerminal可能无法正确显示。在这种情况下,需要修改HyperTerminal的显示设置,使其能够正确解码和显示传真数据。 3. 传真数据损坏:最后,还有可能是传真数据本身出现了损坏。如果传真数据在传输过程中发生了错误或丢失了部分数据,HyperTerminal可能无法正确显示。检查传真数据的完整性,并尝试重新传输或重新获取传真。 综上所述,当使用HyperTerminal和CMSIS-DAP调试器进行传真时无法显示,可能是由于配置错误、传真格式不兼容或传真数据损坏等原因导致的。建议仔细检查和调整相关设置,以确保正确显示传真数据。 ### 回答2: HyperTerminal是一种串行终端仿真程序,常用于调试和配置串行设备。而CMSIS-DAP(Cortex Microcontroller Software Interface Standard - Debug Access Port)是一种适用于ARM Cortex处理器的调试器接口标准。 根据问题描述,您在使用HyperTerminal和CMSIS-DAP调试器传真时遇到了无法显示的问题。要解决这个问题,您可以尝试以下几种方法: 1. 确保CMSIS-DAP调试器已正确连接:检查调试器是否正确连接到目标设备,并确保连接稳定和良好。可以尝试重新连接调试器,或更换USB线缆。 2. 检查HyperTerminal的设置:在HyperTerminal中,确保您已正确配置串行端口的参数,例如波特率、数据位、校验位和停止位等。这些设置需要与目标设备的设置保持一致。 3. 检查固件和驱动程序的兼容性:如果您的CMSIS-DAP调试器固件或驱动程序版本与HyperTerminal不兼容,可能会导致无法显示的问题。您可以尝试更新CMSIS-DAP的固件或驱动程序,并确保与HyperTerminal兼容。 4. 使用其他调试工具:如果问题仍然存在,您可以尝试使用其他调试工具来替代HyperTerminal。有许多其他开发环境和终端仿真程序可供选择,例如Tera Term、PuTTY等。 如果您尝试了上述方法仍无法解决问题,建议参考CMSIS-DAP调试器的官方文档和支持资源,或向相关技术论坛和社区寻求帮助。 ### 回答3: HyperTerminal是一个Windows操作系统上的串口通信软件,主要用于通过串口与其他设备进行通信。而CMSIS-DAP是一种调试和编程接口标准,它提供了一种与微控制器进行调试和编程的方法。 根据提供的问题描述,当使用CMSIS-DAP调试器与HyperTerminal进行通信时,无法正常显示传真数据。可能的原因如下: 1. 数据格式不匹配:HyperTerminal和CMSIS-DAP调试器使用的数据格式可能不兼容,导致无法正确显示传真数据。需要确认使用的数据格式是否一致,例如波特率、数据位、停止位和校验位等参数。 2. 软件设置问题:HyperTerminal可能需要正确配置才能与CMSIS-DAP调试器进行通信。建议检查HyperTerminal的设置选项,确认串口配置参数是否正确。同时,还要确保HyperTerminal选择了正确的串口号。 3. 驱动问题:CMSIS-DAP调试器使用的驱动程序可能需要更新或安装。如果驱动程序不兼容或过时,可能会导致通信问题。建议检查CMSIS-DAP调试器的驱动并尝试更新或重新安装。 4. 硬件连接问题:确保CMSIS-DAP调试器与计算机的连接正确稳定。可能需要检查USB连接或传真设备的电源供应,确保它们正常工作。 综上所述,在使用HyperTerminal时,无法显示传真数据可能是由于数据格式不匹配、软件设置问题、驱动问题或硬件连接问题所致。通过检查和调整这些因素,您可以尝试解决此问题。如果问题仍然存在,建议联系设备制造商或技术支持团队寻求进一步帮助。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值