Skip to content

瑞数目前有3代、4代、5代、5代半、6代(最新)对于绝大多数使用了瑞数的网站来说,有以下几点特征:

  1. 打开开发者工具(F12)会依次出现两个典型的无限 debugger:

20220825170135

20220825170134

  1. 三次请求,首次请求响应码是202(瑞数3、4代)或者412(瑞数4代、5代)并且返回cookie_s,接着请求一个js混淆文件生成cookie_t,携带cookie_t才能去成功请求页面:

20220825170801

20220825170802

  1. 瑞数4代cookie_s和cookie_t大致有两种表现形式:
端口号cookie_scookie_t
80(http)FSSBBIl1UgzbN7N80SFSSBBIl1UgzbN7N80T
443(https)FSSBBIl1UgzbN7N443SFSSBBIl1UgzbN7N443T

9dd80befbed843a29a475032fd769b5d

  1. 瑞数的版本号我们可以通过Cookies中 cookie_t 的第一个数字来确定,如果是4开头就是4代,如果是5开头就是5代:

161e72bb409c40078e8ec0717c1dd5c3

  • FSSBBIl1UgzbN7N80T=37Na97B.nWX3....:数字80是http协议的默认端口号,对应http请求,其值第一位为3,表示3代瑞数;

  • FSSBBIl1UgzbN7N443T=4a.tr1kEXk.....:数字443是https协议的默认端口号,对应https请求,其值第一位为4,表示4代瑞数。

20220825171808

  1. 瑞数5代则有以T和S结尾或以O和P结尾的两个 Cookie,和3、4代不同的是,5 代没有加端口号了:

    • WvY7XhIMu0fGT=53.9fybty......:以T结尾,其值第一位为5,表示5代瑞数。

20220825173339

  • vsKWUwn3HsfIO=57C6DwDUXS.....:以O结尾,其值第一位为5,表示5代瑞数;

20220825173339

  1. 瑞数的 JS 混淆代码中,变量、方法名大多类似于 _$xx,有众多的 if-else 控制流,新版瑞数还可能会有 jsvmp 以及众多三目表达式的情况:

20220825170431

  1. 看入口,瑞数有个流程是在虚拟机 VM 中加载 1w+ 行的代码,加载此代码的入口,不同版本也不一样,示例如下:
  • 4 代:ret = _$DG.call(_$6a, _$YK);_$DG 实际上是 eval,有关键字 retcall 是明文;

20220825180442

  • 5 代:5 代种类比较多了,最初和 4 代的类似,比如 ret = _$Yg.call(_$kc, _$mH);,有关键字 ret,call 是明文,也有没有 ret 关键字的版本,比如 _$ap = _$j5.call(_$_T, _$gp);,也有像 3 代那样全部混淆了的,比如:_$x8 = _$mP[_$nU[15]](_$z3, _$Ec);_$mP 实际上是 eval_$nU[15] 实际上是 call,混淆的 call 与 3 代的区别就是 5 代是在一个数组里取值得到的;

20220825193734

20220825193745

20220825193802