首页
社区
课程
招聘
[原创]Tbooking验证码逆向分析
发表于: 2026-6-4 17:43 3248

[原创]Tbooking验证码逆向分析

2026-6-4 17:43
3248

本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!若有侵权,请联系作者删除。

网址敏感暂不提供,样本->

对混淆代码用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 里优先提取 _RGUIDguid__ 的值(只取小写字母、数字和“-”,并去除“-”),如果都没有,就用全局变量 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函数就是传了个空对象进去收集浏览器指纹


[内核课程]《Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

收藏
免费 2
打赏
分享
最新回复 (1)
雪    币: 104
活跃值: (8829)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
tql
2026-6-7 21:36
0
游客
登录 | 注册 方可回帖
返回