本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!若有侵权,请联系作者删除。
网址敏感暂不提供,样本->
对混淆代码用ast进行解混淆,代码每次进入行数解混淆函数都会做赋值操作

寻找别名映射替换解混淆

ast代码
分析解混淆函数,当时没扣自执行函数,发现一直都是获取的错误的解值,后续经过调试发现会进入到IIFE自执行函数进行打乱操作,_0xf740d4一直都是508965,每次值都是进去自执行打乱,当计算结果等于 508965 时停止,数组就会被打乱到"正确"的位置


经分析,指纹脏了之后总共有两次验证码,第一次过了之后返回第二个验证码(可能是滑块,可能是点选)的信息,后面流程都一样,第一次验证码获取的接口参数不变直接固定,verify_msg参数携带了部分浏览器指纹校验信息,也有其他接口会校验指纹信息(新的指纹只需要过一次验证码),不方便写,就写verify_msg参数与部分指纹分析。

verify_msg就是_0x2ea9b5进行url编码

_0x2ea9b5是由_0x2a9ed4对象序列化加密得到的

_0x2a9ed4明文

加密函数_0x29d880就是_0x37644c函数,可以很清晰的看到encrypt和decrypt字符串,判断此处就是加密关键处。

encrypt和decrypt都是由_0x1e1aef对象new出来的

进去_0x1e1aef对象分析,加密算法一目了然,直接用算法库还原加密。

用加密库还原的加密算法。由于俺只要加密,只复现了加密算法!
明文还算是有点意思,蛮多都是环境校验,如果是补环境过的就需要过各大检测点,不过咱是扣代码,直接分析代码拿到想要的值就行了。
分析了一下_0x2a9ed4对象,除了st,jigsawViewDuration,jigsawPicWidth,jigsawPicHeight,slidingTrack和value以外其余值都是从_0x571647对象里面取的。
st是由_0x477239赋值的,_0x477239就是获取当前时间戳(毫秒)

jigsawPicWidth见名知意就是验证码宽度,而jigsawPicHeight则是验证码高度。


而jigsawViewDuration则是当前时间减去_0x34f7fa,是两个函数的执行时间,见名知意就是验证码从头滑到尾的时长。

slidingTrack见名知意就是轨迹

提取之后的轨迹代码
_0x571647对象分析
全局搜索_0x571647,_0x571647是由_0x37f0ba["infoBox"]赋值得到的
搜索_0x37f0ba,jigsawVerificationMain的时候_0x37f0ba["infoBox"]已经生成了,跟栈回溯。

跟栈回溯,可以分析得到_0x5e2060["infoBox"]是由_0x4fe38e对象序列化得到。

全局搜_0x4fe38e,得到0x4fe38e是在jigsawVerification函数里初始化的

将jigsawVerification函数扣下来复现,由于目的仅仅只是分析_0x4fe38e的生成,很多函数对我们并没有作用,后续会对代码进行改写,仅分析提取有用的参数。
_0x4fe38e["rms"]虽然不在验证码校验的参数,但是其与某指纹参数是有关的,既然属于_0x4fe38e对象,那么就浅析一下吧。

_0x4fe38e["rms"]被参数_0xa70a18赋值,打断点跟栈回溯

_0xa70a18就是e.getRmsToken()函数执行的返回值

e.getRmsToken函数扣下来逐步分析

无论代码怎么执行,正确与否window.__bfi 都会被添加内容

执行报navigator不存在,直接删掉异常捕获

将navigator.userAgent补了

补document和cookie

缺少a函数

把必须的值跟常用的函数补了之后分析一下代码
获取浏览器的用户代理字符串 navigator.userAgent,限制字数300
判断当前对象的值是否存在某些属性,然后拼接成字符串
从 cookie 里优先提取 _RGUID 或 guid__ 的值(只取小写字母、数字和“-”,并去除“-”),如果都没有,就用全局变量 window.CHLOROFP_STATUS 的值,然后以 &r=xxx 的形式拼接到参数字符串 n 后面
这段代码就是收集ip,先从 window.CHLOROFP_IP 取 IP 地址,没有的话再去cookie 里读取 _RF1 字段提取ip。
后续的代码就是各种字符串拼接,a函数之前已经扣了,h跟p都是固定数组
h数组
p数组
后续还是获取一些浏览器信息,屏幕分辨率信息,获取当前时区与 UTC 之间的时间差,获取操作系统的默认语言设置,获取浏览器默认语言设置
后续就是逗号运算符进行各个参数拼接返回n,添加了版本号,检测对象是否存在uuid,window.cookieStatusInD和forterToken,还检测了浏览器是否开启了广告拦截器
rms值就分析完了
其余的值都在这两个函数生成的。进去函数分析各大明文都是如何生成的

_0x2578de函数就是传了个空对象进去收集浏览器指纹
[招生]科锐逆向工程师培训(2026年7月3日实地,远程教学同时开班, 第56期)!