涛之雨 发表于 2022-3-6 16:45

【油猴脚本】gitbookVIP解锁

本帖最后由 涛之雨 于 2022-3-6 16:47 编辑

## 准备
### 创建环境

打开(https://app.gitbook.com/),github登陆一下

随便新建一个项目

### 找会员独有功能

找个需要会员的功能(比如我选择的`定制(customize)`功能)



emmm

反正就是需要会员才能定制logo的。

就假装是我曾经开过会员然后过期了吧😅

## 开整

### 关键词定位

看到红色的`Upgrade!`,`F12`搜之。



巧了这不是(其实是必然的),蓝色框里的`Custom logo`和`Upgrade!`都与这里对应上了,

在`Upgrade!`文本前面红色的框里还有个判断。

### 找判断

可见变量`c`是关键,向上找变量`c`赋值、或者最后一次修改的位置



### 顺藤摸瓜

再查找`Kr`定义的位置,勾选区分大小写,只有21处,一路查看,找到唯一定义:



(好吧好吧,其实还有个`Kr`函数的定义,但是显然是在另外的类里,因此无关,实在不行就动态调试呗。。。)



emmm

看着有点麻烦。。。

好吧好吧,函数的第一行下断点,动态调试函数`Kr`。

### 动态调试

调用`Kr`时,第二个参数为`customization`,从此下手,找到`e`涉及到运算:



绿色高亮的上一行有一个明显的比较,不过是在数组里,寻找到出来的结果打印在下面的控制台里了,结合`s`变量的值是字符串`"personal"`,可以得到`d`是`false`(这不又巧了,刚好我们是没有权限的)

## 修改

### 控制台注入法

(我反正是这么称呼的,似乎这个方法也是我第一个发出来的,原理参见我之前发的帖【[空降到该帖说明的部分](https://www.52pojie.cn/thread-1485179-1-1.html#39473163_%E8%A7%A3%E5%86%B3)】,至少我之前没有看到过)

注入脚本测试一下,代码如下,注入的示意图如下下:

```js
d===false&&(d=true),false
```



代码的意思就是到`Line:153809`时,判断上述注入的表达式是否为真,表达式先判断:当`d`的内容是`false`时,就把其改成`true`,并且始终对于断点判断返回假(防止断下)。

运行发现可行。(成功示意图见[最终效果图]部分)

### 油猴

(老油猴了。。。)

几乎没有什么是油猴做不到的。。。如果有,那就是服务器功能了。

上述代码均以模块形式从代码里直接`import`导入,于是考虑从`native`层入手,比如这里判断的时候,有如下的代码:

```js
let d = DDe.find(f=>f.key === e)
```

(说句题外话,这个不应该用`const`么?)

查看`DDe`的定义,是定义好的权限数组,这里我选择重写`Array`的`find`

代码很简单,两行搞定:

```js
[].constructor.prototype._find=[].constructor.prototype._find||[].constructor.prototype.find;
[].constructor.prototype.find=function(){return(JSON.stringify(this).includes('github-sync')?this.map(a=>{for(const i in a)a===false&&(a=true);return a}):this)._find(arguments,arguments)};
```

第一行:备份数组的`find`(不然就真没这个功能了)

第二行:判断数组是否包含`github-sync`(理论来说任意一个不会在数组里重复定义的都可以),如果包含则把数组里所有`key`的`false`全都改成`true`,然后再继续调用系统数组的`find`,如果不包含则直接调用系统数组的`find`。

啥?

为啥用`[].constructor`?

哦,这不是长显得专业么。。。你要是愿意,直接用`Array`也行。。。

https://greasyfork.org/zh-CN/scripts/441008

代码丢`greasyfork`了,需要的自取emmmm虽然上面也有代码。。。

## 最终效果图



收工!

涛之雨 发表于 2022-3-6 16:49

本帖最后由 涛之雨 于 2022-3-6 17:08 编辑

感谢 @含笑阁 绘制的吾爱的金灿灿的logo!
此外刚刚发现这个网站好像需要【正确的上网方式】
好吧只是单纯的慢。。。



好吧,不单单是慢。。。

获取用户数据的服务器是googleapis.com

知者自知。。。

涛之雨 发表于 2022-3-7 22:06

as614001 发表于 2022-3-7 19:36
可以这么理解吗?由于这个是后续在验证是否vip的,而这在关键方法在那个 find 中,然后通过重写数组find, ...
前后理解的都是对的,中间的部分有点误差。
那个数组里包含的是各个功能的权限列表,您亲自尝试一下或者看我帖子中的截图,
比如
https://attach.52pojie.cn/forum/202203/06/164310jlda9gl0vr3cobly.png,
key是功能的内容,title是显示的标题,category是所属的类别,
其它的boolean值就是每个权限是否有使用的权限。
find是数组内置的函数(详见MDN)
我是重写了这个函数以修改上述的这个权限列表的数组,
虽然不是很优雅,但是暴力重写就完事了

wuaiwuai888 发表于 2022-3-6 22:03

我说看id那么熟悉呢,一翻大佬的greasyfork项目,发现一直在用大佬的百度云倍速播放,膜拜大佬!

as614001 发表于 2022-3-7 19:36

可以这么理解吗?由于这个是后续在验证是否vip的,而这在关键方法在那个 find 中,然后通过重写数组find,如果传入值是xxx的 直接返回真的意思?

sky2021 发表于 2022-3-6 16:53

感谢大佬分享,学习

zhangxc1989 发表于 2022-3-6 16:54

收藏一下 ,慢慢消化!!谢谢楼主

yang1 发表于 2022-3-6 16:53

学会看了666

yanweimu 发表于 2022-3-6 16:56

感谢楼主分享

yangjiafa 发表于 2022-3-6 17:06

太深奥了看不懂

菠萝蜜 发表于 2022-3-6 17:06

好吧,我来学习了

我终于等到了 发表于 2022-3-6 17:24

感谢大佬分享,学习了

ciker_li 发表于 2022-3-6 17:25

感谢分享,油猴脚本没学会
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【油猴脚本】gitbookVIP解锁