解密极验滑块验证码的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

相关文章

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

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

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

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

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