声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
逆向目标
目标:极度验三代文字点选类验证码(文字、字序、图标、九宫格)逆向分析
三代主页: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同号联系哈