【验证码逆向专栏】极验三代、四代点选类验证码逆向分析
字数 2006 2025-08-11 08:36:16

极验三代、四代点选类验证码逆向分析教学文档

一、验证码类型概述

极验验证码分为三代和四代点选类验证码,主要包括以下几种类型:

  • 文字点选
  • 字序验证
  • 图标点选
  • 九宫格验证

二、三代验证码分析

1. 通讯流程

  1. register-click-official接口

    • 返回challenge和gt值,作为get.php接口的关键请求参数
  2. get.php接口

    • 返回c和s参数
    • w参数可以置空(与三代无感不同)
  3. 验证流程

    • 点击按钮触发第一个ajax.php接口(返回验证码类型)
    • 点击文字后触发第二个ajax.php接口(返回验证结果及validate参数)

2. w参数逆向分析

关键公式

p + l = w

关键代码

var l = n[$_CACJJ(716)](), 
h = X[$_CADAG(338)](ae[$_CACJJ(130)](o), n[$_CADAG(711)]()), 
p = w[$_CADAG(776)](h)

参数分析

  1. l参数

    • n[$_CACJJ(716)]()生成
    • 内部调用this[$_CBFJA(711)](e)生成16位随机字符串
    • 使用RSA加密(需从原型链中获取公钥和模值)
  2. h参数

    • n[$_CADAG(711)]()生成16位随机字符串
    • X[$_CADAG(338)]为AES加密
    • 初始向量iv为"0000000000000000"
  3. o值关键参数

    • passtime:图片加载时间
    • a:点选文字位置
    • pic:背景图片链接
    • tt:将c、s、鼠标信息等加密
    • h9s9:"1816378497"(每天变化)
    • rp:将gt、challenge、passtime经过MD5加密
  4. p参数

    • 将h经过w[$_CADAG(776)]方法加密得到

三、四代验证码分析

1. 通讯流程

  1. load接口

    • 返回参数:
      • captcha_type:验证码类型(文字点选为word)
      • gct_path:gct4文件路径
      • lot_number:生成pow_msg、w的关键参数
      • pow_detail:与w参数相关的bits、datetime、hashfunc
      • payload:verify请求参数
      • process_token:verify请求参数
      • ques:各文字图片的链接
  2. verify接口

    • 返回参数:
      • result:校验结果(success/fail)
      • captcha_id:验证码id
      • captcha_output:login请求参数
      • gen_time:login请求参数
      • lot_number:login请求参数
      • pass_token:login请求参数
  3. login接口

    • 验证登录成功返回结果

2. w参数逆向分析

关键公式

r = (0, d[$_CBHIU(47)])(f[$_CBHHP(47)][$_CBHIU(541)](e), i)

详细分析

  1. w值组成
    (0, d[$_DIEHV(186)])(c) + u

  2. u参数

    • u = new l[($_DIEIo(47))]()[$_DIEIo(1443)](i)
    • i为16位随机字符串
    • 使用RSA加密(公钥和模值需提取)
  3. c参数

    • var c = s[a][$_DIEIo(1488)][$_DIEIo(1443)](e, i)
    • e中包含:
      • device_id、lot_number(由load接口返回)
      • userresponse(点选坐标)
      • pow_msg:"1|0|md5|" + datetime + "|" + captcha_id + "|" + lot_number + "|" + 16位随机数
      • pow_sign:pow_msg的MD5值
      • "f019":"1024281898"(动态变化的键值对)
  4. 加密方式

    • s[a][$_DIEIo(1488)][$_DIEIo(1443)]为AES加密

四、通用逆向技巧

  1. 定位关键参数

    • 搜索特征码"\u0077"定位w参数生成位置
  2. 加密算法识别

    • RSA:需要提取公钥和模值
    • AES:注意初始向量iv
    • MD5:用于生成签名值
  3. 动态参数处理

    • 注意每天变化的键值对(如h9s9、f019)
    • 随机字符串通常为16位
  4. 验证码类型差异

    • 三代和四代的主要区别在于接口流程和参数组成
    • 不同类型验证码(文字、图标、字序、九宫格)主要差异在于userresponse/a参数的写法

五、实现建议

  1. 加密算法实现

    • 可以直接扣取JS代码或使用现有加密库
    • RSA加密需要正确提取公钥和模值
    • AES加密需注意模式和填充方式
  2. 参数生成顺序

    • 按照接口调用顺序生成参数
    • 注意参数之间的依赖关系
  3. 动态参数处理

    • 对每天变化的键值对需要实现自动获取机制
    • 随机字符串应确保足够随机性
  4. 验证流程

    • 严格按照抓包顺序实现接口调用
    • 注意必要的中间请求(如第一个ajax.php)

