一.需求描述

       在采集某些网站时,目标网站为了防止别人分析调试前端代码,采取了反调试措施。其中一种做法是当你按F12进入浏览器控制台后,浏览器会自动命中debugger断点,并且无限循环,导致无法调试。以[食品药品监督管理总局](http://qy1.sfda.gov.cn/datasearch/face3/dir.html)数据查询网站为例。如下图:

5f392d481bafd00901816533c33a8749.png

按F12进入控制台

fdab69912eda2be4a64f271ce75bf9a5.gif一.解决方法

    1.禁用浏览器断点

ae1721c6e5a90bd037f1574075520a41.png

点击图中按钮,之后将不会再命中任何断点。这种方法虽然可以防止无限循环命中debugger断点,但是也存在很大的缺陷,因为对于其他代码,我们还是需要断点调试功能的。所以这个方法仅限于静态分析。 2.利用中间人修改响应代码

       在前面的Fiddler教程系列文章中,已经介绍了Fiddler的基础及进阶使用。利用Fiddler修改响应,删除响应代码中的debugger即可达到目的

实现的核心代码很简单:如下

f0395745dac8c6de7e9872db477e6b94.png

      实际使用中发现,位于响应html页的debugger被删除了,但是仍然会弹出断点。分析页面得到,debugger断点位置一共有2处。第一处debugger以明文形式存在,Fiddler删除的就是这部分。第二处是通过eval去实现的,响应中并没有直接出现debugger字段,所以没有被替换掉。

70021c401f1c450376c7486fc9c8daac.png

        代码经过强混淆,读者看到的函数名称是和我不一样的。

     3.利用浏览器插件修改响应代码

    具体原理和使用Fiddler是相同的,通过浏览器插件将请求重定向以达到修改代码的目的。也存在相同的问题

    4.手动替换代码

    既然修改响应结果无法满足需求,那只能从代码中寻找突破了。

以本文的网站为例,查看debugger断点处的调用栈堆,找到调用位置。其实在上文中间人方式结尾处已经发现了。是通过eval去实现断点的。我们先构造一个空方法

189defef06ff86bbd19d809c94cf1cdf.png

    将目标网站的方法偷梁换柱

7dd52b4ce16e022fbf18621584a7abca.png

    由于网站代码强混淆,所以函数名称会不一样。下面放个GIF图

0f51890b4d93ab497f94b08ee677ccd9.gif

    完美解决  但是注意不要刷新,页面刷新后需要重新替换。

  5.傻瓜式技巧

f54c96ff742c59087c8b72e81b858260.png

    上文的几种方法,要么是存在缺陷,要么是步骤较为繁琐,我这边还有个压箱底的神技,不需要写任何代码,鼠标点点点就能够满足需求,把最终技巧放在公众号另一篇文章了,有需要的童鞋可以自己去看。

二.关注我们

爬虫教程,思路分享,商务合作,请关注射线网络公众号

回复 **反调试** ,可以获得第5步技巧,

31374867e987416b9bff3e262644554a.png

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