该文章主要提供交流学习使用, 请勿利用进行不当行为
如本篇文章侵犯了贵公司的隐私,请联系我立刻删除!
如因滥用解密技术而产生的风险与本人无关
分享一下 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 学习爱好者」, 希望与您一起共同成长~