本篇文章仅用于交流与学习,严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除。
感谢关注!您的关注和点赞就是我的动力
1.逆向目标
aHR0cDovL3d3dy5zZ2NjLmNvbS5jbi8=
2.逆向分析
瑞数六简单介绍
瑞数 6 代属于 Botgate 系列第六代网站人机防护系统,主要用于拦截爬虫、恶意刷量以及各类非法请求。整套验证流程依托浏览器端 JavaScript 运算实现,由服务端下发配套参数,前端代码据此计算出专属校验 Cookie,请求方只有携带合法 Cookie,才能正常访问网站资源。
打开f12,会有debugger,绕过就能正常调试了

瑞数的特征,cookie的键最后一位不一样,值得第一位不一样,值如果是6就是瑞数第六代,5就是第五代

首次请求:发起访问(网络层第一步加载)
用户 / 客户端发起对目标网址的第一次 HTTP 请求,此时请求头内无瑞数相关 Cookie。 服务端识别为未完成验证的请求,直接返回412 状态码,同时在响应头通过Set-Cookie写入80S,这组由服务端生成的密钥会被浏览器本地保存,全程参与后续运算。响应体并不是正常业务页面,浏览器完成这份 HTML 的解析与 DOM 加载后,页面内三类核心内容就绪:存储密文的<meta>标签、内嵌自执行入口 JS、动态外链 JS 地址,整个流程正式进入脚本加载阶段。

内嵌入口 JS 加载执行:解析密文
挑HTML 加载完成后,内嵌的自执行 JS 会立即运行,这是整个验证逻辑的入口加载环节。 脚本首先读取<meta>标签的content超长密文,完成解码与格式化,生成全局参数包$_ts,该参数包内置了版本配置、虚拟机字节码、运算数组、数据偏移规则等所有底层运算所需配置。完成参数解析后,脚本初始化浏览器全局环境,接着根据页面中动态生成的地址,向服务端发起请求,加载核心外链 JS 文件。该外链 JS 的文件名、代码内容每次请求都会随机变化,是瑞数 6 代的核心逻辑载体。

核心外链 JS 加载:激活反调试防护
浏览器下载、解析并加载完外链 JS 后,代码会第一时间启动 6 代专属防护机制,这也是脚本加载后最先执行的逻辑。 代码内置多层debugger断点阻断调试行为,同时依靠控制流平坦化与巨型switch状态机打乱代码执行顺序,所有变量名、函数名、静态字符串均不使用明文,全部在运行时通过位运算动态解密。这一阶段仅完成防护逻辑初始化,不会进入正式运算,主要作用是对抗静态分析和动态调试。
字节码加载执行:完成加密运算
虚拟机逐条加载、解析并执行$_ts中的字节码指令,整个运算过程完全由自定义虚拟机驱动。 程序依托预设缓冲区数组,对指纹数据、时间戳、随机数以及80S密钥,循环执行按位异或、循环移位、大数运算、分组混淆等操作,经过多轮迭代运算后,输出最终的原始校验二进制数据。该环节完全依赖前面所有加载成果,任意环境缺失都会直接导致运算中断。
这里我们可以选择全扣或者补环境,把外链js文件扣下来补上环境,或者扣纯算,这里的外链js是动态变化的,我们正式发请求的时候也要写成动态的
结果编码 + Cookie 写入:生成并落地 80T
运算得到原始数据后,脚本加载内置的定制 Base64 编码规则(6 代专属字符映射表),将版本标识、时间戳摘要、指纹摘要、密钥加密结果、校验位拼接后的字节流完成编码,生成最终的80T字符串。 随后调用浏览器原生 Cookie 接口,将80S和新生成的80T一并写入本地 Cookie 存储,两组校验 Cookie 正式生效。
二次请求 + 正常页面加载:验证收尾,完成全流程
Cookie 写入完成后,页面自动携带80S+80T发起第二次 HTTP 请求。 服务端加载配套校验算法,对80T进行逆向核验,验证通过后返回正常业务页面。浏览器开始加载页面 HTML、样式、图片、业务脚本等常规资源,用户即可正常访问网站;若环境异常、指纹不匹配或运算出错,无法生成合法80T,服务端会直接拒绝请求,加载流程终止。
3.逆向结果






