被注册码阻止
初窥代码
当安装好油猴脚本的油小猴的“网盘直链下载助手”后首次运行需要关注一个微信公众号获取注册码,翻看油猴代码查找判断机制,发现如下代码
async initPanLinker() {
base.initDefaultConfig();
base.addPanLinkerStyle();
pt = this.detectPage();
let res = await base.post
(`https://api.youxiaohou.com/config/v2?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();
base.createTip();
base.registerMenuCommand();
}
查找api
这段代码调用了api
https://api.youxiaohou.com/config/v2?ver=${version}&a=${author}
参数ver 代表油猴脚本的version a 代表油猴脚本的作者,这个在油猴脚本开头处可以获取
解析api
通过带入参数用apifox进行发起post请求得到一串结果
文本很长经过了加密,其加密方法为base64,对结果进行后置处理
// 获取返回结果,返回结果为base64加密的文本
var text = pm.response.text();
// console.log(text);
// 对返回结果进行base64逆运算得到文本
var a = atob(text);
// console.log(a);
// 对文本进行json解析
const obj = JSON.parse(a);
// 得到注册码
console.log(obj.num);
提取控制台结果
得到结果
得到软件注册码为"86574"。
理论上应该可以从油猴脚本中进行对比逻辑的修改进行 1=1的逻辑验证跳过验证,但是js的理解能力太差没有实现结果。
pan.num === base.getValue('setting_init_code') ||
pan.license === base.getValue('license') ? this.addButton() : this.addInitButton();
对代码比较逻辑进行分析,pan.num是通过api解析的,base.getValue函数其实是调用了
getValue(name) {
return GM_getValue(name);
},
而 GM_getValue是油猴的内置函数,需要通过在文件开头
// @grant GM_getValue
进行申请才能获取本地存储的数值,相对的操作为GM_setValue()函数为写入本地数据。
并在代码中找到了写入逻辑
而 $('#init').val() 是id选择器,跟截图中的html: 生成片段相关。这部分再次超出认知范畴,等待后续研究。
另一个思路(爆破)
在初始化判断代码处增加 1===1 的逻辑真使得后边不用判断注册码,测试结果通过,此方法每次更新脚本后都需要去修改脚本来跳过验证。