解密极验滑块验证码的w参数

2024-04-07 21:36

本文主要是介绍解密极验滑块验证码的w参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、极验请求分析
滑块测试网站入口

我们首先访问极验滑块验证码测试主页,以便获取后续请求中的url。

滑块验证过程抓包

通过抓包工具分析滑块验证过程,发现与第三代滑块验证码相比,第四代简化了验证过程,加密参数w的生成也变得简单了。

请求详解

adaptive-captcha-demo

请求介绍:极验第四代验证码测试主页,主要获取下个请求中的url。

请求参数:无。

请求响应:通过正则匹配下个请求的url。

adaptive-captcha-demo.js

请求介绍:获取w参数加密所需的参数captchaId。

请求参数:无。

请求响应:通过正则匹配captchaId参数的值。

load

请求介绍:获取验证码信息,包括验证码类型、背景图、滑块图等。

请求参数:captcha_id、challenge等。

请求响应:获取滑块轨迹等信息。

verify

请求介绍:极验验证请求,收集滑动轨迹,加密生成w参数。

请求参数:captcha_id、challenge、lot_number等。

请求响应:验证成功后获取seccode。

二、js破解前准备工作
gcaptcha4.js反混淆

通过AST语法树将混淆的gcaptcha4.js文件还原,以便后续分析。

找到w参数

在进一步分析w参数生成之前,我们需要找到w参数所在的位置,并准备好所需的函数和算法。

三、具体代码实现

from Crypto.Cipher import AES
import base64
import random
import hashlib

# AES解密函数
def decrypt_aes(w, key):
    cipher = AES.new(key, AES.MODE_ECB)
    decrypted = cipher.decrypt(base64.b64decode(w))
    return decrypted.decode('utf-8')

# 外部函数调用解密函数
def get_h(e, t):
    # 外部函数内部实现,需要根据实际情况填写
    pass

# 构造UUID函数
def uuid():
    # UUID生成函数实现,例如通过随机数生成
    return str(uuid.uuid1())

# 加密函数
def encrypt(e, t):
    # 加密函数内部实现,需要根据实际情况填写
    pass

# 获取lot_number
def get_lot_number():
    # 从上个请求响应中获取lot_number值
    return "4b4ef3e583444e0fb..."

# 获取w参数
def get_w(track, captcha_width):
    e = construct_e(track, captcha_width)
    lot_number = e["lot_number"]
    key = hashlib.md5(lot_number.encode()).digest()
    h = get_h(e, key)
    return encrypt(e, h)

# 其他辅助函数和对象构造函数等...

# 使用示例
if __name__ == "__main__":
    # 待解密的参数
    w = "c742e66584e3b20ad523c2ddff..."
    # AES解密所需的密钥,长度必须是16、24或32字节
    key = b"my_secret_key_1234"  # 示例密钥,需根据实际情况更改
    # 调用解密函数
    decrypted_w = decrypt_aes(w, key)
    # 打印解密后的参数
    print("Decrypted w parameter:", decrypted_w)

更多内容访问网站

这篇关于解密极验滑块验证码的w参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883733

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL