极验4代滑块验证码破解(补环境直接强暴式拿下)

前言

极验第四代好像简单了特别多,没有什么技巧,环境党直接5分钟拿下。

网址: aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vYWRhcHRpdmUtY2FwdGNoYS1kZW1v

一、分析

直接去它官网,滑动滑块打开控制台瞅瞅
在这里插入图片描述
在这里插入图片描述
可以看到有个verify请求,看它返回的这个请求应该就是提交移动距离的地方了,接下来再看看提交了哪些数据,可以看到极验的老样子,还是w参数。(其他参数都可以再load那个请求里面得到,这里不再赘述,读者可以自己去看看)
blog.csdnimg.cn/6ddc72aafa984ba8bffeff9107279557.png)
打开启动器,去往上跟堆栈,跟到这一步就差不多了
在这里插入图片描述
这个就是我们想要的w参数
在这里插入图片描述
再往上看,这个r的调用方式就这么直接给出来了,现在追进去看看它这个方法
在这里插入图片描述
可以看到传入的这两个参数,第一个参数很明显就是移动距离和时间的信息,先不管它,看看第二个参数,这是一个对象,并且没有办法直接复制下来(我是懒得很的,我非要把它弄下来,双击第二个参数,可以发现这个r方法里,就使用了它其中的一个值)

在这里插入图片描述
这个值我们是可以复制下来的(那就很舒服了),到这里,参数的传入基本上都清楚了。
在这里插入图片描述
接下来不要急,补环境嘛,省时间,那我们就直接开始观察一下它这个js,可以发现,就是一整个js加载,然后里面瞎捣鼓,那不正好,直接全部拿下来,一把梭哈了它。
在这里插入图片描述
拿下来后,小小魔改一下代码,我们直接分析了,这里只需要t其中的一个值,那就把那个值当作参数传进去就好了。
在这里插入图片描述
然后把整个r给导出就完事了
在这里插入图片描述
接下来,当然不是直接本地运行,先丢到浏览器去,看看这个代码能不能正常跑。正常出值了,然后这个参数,拿去请求也是可以过的(这里不演示了,浪费时间)
在这里插入图片描述
那接下来,当然是直接扔到我们的nodejs去造了。

window=global;
document={};
better_proxy = function (o, callerName){
    return new Proxy(o, {
        set(target, property, value){
            console.table([{"类型":"set-->","调用者":callerName,"属性":property,"值":value}]);
            return Reflect.set(...arguments);
        },
        get(target, property, receiver){
            console.table([{"类型":"get<--","调用者":callerName,"属性":property,"值":target[property]}]);
            return Reflect.get(...arguments);
        },
    }
    );
}
window = better_proxy(window, "window")
document = better_proxy(document, "document")

这里给大家一个简单的代理,创建一个对象就代理一次(方法笨了点,但是不用想太多,无脑补就对了),下面这些undefined,就是需要补的,这里带大家简单补两个。
在这里插入图片描述
下面就是我随便补的两个,每次添加一个对象,记得都要给它上一个代理噢。

window=global;
document={};
better_proxy = function (o, callerName){
    return new Proxy(o, {
        set(target, property, value){
            console.table([{"类型":"set-->","调用者":callerName,"属性":property,"值":value}]);
            return Reflect.set(...arguments);
        },
        get(target, property, receiver){
            console.table([{"类型":"get<--","调用者":callerName,"属性":property,"值":target[property]}]);
            return Reflect.get(...arguments);
        },
    }
    );
}
window = better_proxy(window, "window")
document = better_proxy(document, "document")
window.location = {
    "ancestorOrigins": {},
    "href": "https://www.geetest.com/adaptive-captcha-demo",
    "origin": "https://www.geetest.com",
    "protocol": "https:",
    "host": "www.geetest.com",
    "hostname": "www.geetest.com",
    "port": "",
    "pathname": "/adaptive-captcha-demo",
    "search": "",
    "hash": ""
};
window.navigator= {
    userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',
    appName:'Netscape'
}
document.body = {}
document.head = {}
document.documentElement = {}
window.location = better_proxy(window.location, "window.location")
window.navigator = better_proxy(window.navigator, "window.navigator")
document.body = better_proxy(document.body, "document.body")
document.documentElement = better_proxy(document.documentElement, "document.documentElement")

