背景
之前曾做过微信读书的书籍下载,了解过一些反调试的做法。今天逛掘金时又碰到了相关的帖子,看评论说讯飞大模型的破解不了,于是就想练练手,用了大概不到3个小时吧,就搞定了,然后就有了这篇文章。
免责声明:此文章纯粹是技术交流,请勿用于任何损害相关方利益的行为。
操作步骤
第一步,进入到首页 xinghuo.xfyun.cn ,打开控制台。
因为首页并没有禁用控制台,所以我们可以在这个页面提前做一些工作
第二步,打开 Source -> Page 面板,找到网站的main.js文件。
这个文件就是网站打包的主文件
第三步,打开这个文件,搜索cG\(\)这个正则,如下图所示:
最后一步,注释掉cG函数的调用,如上图所示,然后保存。
保存后如果发现文件名旁边有一个紫色的小圆点,就说明成功了,如下图所示:
此时重新刷新浏览器,会发现“反调试”代码已经失效了。
更简单的绕过 —— 利用“后门”
继续查看这个函数的调用,发现程序员留了个后门,直接在 url 里面加上bug=s即可禁用“反调试”功能:
https://xinghuo.xfyun.cn/desk?bug=s
如何找到“反调试”相关函数调用
通过观察页面会发现,“反调试”功能是通过跳转到空白页实现的,因此,我们可以通过beforeunload事件来查看页面跳转前的调用栈。
打开首页 xinghuo.xfyun.cn/ ,等页面加载完之后,打开控制台,将网络调为 3G 慢速网络,如下图所示:
为什么要调这个?因为我们想要在 html 页面里面加入一段代码,因此需要延迟“反调试”js的执行来给我们足够的时间做这件事。
接着就可以点击首页中的“立即使用”按钮来进入目标页面了。
等 html 页面加载完之后,在 Source 面板找到这个 html 文件,在 head 里面加入下面这段代码:
等你加完之后会发现页面已经跳转到空白页了,无所谓,只要我们确保保存成功就行。
接着点浏览器的回退按钮重新进入目标页面(记得把网络调回正常速度),会发现断点断在了我们加的那个 debugger 处:
此时就可以看到完整的调用栈,我们把调用栈切到 ondevtoolopen 函数调用处,就找到了目标函数调用了:
总结
前端反调试,到目前为止,我还没有碰到过无法破解的网站(也可能是我见识短浅),无论是浏览器插件还是 Overrides,亦或是 Charles/WireShark 抓包,都可以拿到并修改js代码,所以一切防止调试甚至查看js代码的行为都是徒劳的,开发者应该把更多的重心放在服务器端的验证上面。
这是我个人目前的愚见,欢迎各位大佬们相互讨论,相互学习。
最后,附上一些可能有用的链接:
- 这个网站使用的反调试技术是 disable-devtool
- 破解反调试的神器: Overrides