osin 发表于 2021-9-1 13:09:09

某验第三代滑动验证码分析(最新):第三部分


接着之前的部分来,老规矩,仅供学习研究,勿用于商业用途
第三步:加密轨迹并提交验证加密滑动轨迹
我们先来看最终提交验证的接口:
https://img-blog.csdnimg.cn/8102fae89e414ddfa1ee38409491721f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAT1Npbm9vTw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center
https://img-blog.csdnimg.cn/601cab1a3dd44f10adc43c8d52ef9792.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAT1Npbm9vTw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center

可以看到有加密参数w(第三个),想都不用想,这加密里肯定包含滑块轨迹。

加密逻辑在slide.7.8.3.js,需要先解混淆(按第一部分的方式来),然后用老办法,直接搜索"w"(带引号):
https://img-blog.csdnimg.cn/5dad5ac52a854270a5c55a8270c3bc7a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAT1Npbm9vTw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center

可以看到只有一处匹配,直接打上断点就能断到
https://img-blog.csdnimg.cn/fada274fdcc94be9b2f53146c81ad490.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAT1Npbm9vTw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center

需要注意o[“passtime”]的变化,后面需要替换成轨迹里最后一个点通过的时间。
可以看到这里的加密跟第一个w的加密很像(确实如此)。直接说结论,s就是RSA加密随机生成一个AES密钥得到的值,这里的n["qNfX"]()就是随机生成的密钥,_就是AES加密了对象o。但是我们查看对象o,却并没有发现轨迹类似的数据。难道它没有加密轨迹?这不可能。

我们往上追一个堆栈:
https://img-blog.csdnimg.cn/b56a7da024464736af8b9c9f1921611b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAT1Npbm9vTw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center

哈,在这呢!轨迹先被加密成了f,再传到下一层去加密。轨迹数组里每一个小数组代表的含义:



除了轨迹,f参数的加密还用到了之前获取图片验证码的get.php接口返回的c和s值。入口找到了,扣呗。。。不细讲了,后面的RSA+AES加密可以参考第一个w参数的生成
建立轨迹库
当我们搞定轨迹加密之后,还需要建一个轨迹库(当然你也可以使用轨迹生成算法,如果你有的话- -)。建立轨迹库需要拿到真实的滑动轨迹,也就是需要我们手动收集,但如果打断点一条一条收集的话,效率太慢了

说一说我的方案,我是修改了slide.7.8.3.js文件,在文件开头定义了一个全局变量:
window.aaa = [];
然后在轨迹加密的地方将轨迹数组添加进我定义的变量里:
window.aaa.push(r["JPiA"].wHVU);
https://img-blog.csdnimg.cn/fd7ffbcc045c4f2492691be3fcaaaa86.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAT1Npbm9vTw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center

这样就可以愉快地收集轨迹啦~由于我们需要的只是手动滑动的轨迹,是不需要每一次都通过验证的,不通过验证的轨迹同样有效(ps:贴个小知识,每一张验证码可以滑动6次,前五次可以随意拖动,最后一次可以拖到缺口处,同样不会验证通过,会切换下一张验证码),尽量每个距离都收集一下。我收集了500条,基本上后面验证够用了。

收集完之后直接控制台打印window.aaa把轨迹数组取出来,然后用代码处理一下,由于量不多,我就保存在了txt文件里了
https://img-blog.csdnimg.cn/ca43d88130e246a2b232497a6002b91a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAT1Npbm9vTw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center

一行保存一条轨迹,并且我把轨迹匹配的长度提取到了数组的第一个,方便后面匹配用。
提交验证
到这里基本上没有什么难点了吧,只要缺口距离识别正确,并且匹配到了轨迹,验证通过的成功率还是非常高的
https://img-blog.csdnimg.cn/9cf03afeedc64c7c852936713c5e1457.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAT1Npbm9vTw==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center

好了,全部的分析就到此结束了。有坑是必然的,就是要多练习才能有经验


欢迎访问我的原始文章:https://blog.csdn.net/qq_31998745/article/details/120037449

hypn0s 发表于 2021-10-8 16:07:38

受益匪浅
页: [1]
查看完整版本: 某验第三代滑动验证码分析(最新):第三部分