京东滑块验证码(java版)

时间:2024-02-17 12:43:36

下图为京东验证码:

和其他验证码一样,图片分为两部分,一部分为缺口,一部分为背景,将缺口移动到背景上对应部分即可。

我们首先来获取图片:

请求并不复杂,appid可请求首页取到或直接写死,校验得e并不影响登录及图片校验,可随机生成或直接写死。

我们再来看看返回值:

很明显,bg和patch分别对应滑块和背景图片:

可以看到滑块为png格式,但是图片大小仅仅只有滑块那么大,也就是说返回值里面肯定有来确定滑块Y轴方向的参数。

也就是y:37这个参数估计是表示滑块Y轴的位置。

我们可以用ps打开背景图片定位一下y=37的位置,发现正好是滑块的顶部。

所以这里我们只需对图片二值化后,定位小图在大图中的三个角坐标值都是黑色即可找出阴影x的位置了:

接下来我们看看滑动后的请求:

参数也不复杂,c和s可以请求首页取到,关键就剩下一个d,明显是加密过的,而且绝对是和轨迹相关。

那我们就追溯一下这个d:

这样就找到了轨迹加密方法了,我们可以看到传入是一个array,返回则是加密后的字符串。

现在就只需构造轨迹array即可。

我们先看看array是长什么样子的:

一看结构,肯定就是x,y坐标+当前时间戳组成。

多试几次就能发现,第一行是表示验证码在当前窗口的位置。

所以我们只需要模拟第一行之后的即可。

生成轨迹的方法网上也有很多了,这里随便写一个:

加密方法解决还是参考之前提到过的,直接调用js的方法,然后将我们构造的轨迹数组传入,即可得到参数d了。

这样就可得到验证成功返回值了:

jsonp_012041562394977534({"message":"success","nextVerify":"NULL_VERIFY","success":"1","validate":"d0ca79997123423886a84852f5837f44"})

本文参考:https://blog.csdn.net/qq_21189053/article/details/84775194 

非常感谢该作者