接着之前的部分来,老规矩,仅供学习研究,勿用于商业用途
第三步:加密轨迹并提交验证
加密滑动轨迹
我们先来看最终提交验证的接口:
可以看到有加密参数w(第三个),想都不用想,这加密里肯定包含滑块轨迹。
加密逻辑在slide.7.8.3.js
,需要先解混淆(按第一部分的方式来),然后用老办法,直接搜索"w"(带引号):
可以看到只有一处匹配,直接打上断点就能断到
需要注意o[“passtime”]的变化,后面需要替换成轨迹里最后一个点通过的时间。
可以看到这里的加密跟第一个w的加密很像(确实如此)。直接说结论,s
就是RSA加密随机生成一个AES密钥得到的值,这里的n["qNfX"]()
就是随机生成的密钥,_
就是AES加密了对象o
。但是我们查看对象o
,却并没有发现轨迹类似的数据。难道它没有加密轨迹?这不可能。
我们往上追一个堆栈:
哈,在这呢!轨迹先被加密成了f
,再传到下一层去加密。轨迹数组里每一个小数组代表的含义:
[x, y, passtime]
除了轨迹,f
参数的加密还用到了之前获取图片验证码的get.php
接口返回的c
和s
值。入口找到了,扣呗。。。不细讲了,后面的RSA+AES加密可以参考第一个w参数的生成
建立轨迹库
当我们搞定轨迹加密之后,还需要建一个轨迹库(当然你也可以使用轨迹生成算法,如果你有的话- -)。建立轨迹库需要拿到真实的滑动轨迹,也就是需要我们手动收集,但如果打断点一条一条收集的话,效率太慢了
说一说我的方案,我是修改了slide.7.8.3.js
文件,在文件开头定义了一个全局变量:
window.aaa = [];
然后在轨迹加密的地方将轨迹数组添加进我定义的变量里:
window.aaa.push(r["JPiA"].wHVU);
这样就可以愉快地收集轨迹啦~由于我们需要的只是手动滑动的轨迹,是不需要每一次都通过验证的,不通过验证的轨迹同样有效(ps:贴个小知识,每一张验证码可以滑动6次,前五次可以随意拖动,最后一次可以拖到缺口处,同样不会验证通过,会切换下一张验证码),尽量每个距离都收集一下。我收集了500条,基本上后面验证够用了。
收集完之后直接控制台打印window.aaa
把轨迹数组取出来,然后用代码处理一下,由于量不多,我就保存在了txt文件里了
一行保存一条轨迹,并且我把轨迹匹配的长度提取到了数组的第一个,方便后面匹配用。
提交验证
到这里基本上没有什么难点了吧,只要缺口距离识别正确,并且匹配到了轨迹,验证通过的成功率还是非常高的
好了,全部的分析就到此结束了。有坑是必然的,就是要多练习才能有经验
有任何问题欢迎私信~