# 免责声明:本篇文章仅用来学习交流,请勿用于商业用途,如因违反规定产生任何法律纠纷,本人概不负责。假如本文影响到官方任何利益,请联系我告知,我会在第一时间将文章删除,感谢~
# 前言
认识
rs
半年多了,早就想搞一下的,一直没付诸行动,最近终于行动了。。。因为踩了个坑,跟了几遍算法才发现,本文记录一下大体算法的部分流程,网上关于rs
的文章太多了,比如Nanda
、十一姐
、渔滒
等大佬的文章,听说有些大佬都撕 6 代了,我只能说真牛皮!
rs
的特点主要是动态js
和 恶心的控制流,且主要逻辑在第二层js
内,最核心的地方还是 128 位数组。流程不一定完全一样,省略了好多,我就随便写写,你就随便看看就行了,有问题不要问我,问我也不会🤣首先准备个好点的屁股垫,只要坐的住就能肝出来,所以我认为
rs
的难点在于付诸行动😂,多肝几遍 加密逻辑就了然于心。# 开搞!
# 首先通过
Overrides
或者 Fiddler 的 AutoResponse 把动态的 js替换成静态
。# 本网站是 5 代,直接搜一下
call
就可定位到vmp
入口,或者hook
一下eval
# 此时已经生成了全局的
$_ts
变量,后面大量的逻辑都会用到他。# 然后单步跟进
vmp
,前面几百行主要是初始化变量,cookie
在函数定义之前的倒数第三个函数内生成# 然后单步跟进去,首先是
772
流程,执行完772
,cookie
就已经生成# 进入极其恶心的控制流,单步调,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 流程第十四步,
push
了 14# 279 流程第十五步,用 undefined 占位
# 279 流程第十六~十九步,获取 localsotrage 的值,为空则返回 undefined
# 279 流程第二十步,push 了 611 子流程生成的 0,611 流程检测了 navigator 中的一些属性
# 279 流程第二十一~二十三步,获取 localsotrage 的值,为空则返回 undefined
# 279 流程第三十步,补全前面 undefined 占位的元素
# 279 流程第三十一步,删除数组中没有赋值的元素
# 279 流程最后一步,将原来的数组连接成一维数组,生成外层
_$Ak
# 742 主流程第四步,716 子流程生成 32 位外层
_$BK
数组# 742 主流程第五步,将外层
_$Ak
操作成整数# 742 主流程第六步,将整数操作成 4 位数组,push 到外层
_$Ak
# 742 主流程第七~十步,操作时间戳
# 742 主流程第十一步,用前面四个值生成 16 位数组
# 742 主流程第十二步,将数组装成字符串
# 742 主流程第十三步,再把外层
_$Ak
和外层_$BK
生成字符串拼接上一步字符串,就是生成的 cookie
# 一些调试小技巧