极验验证码破解—超详细教程(二)
字数 1137 2025-08-29 08:31:41

极验验证码破解详细教程(二):参数分析与生成

一、极验验证码参数分析

极验验证码的核心参数主要包括userresponsea,这两个参数是通过分析geetest.js文件得出的关键参数。

1. userresponse参数分析

geetest.js中搜索userresponse,可以找到其赋值代码:

userresponse: ca.ra(l, this.challenge)

其中:

  • l:滑块移动的距离(最终位置)
  • this.challenge:已知的挑战值

1.1 计算userresponse的Python实现

def cal_userresponse(a, b):
    d = []
    c = b[32:]
    for e in range(len(c)):
        f = ord(str(c[e]))
        tmp = f - 87 if f > 57 else f - 48
        d.append(tmp)
    c = 36 * d[0] + d[1]
    g = int(round(a)) + c
    b = b[:32]
    i = j = {}
    k = 0
    e = 0
    for e in range(len(b)):
        h = b[e]
        if h in j:
            pass
        else:
            j[h] = 1
            i[k].append(h)
            k += 1
    k = 0 if (k == 5) else k
    n = g
    o = 4
    p = ""
    q = [1, 2, 5, 10, 50]
    while n > 0:
        if n - q[o] >= 0:
            m = int(random.random() * len(i[o]))
            p += str(i[o][m])
            n -= q[o]
        else:
            del(i[o])
            del(q[o])
            o -= 1
    return p

参数说明:

  • a:滑块移动距离(l)
  • b:challenge值

1.2 l参数与Track的关系

l参数实际上是滑动轨迹Track的最后一个x坐标值:

Track[-1][0] == l

二、参数a的生成分析

参数a由oa.qa函数生成,其返回值是f

a: oa.qa(n)

2.1 参数a的生成依赖

参数a的生成依赖于三个核心函数:

  1. c函数:处理轨迹数据
  2. e函数:处理特定模式
  3. d函数:编码数值

2.1.1 c函数(轨迹处理函数)

def fun_c(a):
    g = []
    e = []
    f = 0
    for h in range(len(a) - 1):
        b = int(round(a[h + 1][0] - a[h][0]))
        c = int(round(a[h + 1][1] - a[h][1]))
        d = int(round(a[h + 1][2] - a[h][2]))
        g.append([b, c, d])
        if b == c == d == 0:
            pass
        else:
            if b == c == 0:
                f += d
            else:
                e.append([b, c, d + f])
                f = 0
    if f != 0:
        e.append([b, c, f])
    return e

功能:计算相邻轨迹点之间的差值,并处理特殊情况。

2.1.2 e函数(模式匹配函数)

def fun_e(item):
    b = [[1, 0], [2, 0], [1, -1], [1, 1], [0, 1], [0, -1], [3, 0], [2, -1], [2, 1]]
    c = 'stuvwxyz~'
    for i, t in enumerate(b):
        if t == item[:2]:
            return c[i]
    return 0

功能:匹配特定的移动模式并返回对应字符。

2.1.3 d函数(数值编码函数)

def fun_d(a):
    b = '0123456789:?@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqr'
    c = len(b)
    d = ''
    e = abs(a)
    f = int(e / c)
    if f >= c:
        f = c - 1
    if f > 0:
        d = b[f]
        e %= c
    g = ''
    if a < 0:
        g += '!'
    if d:
        g += '$'
    return g + d + b[e]

功能:将数值编码为特定字符。

2.2 完整的f函数实现

def fun_f(track_list):
    skip_list = fun_c(track_list)
    g, h, i = [], [], []
    for j in range(len(skip_list)):
        b = fun_e(skip_list[j])
        if b:
            h.append(b)
        else:
            g.append(fun_d(skip_list[j][0]))
            h.append(fun_d(skip_list[j][1]))
            i.append(fun_d(skip_list[j][2]))
    return ''.join(g) + ''.join(h) + ''.join(i)

参数说明:

  • track_list:滑块移动轨迹(Track)

三、滑动轨迹Track分析

3.1 Track的数据结构

Track是一个二维数组,格式如下:

[
    [x1, y1, t1],
    [x2, y2, t2],
    ...
    [xn, yn, tn]
]

