某验滑块js逆向 - 底图还原

注:本篇博客仅供学习使用,请勿用做其他商业用途,如有侵权,请联系本菜鸟

前段时间本小菜鸟研究了某验的点选类型验证码,今天开始研究他们的另一类验证码-滑块
先直接上流程(和点选的步骤基本相同):
1.请求gt/register-slide-official 这个接口,拿到网站唯一的id(gt),以及一个有效的challenge
某验滑块js逆向 - 底图还原_第1张图片
2.和点选类型一样用gt值请求gettype.php接口
某验滑块js逆向 - 底图还原_第2张图片
3.用gt和challenge参数请求验证码类型(w值置为空)
某验滑块js逆向 - 底图还原_第3张图片
4.获取背景图片的信息
某验滑块js逆向 - 底图还原_第4张图片
这个链接下载到本地的背景图片是乱序的,需要将它还原
某验滑块js逆向 - 底图还原_第5张图片
5.还原图片:
很明显,该图片是使用canvas画出来的,所以打上canvas断点,将canvas要被创建时的动作断下来,查看这里的还原算法
某验滑块js逆向 - 底图还原_第6张图片

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
某验滑块js逆向 - 底图还原_第7张图片

由上分析,即可用Python代码还原这一部分逻辑,具体的Python代码本小菜鸟就不展示了,直接上结果

某验滑块js逆向 - 底图还原_第8张图片
某验滑块js逆向 - 底图还原_第9张图片
好了,图片的还原就写到这里了,谢谢大家!
如有疑问,请联系本小菜鸟

你可能感兴趣的:(python,爬虫)