本篇分享极验3代文字点选验证码

声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

逆向目标

目标:极度验三代文字点选类验证码(文字、字序、图标、九宫格)逆向分析
三代主页:aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vc2hvdw==

通讯流程
接口相关:

完整流程:

在这里插入图片描述
在这里插入图片描述

三代抓包情况

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

在这里插入图片描述

get.php 会返回 c 和 s,同样后面会用到,这个接口的 w 值与三代无感不同,可以置空:
在这里插入图片描述

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

三代逆向分析

w 参数逆向
从 ajax.php 接口处跟栈或者直接搜索特征码 “\u0077” 即可定位到 w 参数值生成的位置,位于 click.3.0.7.js 文件的第 5839 行:
在这里插入图片描述

p + l = w,关键代码:

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

var l = n[ C A C J J ( 716 ) ] ( ) , h = X [ _CACJJ(716)]() , h = X[ CACJJ(716)](),h=X[_CADAG(338)](ae C A C J J ( 130 ) ] ( o ) , n [ _CACJJ(130)](o), n[ CACJJ(130)](o),n[_CADAG(711))
, p = w[ C A D A G ( 776 ) ] ( h ) 先来看看 l 参数,跟到 n [ _CADAG(776)](h) 先来看看 l 参数,跟到 n[ CADAG(776)](h)先来看看l参数,跟到n[_CACJJ(716)] 中去,this[ C B F J A ( 711 ) ] ( e ) 为十六位随机字符串,跟到 t h i s [ _CBFJA(711)](e) 为十六位随机字符串,跟到 this[ CBFJA(711)](e)为十六位随机字符串,跟到this[_CBFJA(711)] 中将算法扣下来即可:

在这里插入图片描述

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

o 值的关键参数如下:

passtime:图片加载时间
a:点选文字位置
pic:背景图片链接
tt:将 c、s、鼠标信息等进行加密,某些值可以固定,加密方法直接扣下来即可
h9s9: “1816378497”
rp:将 gt、challenge、passtime 经过 MD5 加密
将 h 经过 w[$_CADAG(776)] 方法加密后得到 p,跟进去扣下来即可,三代图标、语序除了 a 的写法,其他逻辑都是一样的。

模型问题

解决了参数问题,还要解决文字识别问题。
市面上有很多,比如这个github模型实现文字点选、选字、选择、点触验证码识别,基于pytorch训练
如果对识别结果要求不高。。。能够忍受一定的失败率大概识别准确率30%以上,建议直接用 ddddocr

还有不明白的可以vx同号联系哈

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现 Vue 文字点选验证码的方法如下: 1. 首先,需要在 Vue 中引入 `vue-verify-pop-up` 插件。 2. 在 Vue 组件中,定义验证码的数据和方法。例如: ``` data() { return { verifyCode: '', // 验证码 verifyText: [], // 验证码文字列表 verifySelections: [], // 用户择的文字 } }, methods: { // 生成验证码 createVerifyCode() { // 生成验证码文字列表 this.verifyText = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']; // 随机择 4 个文字作为验证码 this.verifySelections = []; for (let i = 0; i < 4; i++) { const index = Math.floor(Math.random() * this.verifyText.length); this.verifySelections.push(this.verifyText[index]); } // 将验证码文字列表打乱 this.verifyText.sort(() => Math.random() - 0.5); }, // 验证用户择的文字是否正确 verify() { if (this.verifySelections.join('') === this.verifyCode) { alert('验证成功'); } else { alert('验证失败'); } // 重新生成验证码 this.createVerifyCode(); }, } ``` 3. 在 Vue 模板中,使用 `vue-verify-pop-up` 插件的组件和方法,实现验证码的显示和操作。例如: ``` <template> <div class="verify-container"> <verify-pop-up :items="verifyText" :max="4" :selections.sync="verifySelections" @complete="verify" /> <button @click="createVerifyCode">重新生成</button> </div> </template> ``` 在这个例子中,`verify-pop-up` 组件是 `vue-verify-pop-up` 插件提供的组件,用于显示验证码文字列表和用户择的文字。`items` 属性指定验证码文字列表,`max` 属性指定用户需要择的文字数量,`selections` 属性指定用户择的文字,`@complete` 事件表示用户完成了择操作,需要进行验证。`createVerifyCode` 方法用于重新生成验证码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值