其实上面补的都差不多了,就差最后一个(自己补吧),全部给出来,好像不太好。
在这里插入图片描述结果如下:
在这里插入图片描述
不扯什么混淆,就强暴式补出来,但是吧,这第二个参数这么多,都要用来加密吗
在这里插入图片描述
作为一位懒人,我就直接给它上了个代理,可以看到这么多就使用了一个pt,那就给一个pt就完事了。
在这里插入图片描述
到这里,这个极验4就完事了。

二、验证

那整出来了,不得验证去玩一下,回到之前的load请求,可以看到很多参数都是verify请求需要的。里面还包含了验证码的背景图片和验证码缺口图片。
在这里插入图片描述
拿到postman去转成python,然后,我们就可以做下一步了,验证码缺口识别。
在这里插入图片描述
我使用了下面大佬的代码
如何用python识别滑块验证码中的缺口_python

import cv2
def identify_gap(bg,tp,out):
 '''
 bg: 背景图片
 tp: 缺口图片
 out:输出图片
 '''
 # 读取背景图片和缺口图片
 bg_img = cv2.imread(bg) # 背景图片
 tp_img = cv2.imread(tp) # 缺口图片
 
 # 识别图片边缘
 bg_edge = cv2.Canny(bg_img, 100, 200)
 tp_edge = cv2.Canny(tp_img, 100, 200)
 
 # 转换图片格式
 bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
 tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)
 
 # 缺口匹配
 res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) # 寻找最优匹配
 
 # 绘制方框
 th, tw = tp_pic.shape[:2] 
 tl = max_loc # 左上角点的坐标
 br = (tl[0]+tw,tl[1]+th) # 右下角点的坐标
 cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2) # 绘制矩形
 cv2.imwrite(out, bg_img) # 保存在本地
 
 # 返回缺口的X坐标
 return tl[0] 

把两张图片传进去就行了,最后一个参数是输入结果图片的位置。(两张图片在load请求返回回来的返回体上面)
在这里插入图片描述
最后得到他需要移动的距离。
再去调用js,把这个移动距离传进去就行了(传给第一个参数)

function init(data_x){
    let mydata = '{"setLeft":'+data_x+',"passtime":1915,"userresponse":'+data_x+'.81178591310345,"device_id":"自己搞(网页上都有的)","lot_number":"自己搞(网页上都有的)","pow_msg":"自己搞(网页上都有的)","pow_sign":"自己搞(网页上都有的)","geetest":"captcha","lang":"zh","ep":"123","rigp":"199241198","yeg6":"d6w9","em":{"ph":0,"cp":0,"ek":"11","wd":1,"nt":0,"si":0,"sc":0}}'
    mydata_obj={
        "pt": "1",
    }
    mydata_obj = better_proxy(mydata_obj, "mydata_obj")
    result = window.code(mydata, mydata_obj)
    console.log(result)
}
module.exports = {
    init
}

在这里插入图片描述

总结

没啥难度,越来越简单了,新手可以拿来当作入门课程

借鉴

如何用python识别滑块验证码中的缺口_python

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
滑块验证码是一种常见的验证码,旨在验证用户是否为人类。PyTorch是一个开源的深度学习框架,可以用它来实现滑块验证码识别系统。 滑块验证码通常由两个部分组成:滑块图片和背景图片。滑块图片上有一个滑块,用户需要通过拖动滑块将其放到正确的位置,以完成验证。 要实现滑块验证码的识别,可以按照以下步骤进行: 1. 数据准备:收集大量的滑块验证码图片,并将其划分为训练集和测试集。训练集用于训练模型,测试集用于评估模型的性能。 2. 特征提取:使用PyTorch加载滑块验证码图片,并对其进行预处理。可以使用卷积神经网络(CNN)来提取图片的特征。 3. 训练模型:使用PyTorch构建一个深度学习模型,可以选择使用已经预训练好的模型作为基础模型,如ResNet、VGG等。然后,将提取的特征输入到模型中,通过向传播来优化模型的参数。 4. 模型评估:使用测试集对训练好的模型进行评估,计算准确率、精度等指标,判断模型的性能。 5. 模型应用:将训练好的模型部署到实际的滑块验证码系统中,用户在登录或注册时需要完成验证码验证。用户拖动滑块,系统会根据用户的操作判断是否为真实用户。 通过使用PyTorch深度学习框架,我们可以方便地实现滑块验证码的识别。它提供了丰富的工具和算法,可以帮助我们构建高性能的滑块验证码识别系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Charles-L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值