规则就是:没有规则。 -- 电影《黑客帝国》
📃 前言
笔者的话: 这是一篇 学习随笔 ,并非专业的 技术文章 ,所以有一些地方的做法并非最优解。不同的工具,不同的模型能做到的效果都会有所不同,本人的所有操作仅供参考。
注意: 本文所涉及的 逆向思路 和操作仅供 学习交流 使用,请勿对互联网公开网站进行高频率或高并发请求,凡造成严重损失的,后果自负!!!
📋 正文
是这样的,这段时间我去看我以前做过的 爬虫 项目,发现有一个 半成品 ,就是某盾的点选验证只做了 参数加密逆向 和 轨迹加密逆向 ,没有做 轨迹算法模拟 ,但我又不想费力气,于是想通过 AI 来搞定轨迹。
我选择的工具是 qoder ,个人感觉 IDE 好用一些:
用的 mcp 工具就一个 js-reverse (github.com/zhizhuodema…)。
这是一个专门用于 浏览器 调试的工具,可能会有朋友问:为什么不用 chrome-devtools-mcp ?这个还得看个人,那个用的舒服用那个,如果你实在不清楚那个好用,可以把两个都安装在 qoder 上,然后然 AI 阅读它们的所有功能,总结出两者之间的 优劣 做个参考:
工具选择完毕之后,先看一下某盾点选的 轨迹 加密逻辑:
其中 this['traceData'] 就是轨迹信息,如果你在这里打上 断点 的话,每一次你在 验证码 的画布上移动时,都会被记录移动的 坐标 :
58 和 41 疑似是 x 和 y 的距离,39109 疑似时间戳,0 好像是固定值,不过这些我们都不用管,在之后我们会让 AI 收集 10 个完整的验证完成后的轨迹数组,它会分析出这些是什么东西的。另外一个参数是 token ,在图片请求的返回值中存在,代表着每一张验证图的 凭证 ,之后让 AI 进行动态替换就好了。
然后这两个传入的值会通过 _0x4553c5 方法的加密,得出加密的一条轨迹信息:
然后会通过 push 将第一条轨迹信息加入名为 traceData 的空数组中,之后以此类推,程序记录你在画布上的移动轨迹,直到你选完 三个 点为止。这里的 断点 就不要打了,毕竟你移动一下,它就断一下,要完成整个验证过程,那要等到猴年马月啊🐶。
_0x4553c5 这个函数我已经在本地 node 实现了
虽然方法名随着更新已经不同,但加密逻辑是一样的:
主要问题是,轨迹信息是 加密 的,AI 在怎么厉害也无法通过加密值来分析轨迹生成规律,于是我们就可以让 AI 反逆出它的 解密函数 :
解密函数弄好之后,就到了收集 轨迹 信息的环节,轨迹信息主要在以下位置:
接下来的思路是:先让 AI 使用 mcp 控制浏览器,然后在此处设置断点,然后等待我们手动完成点选工作,让它记录每一次验证的 图片地址 、token 、点选字体 、加密的轨迹数组 ,并使用解密函数对数组中的 加密值 进行解密,把解密后的数据保存在本地供后续分析,以此类推,收集 10 次验证的 轨迹 。之后再在本地配置 云码 识别,让 AI 比对 云码 识别和浏览器识别 坐标 的误差,不断改进模拟轨迹,直到出现一次验证 通过 为止。
然后开始 提示词 输出:
然后在 浏览器 中进行 点选 操作,如果断点设置成功,页面会卡住:
第一次测试,信息收集完毕:
这里需要注意,这个 mcp 设置的断点不稳定,下一次可能就失效了,为了解决这一问题,我们最好是手动设置一个断点,保证无论如何都能断住:
还有一点是,一定要点正确了,不然 AI 收集的数据是错的,分析也会降低效率。
就这样,以此类推,收集 10 条数据:
然后就是进行 轨迹 模拟了:
AI 做好这一切时候,就让 AI 去运行测试,如果报错,它会自己去解决:
出现了一个问题:我们没有提供 验证接口 !
于是我用浏览器的 验证接口 快速生成脚本,然后复制到本地:
然后告诉 AI :
还有一个问题是,它会测试接口 10 次,这太多了,一般来说,三次如果一次通过都没有就代表轨迹有问题:
成功!!!
运行结果:
🎁 附录
提示词和源码获取:
链接:https://pan.quark.cn/s/102459aba66a
提取码:hspC
更多有趣内容,可关注wx公众号“小恰学逆向”,分享一些爬虫JS逆向技术以及有趣的工具。(●´ω`●)ゞ