极验滑块全流程

前言:本文章依旧只是提供学习,不做其他使用,如有侵犯到您的隐私,请联系我删除博文

网址:aHR0cDovL3d3dy5nZWV0ZXN0LmNvbS9kZW1vL3NsaWRlLWZsb2F0Lmh0bWw=

首先打开网址进行抓包,分析一下未点击验证的时候出现了三个请求包

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

我们查看第一个包里面返回了gt,challenge两个值,这个值,在第二个个包中需要用到,因此需要提前保存下来

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

在分析第二个包,这个包需要携带我们之前的gt,challenge两个值,然后进行访问,这时我们看到第二个包中返回了极验的js文件,这个在后面的无感验证也会用到,但是属于可有可无那种。(这个后面详细说)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

此时在分析我们的第三个包,然后就发现里面有一个一看就是加密过的w值,这个就是极验的第一个无感W值,其实极验这个无感W值可传可不传。但是他既然写了,那我们也传进去吧。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

这个地方就需要跟栈了。极验跟栈有个关键字,但是极验也没有异步,直接一步一步跟过去就行,也没啥技巧,我这边直接放出了加密位置,这里断点打到这个位置,此时就能看到w的值是i+r。那就需要一个一个分析,首先分析r值,我们这边看到r值等于一个方法,方法一运行r就有值了,这边我们跟进去这个方法看一下,。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

发现这边new了一个X方法,我这边采用的是需要什么扣什么,因为如果全扣导出需要补一下环境,就更麻烦了。 跟进去这个X()方法,然后把整个X方法扣出来,然后我们自己根据他这个new一下就行。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

这边在解决这个传进去的值,这个也没啥技巧,一步一步跟进去,最终发现这个是一个随机数。然后直接扣下来。放到浏览器运行一下就行。这边也可以自己随机生成,反正看我们自己。就此,第一个r值生成完毕。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

 这边在解决这个i值,我们发现i值传进去了一个o,这边先去看o是如何生成的,第一个值发现是一个很长的字符串,这边也需要直接跟进去看一下,这个值是如何生成的。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

 我跟这个的时候的时候,一直问题,最大的原因就是不仔细。现在我给圈出来的地方,首先

 t[$_CFAFI(143)]这个被赋值给了e,然后e又被赋值给了 t[$_CFAFI(1356)][$_CFAFI(1173)]()这个方法,这个方法一运行就出现了我们想要的数据。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

 再次跟进这个t[$_CFAFI(1356)][$_CFAFI(1173)]这个方法,我这边是这么操作的,在ruturn处下个断点,再到结尾处下个断点,这样确保里面的断点不会失效。这时就能会发现,里面的r值就是生产配置项的watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

 输入r我们会看到一堆配置项,我们一直说风控,什么是风控这里就是所谓的风控。我没标记的值直接写死就行。注:这些只是我个人记录,如果有问题,欢迎各位大佬帮忙指出。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

就此,我们的第一个值已经生成完毕。第二个值我也不多过于介绍,他也是一个随机数,按照直接跟栈就行。所指向的是同一个位置,这时在扣下这个整体算法,跟之前一样,直接进去,然后把$_BDg()函数整体扣下来就可以了,放到我们的浏览器跑一下,最终出现了我们想要的数据。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

现在就差i值的生生成,这个说实话也没什么技术含量,跟进去,看是谁生成的,这边直接把这个p方法整体抠出即可。 就此,第一个无感w值已经生成完毕。

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

再接着流程走,这时需要点击一下然后出现滑块。我们又一次发现这个w值,按照之前的方法跟栈就行,但是我比较菜,这个我没弄,也没深入去搞他。就把第二个w值滞空了。如果有兴趣的,可以私聊我,在一起解决一下也没问题。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

 接着往下走,这边又一次请求了极验,发现返回了一堆数据,其中这里面的数据就有我们所需要的,其中gt跟challenge值发生了变化,需要重新携带一下

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

 跟到这一步,我们就要去还原他的底图,因为极验的底图都是打乱的。需要我们去重新切割并且还原。这里就有个问题,怎么去找到他生成图片的算法呢?这边就需要重新下断点,但是断点类型不一样,他这个是通过canvas渲染出来,这边需要重新下断点类型,使用如下方法直接就能定位到他滑块创建的地方 

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_15,color_FFFFFF,t_70,g_se,x_16

 刷新滑块图,这时就能找到创建滑块的位置了,这个就是创建滑块底图的位置,稍微用python代码把这个还原一下就行,我这边就不放出了,如果有想要的,可以私聊我。其中他这个切割的值是写死的,就不用来回变动了。就此底图还原,我们这边也做完了。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

 接下来就是滑动滑块,查看最后一步,请求的值,这边发现熟悉的w值又再次出现了,这个就是对他的轨迹进行加密,那么直接跟按照之前跟栈的方式,直接跟过去就行。这里就不一步一步跟了。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

 还是熟悉的套路,还是熟悉的味道,是不是感觉特别像?看下面的截图就知道了,又在把第一个w值重新跟一次就OK了watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

 这里我着重讲轨迹生成的问题,我们先看一下o下面的aa就是我们的轨迹值,这个时候就需要一步一步跟

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

然后我们网上滑动,看到了aa被e给赋值,e又是传进来的,就需要再一次跟栈。而且我们在里面不只是发现了轨迹值,还有其他值的生成,在浏览器翻一下,就知道了,直接照搬,全部扣下来就行。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

 跟到下一个栈,这个地方就看到了加密以后的轨迹了。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

