本文主要是介绍解密极验滑块验证码的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参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!