某点数据含有加密参数k值:

  https://xxxxxx/.com/pc/app/v1/rank?market_id=11&genre_id=33&country_id=24&device_id=0&page=1&time=1668700800&rank_type=2&brand_id=0&k=AQcbUlxHQQYcHgEHElNdREUEFxoZEQxKXEZGAhwbBgIcVEVQURlATRkRDEpCAEYfVkhfXA%3D%3D

最终会发现加密参数k由下面的函数生成:

 

 

这个函数的代码可以简化成下面的

const axios = require('axios');

//-----------------------conent参数的生成---------------------------------------------
//生成conent的第一个函数
function one(s, t, path, e) {
    return [s, t, e, path].join("(&&)")
}

//生成content的第二个函数,two的返回值为one函数第一个参数s
//这个函数的作用是直接把传进来的参数对象的值取出来,全部推送到一个列表,然后后排序和join()
function two(t) {
    var r = [];
    for (var c in t) {
        r.push(t[c]);
    }
    r.sort()
    return r.join("")
}

//生成one函数的第二个参数t
function generateT() {
    return parseInt((new Date).getTime() / 1e3) - 655876800
}

//-----------------------conent参数的生成---------------------------------------------

// 匿名函数y
function y(content, t, e) {
    for (var a = Array.from(content), n = Array.from(t), r = a.length, o = n.length, c = String.fromCodePoint, i = 0; i < r; i ++)
        a[i] = c(a[i].codePointAt(0) ^ n[(i + e) % o].codePointAt(0));
    return a.join("")
}

//y函数的调用链t和e都为固定值,剩余的的就是看content是怎么计算的
var t = "17*cmvw0$)";
var e = 10;

//content的计算步骤
var path = "/v1/rank";

// var content = one(two(two_t), generateT(), path, "dd")
// console.log(content);
//
// y_res = y(content, t, e);
// console.log(y_res)
//
// base64_result = Buffer.from(y_res, "utf-8").toString("base64")
// console.log(base64_result)


// --------------------发起请求的功能-------------------------------
var param_object = {
    "market_id": "11",
    "genre_id": "46",
    "country_id": "24",
    "device_id": "0",
    "page": "1",
    "time": "1668614400",
    "rank_type": "2",
    "brand_id": "0",
}


var content = one(two(param_object), generateT(), path, "dd")
console.log(content);

y_res = y(content, t, e);
console.log("content", y_res)



base64_result = Buffer.from(y_res, "utf-8").toString("base64")
console.log("k:", base64_result)

param_object.k = base64_result

axios.get('https://xxxx.com/pc/app/v1/rank', {
    params: param_object, headers: {
        "Accept": "application/json, text/plain, */*",
        "Accept-Language": "zh-CN,zh;q=0.9,en-IN;q=0.8,en;q=0.7,id;q=0.6,hi;q=0.5",
        "Cache-Control": "no-cache",
        "Connection": "keep-alive",
        "Origin": "https://app.diandian.com",
        "Pragma": "no-cache",
        "Referer": "https://app.diandian.com/",
        "Sec-Fetch-Dest": "empty",
        "Sec-Fetch-Mode": "cors",
        "Sec-Fetch-Site": "same-site",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
        "sec-ch-ua": "\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"Windows\""
    }
}).then(function (response) {
    console.log("status code:" + response.status)
    let response_data = response.data
    console.log(response.data.data)
    console.log(response.data.msg)
}).catch(function (err) {
    console.log(err);
})

 

原文地址:http://www.cnblogs.com/tjp40922/p/16901932.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性