本教学文档涵盖了极验三代和四代点选类验证码的关键逆向分析点,包括接口流程、参数生成算法和加密方式等核心内容。实际实现时需要结合具体验证码类型调整参数生成逻辑。

极验三代、四代点选类验证码逆向分析教学文档 一、验证码类型概述 极验验证码分为三代和四代点选类验证码,主要包括以下几种类型: 文字点选 字序验证 图标点选 九宫格验证 二、三代验证码分析 1. 通讯流程 register-click-official接口 : 返回challenge和gt值,作为get.php接口的关键请求参数 get.php接口 : 返回c和s参数 w参数可以置空(与三代无感不同) 验证流程 : 点击按钮触发第一个ajax.php接口(返回验证码类型) 点击文字后触发第二个ajax.php接口(返回验证结果及validate参数) 2. w参数逆向分析 关键公式 p + l = w 关键代码 参数分析 l参数 : n[$_CACJJ(716)]() 生成 内部调用 this[$_CBFJA(711)](e) 生成16位随机字符串 使用RSA加密(需从原型链中获取公钥和模值) h参数 : n[$_CADAG(711)]() 生成16位随机字符串 X[$_CADAG(338)] 为AES加密 初始向量iv为"0000000000000000" o值关键参数 : passtime:图片加载时间 a:点选文字位置 pic:背景图片链接 tt:将c、s、鼠标信息等加密 h9s9:"1816378497"(每天变化) rp:将gt、challenge、passtime经过MD5加密 p参数 : 将h经过 w[$_CADAG(776)] 方法加密得到 三、四代验证码分析 1. 通讯流程 load接口 : 返回参数: captcha_ type:验证码类型(文字点选为word) gct_ path:gct4文件路径 lot_ number:生成pow_ msg、w的关键参数 pow_ detail:与w参数相关的bits、datetime、hashfunc payload:verify请求参数 process_ token:verify请求参数 ques:各文字图片的链接 verify接口 : 返回参数: result:校验结果(success/fail) captcha_ id:验证码id captcha_ output:login请求参数 gen_ time:login请求参数 lot_ number:login请求参数 pass_ token:login请求参数 login接口 : 验证登录成功返回结果 2. w参数逆向分析 关键公式 r = (0, d[$_CBHIU(47)])(f[$_CBHHP(47)][$_CBHIU(541)](e), i) 详细分析 w值组成 : (0, d[$_DIEHV(186)])(c) + u u参数 : u = new l[($_DIEIo(47))]()[$_DIEIo(1443)](i) i为16位随机字符串 使用RSA加密(公钥和模值需提取) c参数 : var c = s[a][$_DIEIo(1488)][$_DIEIo(1443)](e, i) e中包含: device_ id、lot_ number(由load接口返回) userresponse(点选坐标) pow_ msg:"1|0|md5|" + datetime + "|" + captcha_ id + "|" + lot_ number + "|" + 16位随机数 pow_ sign:pow_ msg的MD5值 "f019":"1024281898"(动态变化的键值对) 加密方式 : s[a][$_DIEIo(1488)][$_DIEIo(1443)] 为AES加密 四、通用逆向技巧 定位关键参数 : 搜索特征码"\u0077"定位w参数生成位置 加密算法识别 : RSA:需要提取公钥和模值 AES:注意初始向量iv MD5:用于生成签名值 动态参数处理 : 注意每天变化的键值对(如h9s9、f019) 随机字符串通常为16位 验证码类型差异 : 三代和四代的主要区别在于接口流程和参数组成 不同类型验证码(文字、图标、字序、九宫格)主要差异在于userresponse/a参数的写法 五、实现建议 加密算法实现 : 可以直接扣取JS代码或使用现有加密库 RSA加密需要正确提取公钥和模值 AES加密需注意模式和填充方式 参数生成顺序 : 按照接口调用顺序生成参数 注意参数之间的依赖关系 动态参数处理 : 对每天变化的键值对需要实现自动获取机制 随机字符串应确保足够随机性 验证流程 : 严格按照抓包顺序实现接口调用 注意必要的中间请求(如第一个ajax.php) 本教学文档涵盖了极验三代和四代点选类验证码的关键逆向分析点,包括接口流程、参数生成算法和加密方式等核心内容。实际实现时需要结合具体验证码类型调整参数生成逻辑。