【验证码逆向专栏】某验四代滑块验证码逆向分析
字数 1359 2025-08-11 17:40:05

某验四代滑块验证码逆向分析教学文档

一、验证码概述

某验四代滑块验证码是一种常见的反爬机制,相比三代主要改进在于底图未做混淆。验证流程涉及两个关键接口:

  • load?captcha_id=xxx:初始化验证码
  • verify?captcha_id=xxx:验证滑动结果

二、关键参数分析

1. captcha_id参数

  • 来源:adaptive-captcha-demo.js文件生成
  • 特点:每个网站固定值,由极验后台申请得到
  • 定位方法:全局搜索captcha_id

2. challenge参数

  • 来源:gt4.js文件生成
  • 生成方式:由uuid函数生成
  • 位置:在captcha_id参数定义的下一行

3. w参数(核心加密参数)

w参数由多个子参数加密组合而成,包含轨迹、滑动时间、滑动距离等信息。

w参数组成结构:

{
    "passtime": 滑动时间,
    "track": 滑动轨迹,
    "setLeft": 识别出的缺口距离,
    "userresponse": a / 1.0059466666666665 + 2,
    "device_id": 固定值,
    "lot_number": load接口返回,
    "pow_msg": 复合参数,
    "pow_sign": pow_msg的MD5值,
    "em": {...},
    "kqg5": "1557244628" // 定期变化的值
}

三、关键加密流程分析

1. pow_msg生成

_ = i + "|" + r + "|" + n + "|" + s + "|" + t + "|" + e + "|" + o + "|";
h = 16位随机数字符串;
pow_msg = _ + h;

其中:

  • i: l["version"]
  • r: l["bits"]
  • n: l["hashfunc"]
  • s: l["datetime"]
  • t: h["captchaId"]
  • e: h["lotNumber"]
  • o: ""

2. pow_sign生成

pow_sign = MD5(pow_msg)

3. kqg5参数生成

  • 生成方法:_gct方法生成
  • 位置:gct4.js文件
  • 特点:每隔几小时会改变

4. 最终w参数加密

w参数最终由两部分组成:

w = d[$_DIEHS(177)](c) + u

其中:

  • c: AES加密结果数组
  • u: RSA加密结果

(1) AES加密部分

  • 加密内容:e参数(包含所有滑块信息)
  • 加密密钥:随机数i
  • 加密模式:CBC
  • 初始向量:iv
  • 位置:s[a]["symmetrical"]["encrypt"]

(2) RSA加密部分

  • 加密内容:随机数i
  • 位置:l["default"]["encrypt"]

四、逆向实现步骤

  1. 获取初始化参数

    • load接口获取lot_numberpayloadprocess_token等参数
  2. 生成challenge

    • 扣取uuid函数生成challenge
  3. 构造滑块信息对象e

    • 包含滑动时间、轨迹、缺口距离等
    • 计算userresponse = setLeft / 1.0059466666666665 + 2
    • 生成pow_msgpow_sign
    • 通过_gct方法生成kqg5
  4. AES加密

    • 使用随机密钥加密e对象
    • 模式为CBC,使用初始向量iv
  5. RSA加密

    • 加密随机密钥
  6. 组合最终w参数

    • 将AES加密结果和RSA加密结果拼接

五、关键代码片段

1. pow_msg生成

function generatePowMsg(version, bits, hashfunc, datetime, captchaId, lotNumber) {
    const _ = `${version}|${bits}|${hashfunc}|${datetime}|${captchaId}|${lotNumber}||`;
    const h = generateRandomString(16);
    return _ + h;
}

2. AES加密

function aesEncrypt(data, key) {
    const iv = CryptoJS.enc.Utf8.parse("..."); // 初始向量
    const encrypted = CryptoJS.AES.encrypt(data, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}

3. RSA加密

function rsaEncrypt(data, publicKey) {
    const encrypt = new JSEncrypt();
    encrypt.setPublicKey(publicKey);
    return encrypt.encrypt(data);
}

六、注意事项

  1. 参数时效性

    • kqg5参数每隔几小时会变化,需要定期更新
    • lot_number等参数每次验证都会变化
  2. 加密算法

    • 确保AES使用CBC模式和正确的初始向量
    • RSA使用正确的公钥
  3. 轨迹模拟

    • 滑动轨迹需要模拟人类行为,包含适当的随机性
  4. 调试技巧

    • 使用浏览器开发者工具断点调试
    • 重点关注$_BCFj$_BHIH等关键函数

通过以上分析,可以完整实现某验四代滑块验证码的逆向流程。实际应用中还需结合具体网站的参数进行调整和完善。

某验四代滑块验证码逆向分析教学文档 一、验证码概述 某验四代滑块验证码是一种常见的反爬机制,相比三代主要改进在于底图未做混淆。验证流程涉及两个关键接口: load?captcha_id=xxx :初始化验证码 verify?captcha_id=xxx :验证滑动结果 二、关键参数分析 1. captcha_ id参数 来源: adaptive-captcha-demo.js 文件生成 特点:每个网站固定值,由极验后台申请得到 定位方法:全局搜索 captcha_id 2. challenge参数 来源: gt4.js 文件生成 生成方式:由 uuid 函数生成 位置:在 captcha_id 参数定义的下一行 3. w参数(核心加密参数) w参数由多个子参数加密组合而成,包含轨迹、滑动时间、滑动距离等信息。 w参数组成结构: 三、关键加密流程分析 1. pow_ msg生成 其中: i: l[ "version" ] r: l[ "bits" ] n: l[ "hashfunc" ] s: l[ "datetime" ] t: h[ "captchaId" ] e: h[ "lotNumber" ] o: "" 2. pow_ sign生成 3. kqg5参数生成 生成方法: _gct 方法生成 位置: gct4.js 文件 特点:每隔几小时会改变 4. 最终w参数加密 w参数最终由两部分组成: 其中: c: AES加密结果数组 u: RSA加密结果 (1) AES加密部分 加密内容:e参数(包含所有滑块信息) 加密密钥:随机数i 加密模式:CBC 初始向量:iv 位置: s[a]["symmetrical"]["encrypt"] (2) RSA加密部分 加密内容:随机数i 位置: l["default"]["encrypt"] 四、逆向实现步骤 获取初始化参数 : 从 load 接口获取 lot_number 、 payload 、 process_token 等参数 生成challenge : 扣取 uuid 函数生成challenge 构造滑块信息对象e : 包含滑动时间、轨迹、缺口距离等 计算 userresponse = setLeft / 1.0059466666666665 + 2 生成 pow_msg 和 pow_sign 通过 _gct 方法生成 kqg5 AES加密 : 使用随机密钥加密e对象 模式为CBC,使用初始向量iv RSA加密 : 加密随机密钥 组合最终w参数 : 将AES加密结果和RSA加密结果拼接 五、关键代码片段 1. pow_ msg生成 2. AES加密 3. RSA加密 六、注意事项 参数时效性 : kqg5 参数每隔几小时会变化,需要定期更新 lot_number 等参数每次验证都会变化 加密算法 : 确保AES使用CBC模式和正确的初始向量 RSA使用正确的公钥 轨迹模拟 : 滑动轨迹需要模拟人类行为,包含适当的随机性 调试技巧 : 使用浏览器开发者工具断点调试 重点关注 $_BCFj 、 $_BHIH 等关键函数 通过以上分析,可以完整实现某验四代滑块验证码的逆向流程。实际应用中还需结合具体网站的参数进行调整和完善。