研究油小猴的“网盘直链下载助手”暗号机制

被注册码阻止

初窥代码

当安装好油猴脚本的油小猴的“网盘直链下载助手”后首次运行需要关注一个微信公众号获取注册码,翻看油猴代码查找判断机制,发现如下代码

        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 的逻辑真使得后边不用判断注册码,测试结果通过,此方法每次更新脚本后都需要去修改脚本来跳过验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值