实战14-极验3风控
此风控是两次点击后随机出现无感/滑块/点选,未记录点选过程
极验3与极验4区别

一.第一次点击

1.请求接口
请求接口:https://api.geetest.com/get.php?.......

gt:在 https://www.anjuke.com/general/captcha/register?.....的接口响应中获取
challenge:在 https://www.anjuke.com/general/captcha/register?.....的接口响应中获取
w:aes+rsa加密结果
下面重点看w生成过程
2.w生成过程
进对应接口堆栈一个个看,找到加密出值位置

w = i+r

2.1加密值r-rsa
r= t[$_CEEJe(1170)](),进入t[$_CEEJe(1170)]()的函数中,看最终返回的值是t,在得到t值的地方都打上断点,看下图有setPublic是rsa的一个特性,其中还出现了e: 65537这是 RSA 的公共指数(转换成十六进制就是0x010001)
确认是rsa后就去找他的公钥,进入函数便能获取到公钥


接下来便可以组件rsa加密过程,rsa加密还需要一个参数是一个16位的随机值(此处简称e4)后面也需要这个值,并且要保持统一
2.2.加密值i-aes
o = $_BFr()[$_CEEIG(1131)](de[$_CEEIG(457)](t[$_CEEJe(387)]), t[$_CEEIG(1144)]()) ,i = p[$_CEEJe(1196)](o) 这是i生成方式,挨个分析t[$_CEEIG(1144)]():o中的第二个参数,这个就是上面e4,要保持一致,de[$_CEEIG(457)](t[$_CEEJe(387)]):o中的第一个参数如下图需要替换gt与challenge值
下面看函数如何对参数一和二进行加密生成o值;进入函数中将这段代码手动解混淆就会很明显,如图:iv 是 AES 等对称加密(尤其是 CBC 模式)的标志性参数,所以r = m['encrypt'](c, e, t, n)是cbc模式,iv为'0000000000000000'的aes加密

得到加密值后还需要,提取密文的 “数值数组” 和 “有效字节长度”才能得到与网页上相对应的s(等同于o值)值形式

得到o值,还需要加工一下p[$_CEEJe(1196)](o)才能得到i,进入函数查看生成情况,进入函数中把函数直接拿下来调用(可以给ai试试)将o值传参给这个函数就可以得到我都需要的i值了

后面w放入请求中就可以拿到响应的,响应中有c,s值,此处这个值无用处,但后面又出现一次c,s会用到,两次有区别请注意
所以第一次点击是 i :两个参数一个长string,一个e4,aes加密后提取密文的 “数值数组” 和 “有效字节长度”,将提取的数组再用自定义的算法,得到正确的i值
r:需要一个参数e4,然后通过rsa加密,最后w= i+r
二.第二次点击
1.请求接口
与第一次点击相同,变化gt和challenge值,对w值进行解密

2.w生成过程
根据堆栈找到出值处

依旧挨个分析,先看参数,参数一是一个长string,里面只需要把rp改成动态其他不变即可,参数二是十六位随机数e4,rp是f"{self.gt}{self.challenge[0:32]}{6632}"的md5加密

c[$_CFFIf(92)]对两个参数进行加密,进入函数中查看,有点眼熟,是上面那个aes(能得到o值的函数)直接拿过来复用
再看,p[$_CFFIf(1196)],进入函数还是眼熟是上面那个被直接拿下来的函数,那也直接拿过来调用吧
第二次点击加密过程等同于第一次加密中i的生成过程,只是参数不同
3.响应
此处result会显示接下来出现的验证,success是无感,slide是滑块,click是点选,如果是无感的话还会有个validate值

三.验证无感/滑块
此处跳过点选,ddddocr在极验3点选中识别率太低,可以直接调用打码平台1.无感
无感可以直接携带validate参数进行校验,校验响应结果携带history值则成功,可直接请求history链接
2.滑块
请求此接口获取滑块图片,极验3需要底图还原,计算滑块距离,记录滑块轨迹,并获取下c,s后面用,此处challenge会发生变化暂且记录为challenge2
2.1.w值
根据堆栈找加密,和第一次点击有点像,看一下加密是一模一样的只是参数不同,参数一:一个长string,参数二:16位随机数e4,下面主要分析参数一

2.2.w中加密参数

rp:同上md5加密值是:f"{self.gt}{self.challenge}{guiji[-1][-1]}"
passtime:轨迹结束的时间
aa:是轨迹,c,s,值的加密
userresponse:是滑块距离,challenge2的加密
"h9s9": "1816378497"这个字符组有些网站会校验,此网站中固定即可
yt[$_CAIAL(291)](o)是全部参数一,网上找o如何生成

打印key发现 userresponse=H(t, i[$_CAHJk(168)]),t是滑块距离,i[$_CAHJk(168)]是challenge2,加密的话直接进入H函数中把这个函数拿下来直接调用
aa = e,e是传参进来,去堆栈看找传参位置

这里一个个打印查看值,这里参数一轨迹内还有一层加密,参数二c,参数三s,
跟栈进去直接把函数拿下来,缺什么补什么

上面有奖此处w加密过程与第一次点击相同,所以将对应参数带入,进行求值便可
响应结果,也会得到一个validate值,同无感一致携带validate参数进行校验,校验响应结果携带history值则成功,可直接请求history链接


浙公网安备 33010602011771号