【验证码逆向专栏】某验三代、四代一键通过模式逆向分析
字数 1582 2025-08-11 08:36:22

某验三代、四代一键通过模式逆向分析教学文档

一、目标与声明

逆向目标

  • 某验三代无感验证主页: aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9mdWxscGFnZS5odG1s
  • 某验四代无感验证主页: aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v

免责声明

  1. 所有内容仅供学习交流
  2. 抓包内容、敏感网址、数据接口已做脱敏处理
  3. 严禁用于商业用途和非法用途
  4. 未经许可禁止转载和二次传播

二、三代无感验证逆向分析

通讯流程与关键接口

  1. register-fullpage:

    • 返回 challengegt 值,后续会使用
  2. get.php:

    • 返回 cs
    • 必须包含 w 值,否则验证会失败
    • 不带 w 请求可能返回假的 s
  3. ajax.php:

    • 验证是否成功,需要 w
    • 成功返回 validate

第一个w值逆向分析

  1. 定位方法:

    • 搜索 "\u0077" (即"w")
    • w值为 i + r
  2. 关键代码:

    var r = t[$_CFAGw(1326)]()
    var o = $_BFx()[$_CFAGw(1367)](pe[$_CFAFP(416)](t[$_CFAGw(353)]), t[$_CFAGw(1393)]())
    var i = O[$_CFAGw(1375)](o)
    
  3. r值分析:

    • 是RSA加密结果
    • 可直接扣代码或使用加密库
  4. o值分析:

    • AES加密
    • t[$_CFAGw(1393)]() 是随机字符串(整个验证过程中不变)
  5. i值分析:

    • 将o值转换为大字符串
    • 可以写死或置空

第二个w值逆向分析

  1. 定位方法:

    • 查找 var n = {};
    • t[$_CGABi(1436)] 就是w值
  2. 关键代码:

    t[$_CGAAX(1462)]() // 生成w值的关键调用
    
  3. 环境值计算:

    • 涉及浏览器环境值和鼠标移动数据
    • 实际测试中e、t、n、r四个值可置空
  4. 数据结构:

    {
      "gt": "...",
      "challenge": "...",
      "ep": {
        "ven": "显卡信息",
        "ren": "显卡信息",
        "fp": "鼠标位置",
        "lp": "鼠标位置",
        "tm": "window.performance.timing数据"
      },
      "captcha_token": "..."
    }
    
  5. 最终加密:

    • 使用随机字符串作为key
    • 对上述数据结构进行AES加密得到w值

三、四代无感验证逆向分析

通讯流程与关键接口

  1. load接口:

    • 返回:
      • captcha_type: "ai"(无感验证)
      • gct_path: gct4文件路径
      • lot_number: 生成pow_msg、w的关键参数
      • payload: verify请求参数
      • datetime: ISO 8601格式日期
      • process_token: verify请求参数
  2. verify接口:

    • 返回:
      • captcha_id
      • captcha_output: login请求参数
      • gen_time: login请求参数
      • lot_number: login请求参数
      • pass_token: login请求参数
  3. login接口:

    • 验证登录是否成功

w参数逆向分析

  1. 定位方法:

    • 搜索 "\u0077"
    • r为w参数的值
  2. r值生成:

    (0,d[$_CBHHO(84)])(f[$_CBHIE(84)][$_CBHHO(562)](e), i)
    // 等同于
    d["default"])(f["default"]["stringify"](e), i)
    
  3. 加密过程:

    • 将i参数和字符串化的e参数加密得到r
    • 加密函数定义在11669行
  4. c值生成:

    var c = s[a][$_DIEIq(1403)][$_DIEHS(1498)](e, i);
    // 等同于
    var c = s[1]["symmetrical"]["encrypt"](e, i);
    
    • e为加密内容,i为16位随机字符串
  5. e参数内容:

    • device_id: load接口返回
    • lot_number: load接口返回
    • pow_msg: "1|0|md5|" + datetime + "|" + captcha_id + "|" + lot_number + 16位随机数
    • pow_sign: pow_msg的MD5值
    • "l0zs":"53502544": 动态变化的键值对
  6. u值生成:

    u = new l[($_DIEHS(84))]()[$_DIEIq(1498)](i);
    // 等同于
    u = new l["default"]()["encrypt"](i);
    
    • 是RSA加密,可直接扣代码或使用加密库

