【验证码逆向专栏】极验三代、四代点选类验证码逆向分析
字数 2006 2025-08-11 08:36:16
极验三代、四代点选类验证码逆向分析教学文档
一、验证码类型概述
极验验证码分为三代和四代点选类验证码,主要包括以下几种类型:
- 文字点选
- 字序验证
- 图标点选
- 九宫格验证
二、三代验证码分析
1. 通讯流程
-
register-click-official接口:
- 返回challenge和gt值,作为get.php接口的关键请求参数
-
get.php接口:
- 返回c和s参数
- w参数可以置空(与三代无感不同)
-
验证流程:
- 点击按钮触发第一个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)
参数分析
-
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)]方法加密得到
- 将h经过
三、四代验证码分析
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)
本教学文档涵盖了极验三代和四代点选类验证码的关键逆向分析点,包括接口流程、参数生成算法和加密方式等核心内容。实际实现时需要结合具体验证码类型调整参数生成逻辑。