# 免责声明:本篇文章仅用来学习交流,请勿用于商业用途,如因违反规定产生任何法律纠纷,本人概不负责。假如本文影响到官方任何利益,请联系我告知,我会在第一时间将文章删除,感谢~

  1. # 前言

    ​ 认识 rs 半年多了,早就想搞一下的,一直没付诸行动,最近终于行动了。。。因为踩了个坑,跟了几遍算法才发现,本文记录一下大体算法的部分流程,网上关于 rs 的文章太多了,比如 Nanda十一姐渔滒 等大佬的文章,听说有些大佬都撕 6 代了,我只能说真牛皮!

    rs 的特点主要是 动态js 和 恶心的控制流,且主要逻辑在第二层 js 内,最核心的地方还是 128 位数组。流程不一定完全一样,省略了好多,我就随便写写,你就随便看看就行了,有问题不要问我,问我也不会🤣

    首先准备个好点的屁股垫,只要坐的住就能肝出来,所以我认为 rs 的难点在于付诸行动😂,多肝几遍 加密逻辑就了然于心。

  2. # 开搞!

    • # 首先通过 Overrides 或者 Fiddler 的 AutoResponse 把动态的 js 替换成静态

    • # 本网站是 5 代,直接搜一下 call 就可定位到 vmp 入口,或者 hook 一下 eval

    • # 此时已经生成了全局的 $_ts 变量,后面大量的逻辑都会用到他。

    • # 然后单步跟进 vmp ,前面几百行主要是初始化变量, cookie 在函数定义之前的倒数第三个函数内生成

    • # 然后单步跟进去,首先是 772 流程,执行完 772cookie 就已经生成

    • # 进入极其恶心的控制流,单步调,742 流程生成 cookie,称之为主流程

    • # 742 主流程第一步,由两个时间戳计算得一个假时间戳。

    • # 742 主流程第二步,将假时间戳赋值变量 _$vx

    • # 742 主流程第三步,279 子流程生成 128 位数组,最后数组长度跟本地缓存相关

      • # 279 流程中第一步,157 子流程进行一些自动化工具检测,下图只是部分,检测到会改变全局变量

      • # 279 流程第二步,操作全局变量

      • # 279 流程第三步,初始化 128数组

      • # 279 流程第四步,push 了 695 子流程生成的 20 位数组,由全局 $_ts 变量内的值生成 16 位数组,再追加 4 个 $_ts 的数字。

      • # 279 流程第五步,push 了由前面的假时间戳生成 8 位数组。

      • # 279 流程第六七步, push 了 1,初始化变量的时候检测指纹会改变这些值

      • # 279 流程第八九步, push 了数组 [0, 0]

      • # 279 流程第十步,push 了 4 位数组,此数组在初始化变量时由 723 流程生成

      • # 279 流程第十一步,push 了 8 位数组,此数组在初始化变量时在 777 流程中生成,与 localstorage 相关

      • # 279 流程第十二步, push0
      • # 279 流程第十三步, push3
      • # 279 流程第十四步, push 了 8 位数组

      • # 279 流程第十四步, push 了 14
      • # 279 流程第十五步,用 undefined 占位
      • # 279 流程第十六~十九步,获取 localsotrage 的值,为空则返回 undefined

      • # 279 流程第二十步,push 了 611 子流程生成的 0,611 流程检测了 navigator 中的一些属性

      • # 279 流程第二十一~二十三步,获取 localsotrage 的值,为空则返回 undefined

      • # 279 流程第二十四步,push 了 4
      • # 279 流程第二十五~二十九步,检测了 location 中的属性

      • # 279 流程第三十步,补全前面 undefined 占位的元素

      • # 279 流程第三十一步,删除数组中没有赋值的元素

      • # 279 流程最后一步,将原来的数组连接成一维数组,生成外层 _$Ak

    • # 742 主流程第四步,716 子流程生成 32 位外层 _$BK 数组

      • # 716 流程第一步,生成 32 位数组D7,用到_D7,用到`_ts` 中元素

      • # 716 流程第二步,对 _$D7 操作生成新的 16 位数组 内层 _$Ak

      • # 716 流程第三步,生成新的 16 位数组 内层 _$BK ,用到 $_ts 中元素

      • # 716 流程最后一步,将内层 _$BK 和内层 _$Ak 合并生成外层 _$BK ,即 716 流程的结果

    • # 742 主流程第五步,将外层 _$Ak 操作成整数

    • # 742 主流程第六步,将整数操作成 4 位数组,push 到外层 _$Ak

    • # 742 主流程第七~十步,操作时间戳

    • # 742 主流程第十一步,用前面四个值生成 16 位数组

    • # 742 主流程第十二步,将数组装成字符串

    • # 742 主流程第十三步,再把外层 _$Ak 和外层 _$BK 生成字符串拼接上一步字符串,就是生成的 cookie

  3. # 一些调试小技巧

    • # 记住关键的调试流程的数字,方便下次直接定位
    • # 当你被控制流搞晕,看最开始的数字,可以判断在那个流程

    • # 直接搜索 ]]([] , 可以定位 128 位数组最后生成的地方

    • # 一定要做笔记
    • # 多学 ast ,减少得痔疮的风险,学 ast 记得找蔡老板
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

渣渣文 微信支付

微信支付

渣渣文 支付宝

支付宝