四、关键点总结

三代关键点

  1. 两个w值生成逻辑不同
  2. 第一个w值由RSA和AES组合生成
  3. 第二个w值包含浏览器环境信息
  4. 随机字符串在整个验证过程中保持不变

四代关键点

  1. pow_msg的构造方式
  2. 动态键值对"l0zs":"53502544"的作用
  3. 16位随机字符串的生成和使用
  4. 多层加密(RSA+AES)的组合使用

通用技巧

  1. 使用"\u0077"定位w值
  2. 环境值可以适当简化或置空
  3. 加密函数可直接扣代码或使用成熟加密库
  4. 注意随机字符串的生成和保持一致性
某验三代、四代一键通过模式逆向分析教学文档 一、目标与声明 逆向目标 某验三代无感验证主页: aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9mdWxscGFnZS5odG1s 某验四代无感验证主页: aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v 免责声明 所有内容仅供学习交流 抓包内容、敏感网址、数据接口已做脱敏处理 严禁用于商业用途和非法用途 未经许可禁止转载和二次传播 二、三代无感验证逆向分析 通讯流程与关键接口 register-fullpage : 返回 challenge 和 gt 值,后续会使用 get.php : 返回 c 和 s 值 必须包含 w 值,否则验证会失败 不带 w 请求可能返回假的 s 值 ajax.php : 验证是否成功,需要 w 值 成功返回 validate 第一个w值逆向分析 定位方法 : 搜索 "\u0077" (即"w") w值为 i + r 关键代码 : r值分析 : 是RSA加密结果 可直接扣代码或使用加密库 o值分析 : AES加密 t[$_CFAGw(1393)]() 是随机字符串(整个验证过程中不变) i值分析 : 将o值转换为大字符串 可以写死或置空 第二个w值逆向分析 定位方法 : 查找 var n = {}; t[$_CGABi(1436)] 就是w值 关键代码 : 环境值计算 : 涉及浏览器环境值和鼠标移动数据 实际测试中e、t、n、r四个值可置空 数据结构 : 最终加密 : 使用随机字符串作为key 对上述数据结构进行AES加密得到w值 三、四代无感验证逆向分析 通讯流程与关键接口 load接口 : 返回: captcha_type : "ai"(无感验证) gct_path : gct4文件路径 lot_number : 生成pow_ msg、w的关键参数 payload : verify请求参数 datetime : ISO 8601格式日期 process_token : verify请求参数 verify接口 : 返回: captcha_id captcha_output : login请求参数 gen_time : login请求参数 lot_number : login请求参数 pass_token : login请求参数 login接口 : 验证登录是否成功 w参数逆向分析 定位方法 : 搜索 "\u0077" r为w参数的值 r值生成 : 加密过程 : 将i参数和字符串化的e参数加密得到r 加密函数定义在11669行 c值生成 : e为加密内容,i为16位随机字符串 e参数内容 : device_id : load接口返回 lot_number : load接口返回 pow_msg : "1|0|md5|" + datetime + "|" + captcha_id + "|" + lot_number + 16位随机数 pow_sign : pow_ msg的MD5值 "l0zs":"53502544" : 动态变化的键值对 u值生成 : 是RSA加密,可直接扣代码或使用加密库 四、关键点总结 三代关键点 两个w值生成逻辑不同 第一个w值由RSA和AES组合生成 第二个w值包含浏览器环境信息 随机字符串在整个验证过程中保持不变 四代关键点 pow_ msg的构造方式 动态键值对"l0zs":"53502544"的作用 16位随机字符串的生成和使用 多层加密(RSA+AES)的组合使用 通用技巧 使用 "\u0077" 定位w值 环境值可以适当简化或置空 加密函数可直接扣代码或使用成熟加密库 注意随机字符串的生成和保持一致性