网盘助手,但不想扫微信
笔者是一个很不愿意拿起手机微信扫码的人,尤其是当网站要你关注什么,刷几个广告,或者回复什么才能拿到内容的时候更是如此
比如说,今天的主角是『网盘直链下载助手』,其作者要求扫码关注公众号后获取本插件的开源协议:
当然,这玩意本来就不算付费墙什么的,而只是让一些人知道这个程序是开源的,不是拿来给你私自倒卖的。不过正如开头所说,我很不喜欢(尤其是急要的时候)又要扫码又要关注
因此,直接开干吧
写在最前
笔者撰写本文的目的不是让你忽视这玩意的开源协议,只是想用一种更加『不微信』的方式去获取我们所需要的内容
同时也可以从侧面证明,能放到浏览器里面给用户看的东西都没有机密可言(我相信原作者肯定不是不知道这一点),如果你要做什么收费服务鉴权服务,最稳妥的方法是从一开始就不要把这个服务的代码暴露给客户,只暴露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服务对外提供,按照授权协议规定,你也要开源
写在最后
嗯,就图一乐罢了
也希望各位可以正确按照开源协议使用软件
(完)
有个修改版的,直接显示注册码给你了。