注:本篇博客仅供学习使用,请勿用做其他商业用途,如有侵权,请联系本菜鸟
前段时间本小菜鸟研究了某验的点选类型验证码,今天开始研究他们的另一类验证码-滑块
先直接上流程(和点选的步骤基本相同):
1.请求gt/register-slide-official
这个接口,拿到网站唯一的id(gt
),以及一个有效的challenge
2.和点选类型一样用gt值请求gettype.php接口
3.用gt和challenge参数请求验证码类型(w值置为空)
4.获取背景图片的信息
这个链接下载到本地的背景图片是乱序的,需要将它还原
5.还原图片:
很明显,该图片是使用canvas画出来的,所以打上canvas断点,将canvas要被创建时的动作断下来,查看这里的还原算法
for (var a = r / 2, _ = 0; _ < 52; _ += 1) {
var c = Ut[_] % 26 * 12 + 1
, u = 25 < Ut[_] ? a : 0 // c,u这两个变量的含义分别是第Ut[_]个乱图中的
//小图块的左上角的x,y的像素位置
, l = o[$_CJET(69)](c, u, 10, a); //将小图块从[c,u]坐标开始从乱图中(宽度为10,高度
//为a(这里a=80))扣下来
s[$_CJET(66)](l, _ % 26 * 10, 25 < _ ? a : 0); //将扣下来的小图块,按从左到右,由上到下的
} //顺序拼接生成一个新的图片
从上面的for循环代码中不难看出,逻辑是将乱图分为上下26份小图,由乱图的26份的10×80小图片拼接成是260×160的图片,并且经过多次调试得到Ut
值为固定的:
值得注意的是乱图中的宽度为312,312/26=12,按道理说每个小图片的长高应该为12x80才对,而实际上却是每个小图片去除了两个像素的,所以计算的时候用的10x80
由上分析,即可用Python代码还原这一部分逻辑,具体的Python代码本小菜鸟就不展示了,直接上结果