MyFreeMP3搜索接口token值逆向

        MyFreeMP3致力于免费音乐下载,打开之后就能看到很多当下比较热门的音乐,并且页面内没有任何广告,2022年发布过一篇文章,讲解了MyfreeMP3搜索接口参数逆向,最近看了看这个网站搜索接口的参数已经修改,直接开始分析新版本token参数如何生成。

        进入网站打开调试工具,随意搜索一首歌可以抓到Search包,该包提交的表单中有一个token参数为加密值,直接跟栈分析,最后能够定位到参数生成位置在下图此处

        此处的代码可以修改修改,更能直观的看出加密流程,其中的a是一个长度为135的数组,先经过了qs函数获得一串长度为180的字符串,然后再经过crypto.md5方法生成wordArray对象。

function encrypt_token(e) {
    const t = "yGz4n9XE9xYy2Oj5Ub7E6u9a5p5aIWZYe53Orq5wE5UgnjbWq0410WTvmLBO1Z2N";
    const a = qs(t.toString(), e.toString());
    return "20230327." + cryptoJS.MD5(Bs(a));
}

        qs函数和Bs函数大家自行跟栈分析,文章中直接将这部分函数的代码贴出,供大家自行学习

function Bs(e) {
    var s, o, i, a, l, r, c, u, f = 0, h = "", m = {
        UvJUa: "0|6|2|4|7|5|1|8|3"
    };
    do {
        for (var y = m["UvJUa"].split("|"), g = 0; ; ) {
            switch (y[g++]) {
            case "0":
                s = e[f++];
                continue;
            case "1":
                r = 63 & u >> 6;
                continue;
            case "2":
                i = e[f++];
                continue;
            case "3":
                h += Es["charAt"](a) + Es["charAt"](l) + Es["charAt"](r) + Es["charAt"](c);
                continue;
            case "4":
                u = ((s << 16) | (o << 8)) | i;
                continue;
            case "5":
                l = u >> 12 & 63;
                continue;
            case "6":
                o = e[f++];
                continue;
            case "7":
                a = u >> 18 & 63;
                continue;
            case "8":
                c = u & 63;
                continue
            }
            break
        }
    } while (f < e.length);
    var v = e.length % 3;
    return h + "===".slice(v || 3);
}

function Fs(e, t) {
    return e.charCodeAt(Math.floor(t % e.length));
}

function qs(e, t) {
    const a = t.split("");
    return a.map(function(t, a) {
        return t.charCodeAt(0) ^ Fs(e, a + 1 - 1)
    })
}

        Bs函数中还调用了Es参数,直接搜索Es,可以找到Es是固定死的值,拿出来直接var Es = xxx即可。

        最后所有的代码如下

const cryptoJS = require("crypto-js")

var Es = "pW8jg/mke6cO1F4CTuaiswhZfQGzMyq5NJRLPVIvDxlA7=E3YrSUoH0b2BXKn9td+";

function Bs(e) {
    var s, o, i, a, l, r, c, u, f = 0, h = "", m = {
        UvJUa: "0|6|2|4|7|5|1|8|3"
    };
    do {
        for (var y = m["UvJUa"].split("|"), g = 0; ; ) {
            switch (y[g++]) {
            case "0":
                s = e[f++];
                continue;
            case "1":
                r = 63 & u >> 6;
                continue;
            case "2":
                i = e[f++];
                continue;
            case "3":
                h += Es["charAt"](a) + Es["charAt"](l) + Es["charAt"](r) + Es["charAt"](c);
                continue;
            case "4":
                u = ((s << 16) | (o << 8)) | i;
                continue;
            case "5":
                l = u >> 12 & 63;
                continue;
            case "6":
                o = e[f++];
                continue;
            case "7":
                a = u >> 18 & 63;
                continue;
            case "8":
                c = u & 63;
                continue
            }
            break
        }
    } while (f < e.length);
    var v = e.length % 3;
    return h + "===".slice(v || 3);
}

function Fs(e, t) {
    return e.charCodeAt(Math.floor(t % e.length));
}

function qs(e, t) {
    const a = t.split("");
    return a.map(function(t, a) {
        return t.charCodeAt(0) ^ Fs(e, a + 1 - 1)
    })
}

function encrypt_token(e) {
    const t = "yGz4n9XE9xYy2Oj5Ub7E6u9a5p5aIWZYe53Orq5wE5UgnjbWq0410WTvmLBO1Z2N";
    const a = qs(t.toString(), e.toString());
    return "20230327." + cryptoJS.MD5(Bs(a));
}

console.log(encrypt_token(
    encodeURIComponent(JSON.stringify(
        {
            type: "YQM",
            text: "泡沫",
            page: 1,
            v: "beta",
            _t: 1706099652039
        }
    ))
))

        将表单中的_t和text参数修改成与浏览器一致进行测试,测试结果如下,生成参数一致,新版本的参数自己动手跟一跟其实还是挺简单的,加油

        

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以在 `uni-app` 中使用 `axios` 库进行接口请求,并且可以在请求头中添加 `token`。 首先需要安装 `axios` 库: ```bash npm install axios --save ``` 然后在需要使用的地方引入: ```javascript import axios from 'axios' ``` 下面是一个基本的 `axios` 请求封装: ```javascript const request = axios.create({ // 创建 axios 实例 baseURL: 'https://api.example.com', // 设置请求的 base url timeout: 5000, // 设置请求超时时间 }) // 请求拦截器 request.interceptors.request.use( config => { const token = uni.getStorageSync('token') // 从本地缓存中获取 token if (token) { // 如果 token 存在则在请求头中添加 token config.headers.Authorization = `Bearer ${token}` } return config }, error => { console.log(error) return Promise.reject(error) } ) // 响应拦截器 request.interceptors.response.use( response => { return response.data }, error => { console.log(error) return Promise.reject(error) } ) export default request ``` 在上面的代码中,我们创建了一个 `axios` 实例,并设置了请求的 `baseURL` 和超时时间。我们还添加了一个请求拦截器,在请求头中添加了 `token`。可以看到,我们使用了 `uni.getStorageSync('token')` 方法从本地缓存中获取了 `token`。在响应拦截器中,我们只返回了响应数据的 `data` 属性。 使用封装好的 `axios` 请求: ```javascript import request from '@/utils/request' request.get('/example').then(response => { console.log(response) }).catch(error => { console.log(error) }) ``` 这样我们就可以在 `uni-app` 中使用 `axios` 库进行接口请求,并且在请求头中添加 `token` 了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值