其中:

  • x:水平坐标
  • y:垂直坐标
  • t:时间戳(毫秒)

3.2 Track的生成特点

  1. 轨迹是随机采样生成的离散坐标序列
  2. 最后一个x坐标值等于滑块移动距离l
  3. 轨迹需要模拟人类滑动行为,包括:
    • 加速和减速过程
    • 微小抖动
    • 可能的回退

3.3 Track生成的关键点

  1. 缺口位置识别:需要通过图像识别确定滑块需要移动的距离
  2. 轨迹模拟:需要根据缺口距离生成符合人类行为的轨迹
  3. 时间控制:总滑动时间应在合理范围内(通常1-3秒)

四、破解流程总结

  1. 获取challenge值:从服务器响应中获取
  2. 识别缺口位置:通过图像处理确定滑块需要移动的距离
  3. 生成Track轨迹:根据缺口距离模拟人类滑动行为
  4. 计算userresponse:使用cal_userresponse函数
  5. 计算参数a:使用fun_f函数处理Track轨迹
  6. 提交验证:将生成的参数提交给验证接口

五、待解决问题

目前教程中尚未完全解决的是Track轨迹的生成算法,这是破解极验验证码的最后一步。Track轨迹需要:

  1. 根据缺口距离动态生成
  2. 模拟人类滑动行为模式
  3. 包含合理的加速、减速和抖动
  4. 时间控制要符合正常人类操作

这部分内容将在后续教程中详细讲解。

极验验证码破解详细教程(二):参数分析与生成 一、极验验证码参数分析 极验验证码的核心参数主要包括 userresponse 和 a ,这两个参数是通过分析 geetest.js 文件得出的关键参数。 1. userresponse参数分析 在 geetest.js 中搜索 userresponse ,可以找到其赋值代码: 其中: l :滑块移动的距离(最终位置) this.challenge :已知的挑战值 1.1 计算userresponse的Python实现 参数说明: a :滑块移动距离(l) b :challenge值 1.2 l参数与Track的关系 l 参数实际上是滑动轨迹 Track 的最后一个x坐标值: 二、参数a的生成分析 参数a由 oa.qa 函数生成,其返回值是 f : 2.1 参数a的生成依赖 参数a的生成依赖于三个核心函数: c 函数:处理轨迹数据 e 函数:处理特定模式 d 函数:编码数值 2.1.1 c函数(轨迹处理函数) 功能:计算相邻轨迹点之间的差值,并处理特殊情况。 2.1.2 e函数(模式匹配函数) 功能:匹配特定的移动模式并返回对应字符。 2.1.3 d函数(数值编码函数) 功能:将数值编码为特定字符。 2.2 完整的f函数实现 参数说明: track_list :滑块移动轨迹(Track) 三、滑动轨迹Track分析 3.1 Track的数据结构 Track是一个二维数组,格式如下: 其中: x:水平坐标 y:垂直坐标 t:时间戳(毫秒) 3.2 Track的生成特点 轨迹是随机采样生成的离散坐标序列 最后一个x坐标值等于滑块移动距离l 轨迹需要模拟人类滑动行为,包括: 加速和减速过程 微小抖动 可能的回退 3.3 Track生成的关键点 缺口位置识别 :需要通过图像识别确定滑块需要移动的距离 轨迹模拟 :需要根据缺口距离生成符合人类行为的轨迹 时间控制 :总滑动时间应在合理范围内(通常1-3秒) 四、破解流程总结 获取challenge值 :从服务器响应中获取 识别缺口位置 :通过图像处理确定滑块需要移动的距离 生成Track轨迹 :根据缺口距离模拟人类滑动行为 计算userresponse :使用 cal_userresponse 函数 计算参数a :使用 fun_f 函数处理Track轨迹 提交验证 :将生成的参数提交给验证接口 五、待解决问题 目前教程中尚未完全解决的是 Track轨迹的生成算法 ,这是破解极验验证码的最后一步。Track轨迹需要: 根据缺口距离动态生成 模拟人类滑动行为模式 包含合理的加速、减速和抖动 时间控制要符合正常人类操作 这部分内容将在后续教程中详细讲解。