这两个值不用多说,是之前传过来的,已经做了备注了。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

现在跟进去这个函数,还是老办法,在ruturn处下断点,单步进去,就能看到t就是我们的轨迹值了,把整体扣下来,稍微进行改写一下,就没什么问题了

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

就此我们整个轨迹加密完成,回到初始位置,这里是o里面的rp值,这边我直接放出来吧。

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

 最终这里其他的o的值全部被我们拼接完成,扣算法这里,我就不在演示,具体的就按照第一个无感W值进行扣一下就行。因为极验的算法就这么两套,说白了就是一个aes跟rsa加密,如果嫌弃麻烦的,直接套库也行。

最后我们测试一下整体弄出来出来的是否能用。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p2l5bm05LqU5pyI,size_20,color_FFFFFF,t_70,g_se,x_16

这边测试了二十次,成功率达到了百分之95,只是失败了一次,整体来说成功率还是可以的。

最后,如果文章有不对的地方,欢迎大家指出。有任何问题,也可以私聊我这边。

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
代理智能提取模块v5.3 设计者:鱼刺 功能强大 通用 易上手 你所想到的我都做到了 免责声明:莫要将本模块用于违法或商业用途,否则照成的一切后果自负。与作者(鱼刺)无关。 -------------------------------------------- 更新说明: v5.3(2020-11-26) *增加新函数 置代理过滤重复回调() 用于扩展支持过滤重复代理 *新增了两个例程`扩展例程_过滤重复代理_初级.e`,`扩展例程_过滤重复代理_高级.e` *略微提升了提取和验证速度(优化了一下解析和链接零件的参数) *修改了版权说明文本(比如移除了QQ) v5.2.3(2020-07-09) *修正了使用函数修改配置项时 一些留空参数失效的问题 v5.2(2020-06-19) *修正了因修改了代理提取阀值而导致二次创建代理提取架构后无法正常提取的问题 *创建代理提取架构时多了一个参数 可控制创建后是否立即进行提取(详细说明请看参数注释) v5.1(2020-06-09) *换了一批零件 降低了内存占用 *支持了设置最多5个提取地址 *优化了代理提取触发判定 v5.0(2019-08-21) *解决了多次频繁创建销毁代理提取模块后 出现一直卡在销毁上的问题 *增加了两个新的函数`测试提取()` `测试验证()`  '//详情请查看`例程_测试代理提取验证.e` *新增了一个例程`例程_测试代理提取验证.e` *修正了部分情况下使用函数`置代理提取参数` `置代理验证参数` 调整配置无效的问题 v4.8(2019-08-03) *新增配置参数`验证自定义请求方法`用于控制验证时用GET还是POST方式或者其他方式 *新增配置参数`验证最大并发线程数`用于控制验证代理时的最大并发线程数(默认=200 可设置为5-400之间) *没有什么其他改进和BUG修正 -------------------------------------------- 简单使用流程: 1.  (编辑配置) 1.1 编辑运行目录下的`Config_Proxy.ini`填写提取和验证参数并保存 1.2 如果程序目录下没有`Config_Proxy.ini`这个文件 请调用一次`代理智能提取_创建()`会自动生成在运行目录下 1.3 你也可以用代码来配置这些信息 直接调用 `代理智能提取_置代理提取参数()` `代理智能提取_置代理验证参数()` `代理智能提取_置代理生命值()` `代理智能提取_置代理最长存活时间()` 2.  (创建和获取状态) 2.1 在执行工作前调用一次 `代理智能提取_创建()`  (比如: `启动按钮_被单击`) 2.2 你可以搞个时钟/定时器来刷新代理智能提取模块的工作状态 2.3 当你打算结束工作/工作完毕时记得执行 `代理智能提取_销毁()` 3.  (提取代理) 3.1 当你需要用代理时 直接调用`代理智能提取_获取代理()`即可得到一条代理 3.2 没错 你可以在任意环境下调用`代理智能提取_获取代理()` (比如:在并发线程中调用) 4.  (总结) 如果你已修改好了提取配置 你其实可以很轻松的使用它 只要先创建 然后只管在任意线程获取代理即可 代理快不够了会自动提取补充 就像下面这样 创建() 获取代理()'//线程A 获取代理()'//线程B 获取代理()'//线程C ... 销毁() -------------------------------------------- Config_Proxy.ini 配置说明: 触发补充阀值          : 当前剩余代理小于这个数值会触发自动提取并验证补充代理(0=自动(本次提取数量\5+5且>=5)) 提取地址1             : 用于提取代理的API地址 提取地址2             : 支持多个代理提取地址 提取地址3             : 留空为不启用 提取地址4             : 如果设置了多个提取地址 内部是轮流调用 提取地址5             : 目前最多可同时设置5个提取地址 提取分隔符            :  提取后用这个分隔符来分割成多条 默认=\\r\\n(换行符) (本参数也支持正则匹配) 提取是否正则分割      : 是否使用正则匹配 1=使用正则匹配(正则必须包含两个子匹配项 1为地址 2为端口) 0=使用分割文本匹配 提取是否UTF8解码      : 提取代理返回的网页内容是否进行UTF8解码 1=解码 0=不解码(默认) 提取是否禁止重定向    : 是否禁止网页302/301重定向 1=禁止重定向 0=允许重定向(默认) 提取自定义附加协议头  : 提取代理时附加的HTTP协议头

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值