旋转验证码分析

案例地址: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
点赞

发表回复