网盘助手,但不想扫微信

warning: 这篇文章距离上次修改已过38天,其中的内容可能已经有所变动。

笔者是一个很不愿意拿起手机微信扫码的人,尤其是当网站要你关注什么,刷几个广告,或者回复什么才能拿到内容的时候更是如此
比如说,今天的主角是『网盘直链下载助手』,其作者要求扫码关注公众号后获取本插件的开源协议:


当然,这玩意本来就不算付费墙什么的,而只是让一些人知道这个程序是开源的,不是拿来给你私自倒卖的。不过正如开头所说,我很不喜欢(尤其是急要的时候)又要扫码又要关注

因此,直接开干吧

写在最前

笔者撰写本文的目的不是让你忽视这玩意的开源协议,只是想用一种更加『不微信』的方式去获取我们所需要的内容

同时也可以从侧面证明,能放到浏览器里面给用户看的东西都没有机密可言(我相信原作者肯定不是不知道这一点),如果你要做什么收费服务鉴权服务,最稳妥的方法是从一开始就不要把这个服务的代码暴露给客户,只暴露API即可,也就是说干脆做那种离开了服务器不行的(比如代理,比如所谓的浏览器插件版VPN——实际上就是HTTPS代理)服务

核心分析

这个助手是托管在油猴上的,直接把代码扒下来就行了

一开始尝试搜寻『开源协议』等关键字符串,但很显然没有找到

因此推测这个是通过某种实时下发的东西来获取的,因此转而搜索『api』等字眼,果然发现了端倪

        async initPanLinker() {
            base.initDefaultConfig();
            base.addPanLinkerStyle();
            pt = this.detectPage();
            let res = await base.post
            (`https://api.youxiaohou.com/config/v2/quark?ver=${version}&a=${author}`, {}, {}, 'text');
            pan = JSON.parse(base.d(res));
            Object.freeze && Object.freeze(pan);
            pan.num === base.getValue('setting_init_code') ||
            pan.license === base.getValue('license') ? this.addButton() : this.addInitButton();
            this.addPageListener();
            base.createTip();
            base.createDownloadIframe();
            base.registerMenuCommand();
        }

这其中有一个链接,输入了version和author(油猴的两个原生参数,在顶部注释中定义)之后,发起POST,就可以拿到一个字符串,解开Base64并序列化JSON之后,就可以拿到内容了

如果尝试使用浏览器直接访问,会得到『Method Not Allow』的错误

这也正常,因为浏览器默认是GET。改用其他请求工具发POST就行了,比如VSCode插件『Postcode』:

然后解码

就能得到我们的答案:AGPL3

扫码去你妈的

授权储存

当然不能每次都让用户输入,这很影响体验,用GM_setValue()GM_getValue()就行了,本质上还是调用了浏览器的localStorage,没什么技术含量

浅谈AGPL3

AGPL可以粗略理解为是比GPL更『严格』的开源协议(相对应的,更『宽松的』就是LGPL),主要是加入了对SaaS(软件即服务)模式下的限制,简而言之就是『无论以何种方式修改或者使用代码,都需要开源』。典型案例就是,如果你修改了一个AGPL授权的软件的代码,即使你仅仅将其作为API服务对外提供,按照授权协议规定,你也要开源

写在最后

嗯,就图一乐罢了

也希望各位可以正确按照开源协议使用软件

(完)

none
最后修改于:2024年01月26日 22:42

添加新评论