案例地址:http://rotatecaptcha.demo.api0.cn/
案例内容:对某站的旋转验证码进行逆向分析,本文只作为学习案例。
接口分析
验证码相关的接口有两个,getCaptcha 注册 、checkCaptcha 校验。
在测试站点中,headers中的 token是固定的,sign在最后校验时是动态的。
直接全局搜Sign或者md5
控制台输出下。
可以发现,是对请求参数进行了md5,所以每次校验时的sign时不同的。
但是这个参数中有很多值,比如key_1、key_2这些还需要再分析下。
可以用XHR断点,也可以直接搜。
比较明了,所以参数的分析就到这里了。
本地生成formdata的参数,然后拼接为字符串MD5加密后就是校验提交的Sign参数。
滑动距离
旋转角度 = (滑动距离 / 总滑动长度) * 总角度
rotationAngle = slide / 222 * 360
222是滑块最大移动距离,大家可以自己拿张图测试一下。
所以同理可得,*滑动距离 = (总滑动长度 旋转角度) / 总角度**
旋转角度
旋转验证码最难的应该就属图片的旋转角度了,这里先以某在线打码为例,后边再说如何做旋转识别。
如果此图旋转角度为 -80,注意负号,那么对应的滑动距离 = (222 * 280) / 360 ,距离为 172.66
那我们来校验一下。通过div的style可以看到当前的旋转角度。
也可以直接在元素的属性中查看。
发现滑块移动了173,图片旋转了280,和我们分析的一致。
移动轨迹
一般的轨迹是由角度和时间组成, 拿该站点的轨迹 mouseTrackList 示例。
定位参数后断点,可发现参数 r 是由转动角度经过一些计算得出。
代码:Math.ceil(a.imageTransform / 360 1e4) / 100
意思:先计算( 角度 / 360 10000 ),再通过浮点数向上取整规则,最后除以100得出r。
那我们可以按一些方法分割总的旋转角度,来构造一段轨迹用于校验。
到这里案例分析就结束了,出于礼貌,本文不写具体的实现代码。
图片识别
又到了推工具的时候,所谓术业有专攻,不建议大家为了做验证手动去打标签。
我们可以先用一些平台去识别旋转验证码,同时保存图片和旋转角度,在积累几百张不同的图片时再开始做识别模型。
或者说,如果一个网站的图片库是有限的,那我们完全可以下载下来后和我们本地存储的图片进行相似度匹配。
当然只喜欢开源的识别库也可以,比如 RotNet 图像旋转预测框架。
以及这两个开源库
- Rotate-Captcha-Crack
- Rotate-Captcha-Angle-Prediction