该文章主要提供交流学习使用, 请勿利用进行不当行为

如本篇文章侵犯了贵公司的隐私,请联系我立刻删除!

如因滥用解密技术而产生的风险与本人无关

分享一下 bd 旋转验证码的破解思路

神秘地址

aHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS9zdGF0aWMvY2FwdGNoYS90dXhpbmcuaHRtbD9haz0yZWY1MjFlYzM2MjkwYmFlZDMzZDY2ZGU5YjE2ZjYyNSZiYWNrdXJsPWh0dHAlM0ElMkYlMkZ0aWViYS5iYWlkdS5jb20lMkZwJTJGNDIwNTQ0NjMxMyUzRnBpZCUzRDgwMzc1OTYyNTA4JTI2Y2lkJTNEMCZ0aW1lc3RhbXA9MTYwNDk5NjA4MiZzaWduYXR1cmU9YmE1NWNlZWVjMGY5MDY1ZjJiZjk5MGYwNTQyN2JhNjEjODAzNzU5NjI1MDg=

前言

相比其他家验证码来说, 这家的难度相对比较简单,整体代码基本没有混淆,逻辑也相对比较简单,而且触发的方式也是风控限制为主,不想破解的小伙伴也可以选择通过模拟生成 cookie 然后重试来绕过~

流程

先通过 viewlog 接口获取 tk 和 as




再拿着 tk 访问 getstyle 接口获取验证码图片和 backstr




人工旋转之后, 会把旋转轨迹和 backstr 加密后作为参数传给 viewlog 接口,然后接口返回验证是否成功,op = 0 代表失败, op = 1 代表成功。




ok, 上面我们已经确认了人为处理过程中的整个过程,那么我们再来回溯一下其中的技术难点以及解决方案:

旋转轨迹生成

还是老规矩,人工模拟滑动,收集轨迹特征,写个算法模拟生成类似轨迹, 加入随机值,保障每次轨迹不同即可。

旋转角度确认

这里相对不太好弄,opencv 对于旋转的识别并没有识别滑块那么丝滑(也可能是我菜吧, 23333)

这里推荐收集样本训练个模型, 或者直接网上搜索个现成的模型, 我用的是这个,小伙伴们也可以参考使用:

参数加密

主要是 fs 参数的加密




我们溯源看一下 js 文件发现并没有混淆,而且逻辑也非常清晰,就是一个标准的 AES + ECB 模式加密



整个流程都已经通了, 那么我们改写成 py 代码再验证一下最终的效果:


done,最终准确率大概在 50% 以上。

如果您在实际开发过程中遇到过 Python、Golang、数据库、爬虫、分布式、消息队列等方面的难题, 也欢迎在公众号或评论区留言, 我们一起探讨解决方案

如果本篇内容能够帮助到您, 希望您关注我的公众号: 「python 学习爱好者」, 希望与您一起共同成长~