关于“绕过”前端反调试的想法

1,492 阅读3分钟

背景

之前曾做过微信读书的书籍下载,了解过一些反调试的做法。今天逛掘金时又碰到了相关的帖子,看评论说讯飞大模型的破解不了,于是就想练练手,用了大概不到3个小时吧,就搞定了,然后就有了这篇文章。

免责声明:此文章纯粹是技术交流,请勿用于任何损害相关方利益的行为。

操作步骤

第一步,进入到首页 xinghuo.xfyun.cn ,打开控制台。

因为首页并没有禁用控制台,所以我们可以在这个页面提前做一些工作

第二步,打开 Source -> Page 面板,找到网站的main.js文件。

这个文件就是网站打包的主文件

image.png

第三步,打开这个文件,搜索cG\(\)这个正则,如下图所示:

image.png

最后一步,注释掉cG函数的调用,如上图所示,然后保存。

保存后如果发现文件名旁边有一个紫色的小圆点,就说明成功了,如下图所示: image.png

此时重新刷新浏览器,会发现“反调试”代码已经失效了。

更简单的绕过 —— 利用“后门”

继续查看这个函数的调用,发现程序员留了个后门,直接在 url 里面加上bug=s即可禁用“反调试”功能:

https://xinghuo.xfyun.cn/desk?bug=s

image.png

如何找到“反调试”相关函数调用

通过观察页面会发现,“反调试”功能是通过跳转到空白页实现的,因此,我们可以通过beforeunload事件来查看页面跳转前的调用栈。

打开首页 xinghuo.xfyun.cn/ ,等页面加载完之后,打开控制台,将网络调为 3G 慢速网络,如下图所示:

image.png

为什么要调这个?因为我们想要在 html 页面里面加入一段代码,因此需要延迟“反调试”js的执行来给我们足够的时间做这件事。

接着就可以点击首页中的“立即使用”按钮来进入目标页面了。

image.png

等 html 页面加载完之后,在 Source 面板找到这个 html 文件,在 head 里面加入下面这段代码:

image.png

等你加完之后会发现页面已经跳转到空白页了,无所谓,只要我们确保保存成功就行。

接着点浏览器的回退按钮重新进入目标页面(记得把网络调回正常速度),会发现断点断在了我们加的那个 debugger 处:

image.png

此时就可以看到完整的调用栈,我们把调用栈切到 ondevtoolopen 函数调用处,就找到了目标函数调用了:

image.png

总结

前端反调试,到目前为止,我还没有碰到过无法破解的网站(也可能是我见识短浅),无论是浏览器插件还是 Overrides,亦或是 Charles/WireShark 抓包,都可以拿到并修改js代码,所以一切防止调试甚至查看js代码的行为都是徒劳的,开发者应该把更多的重心放在服务器端的验证上面。

这是我个人目前的愚见,欢迎各位大佬们相互讨论,相互学习。

最后,附上一些可能有用的链接:

  1. 这个网站使用的反调试技术是 disable-devtool
  2. 破解反调试的神器: Overrides