freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

【验证码逆向专栏】极验三代、四代点选类验证码逆向分析
K哥爬虫 2023-03-30 16:03:03 215017
所属地 湖北省

逆向目标

  • 目标:某验三代、四代点选类验证码(文字、字序、图标、九宫格)逆向分析

  • 三代主页:aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vc2hvdw==

  • 四代主页:aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v

通讯流程

接口相关:

01

完整流程:

02

三代抓包情况

通过抓包发现,register-click-official接口会返回challengegt值,为get.php接口的关键请求参数:

03

get.php会返回cs,同样后面会用到,这个接口的w值与三代无感不同,可以置空:

04

点击按钮进行验证,会弹出文字点选框,此时抓包到第一个ajax.php接口,虽然只返回了验证码类型,没什么关键参数,但是不请求会报错,点击文字进行验证后,抓到第二个ajax.php接口,返回验证结果及validate参数的值,该值登录接口会用到:

05

三代逆向分析

w 参数逆向

ajax.php接口处跟栈或者直接搜索特征码"\u0077"即可定位到w参数值生成的位置,位于click.3.0.7.js文件的第 5839 行:

06

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)为十六位随机字符串,跟到this[$_CBFJA(711)]中将算法扣下来即可:

07

因此 t 是将十六位随机字符串加密后得到的,这里为 RSA 加密,从原型链中跟进去即可找到公钥和模值,将代码扣下来或者直接用库都行,至此 l 值分析完了,接下来是 h 值,n[$_CADAG(711)]()同样是十六位随机字符串,h 参数的加密方法为X[$_CADAG(338)],跟进去打断分析会发现是 AES 加密,初始向量 iv 为0000000000000000

08

o 值的关键参数如下:

  • passtime:图片加载时间

  • a:点选文字位置

  • pic:背景图片链接

  • tt:将 c、s、鼠标信息等进行加密,某些值可以固定,加密方法直接扣下来即可

  • h9s9: "1816378497":该键值对每天变化,扣法往期文章讲过

  • rp:将 gt、challenge、passtime 经过 MD5 加密

将 h 经过w[$_CADAG(776)]方法加密后得到 p,跟进去扣下来即可,三代图标、语序除了 a 的写法,其他逻辑都是一样的。

结果验证

09

四代抓包情况

抓包,load接口返回值如下:

10

  • captcha_type:验证码类型,文字点选为 word

  • gct_path:gct4 文件路径

  • lot_number:生成 pow_msg、w 的关键参数

  • pow_detail:bits、datetime、hashfunc 都与 w 参数有关

  • payload:verify 请求参数

  • process_token:verify 请求参数

  • ques:各文字图片的链接

点击验证后,verify接口返回校验结果及 login 请求参数:

11

  • result:校验结果,成功即 success,失败为 fail

  • captcha_id:验证码 id

  • captcha_output:login 请求参数

  • gen_time:login 请求参数

  • lot_number:login 请求参数

  • pass_token:login 请求参数

login接口验证登录成功则返回:

12

四代逆向分析

w 参数

与三代文字点选一样,四代的 w 参数同样直接搜索"\u0077"即可定位到,r 为 w 参数的值:

13

r 参数定义在第 6096 行,内容如下:

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

跟进到d[$_CBHIU(47)]中,(0, d[$_DIEHV(186)])(c) + u即 w 值:

14

u 定义在第 11461 行:

u = new l[($_DIEIo(47))]()[$_DIEIo(1443)](i)

由上可知,u 是将 i 经过加密后得到的值,i 定义在上面一行,跟进去会发现是十六位随机字符串,u 的加密方式为 RSA,公钥和模值如下,将加密算法扣下来或者直接用库都可:

15

(0, d[$_DIEHV(186)])(c)是将 c 进行了加密处理,c 定义在第 11462 行:

var c = s[a][$_DIEIo(1488)][$_DIEIo(1443)](e, i);

i 上文讲了,为十六位随机字符串,e 中device_idlot_numberload接口返回,userresponse为点选坐标,pow_msg"1|0|md5|" + datetime + "|" + captcha_id + "|" + lot_number + "||" + 16位随机数pow_msg经过 MD5 加密即为pow_sign"f019":"1024281898"为动态变化的键值对,在往期四代滑块的文章中均有详细介绍,其他值固定即可:

16

接下来跟进到s[a][$_DIEIo(1488)][$_DIEIo(1443)]中,c 为 AES 加密,扣代码或者直接用库:

17

四代图标、字序、九宫格除了 userresponse 的写法,其他逻辑都是一样的。

结果验证

18

# web安全 # python # 爬虫
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 K哥爬虫 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
K哥爬虫 LV.7
欢迎关注微信公众号:K哥爬虫,分享 JS/APP/小程序逆向、数据加密解密、高级爬虫进阶知识!
  • 86 文章数
  • 56 关注者
【验证码识别专栏】某盾躲避障碍与某里图像复原验证码识别
2025-04-15
【APP 逆向百例】淘某热点 APP 逆向分析
2025-03-24
【验证码逆向专栏】某盾 v2 滑动验证码逆向分析
2025-03-03
文章目录