• JS逆向爬虫---请求参数加密②【某麦数据analysis参数加密】


    主页链接:
    https://www.qimai.cn/rank

    在这里插入图片描述

    analysis逆向

    完整参数生成代码如下:

    const {JSDOM} = require('jsdom')
    const dom = new JSDOM('

    hello

    '
    ) window = dom.window function customDecrypt(n, t) { t = t || generateKey(); // 如果没有提供 t,则使用默认密钥 // 将字符串 n 分割成字符数组 n = n.split(""); for (var i = 0; i < n.length; i++) { // 对字符 n[i] 进行异或运算 n[i] = String.fromCharCode(n[i].charCodeAt(0) ^ t.charCodeAt((i + 10) % t.length)); } // 将字符数组拼接成字符串 return n.join(""); }; // 拼接a字符串 function a_for_bs64(t){ var z = window; var Z = "Object"; var i7 = "keys"; var Zt = "params"; var M = "forEach"; var n; var N2 = "hasOwnProperty"; var a = []; var b = "push"; var Ot ="sort" ; var I1 = "join"; var _ = ""; z[Z][i7](t[Zt])[M](function (n) { t[Zt][N2](n) && a[b](t[Zt][n]) }); a = a[Ot]()[I1](_); console.log(a); return a } function analysis_gen(t){ var d = "xyz517cda96efgh"; var currentDate = new Date(); // 获取毫秒级时间戳 var timestampInMilliseconds = currentDate.getTime(); a_start = a_for_bs64(t); console.log('a_start==>',a_start) a_mid_1 = btoa(a_start); // MzIwMjMtMTEtMDYzNmFsbGNuaXBob25l console.log('a_mid_1==>',a_mid_1); time_period = timestampInMilliseconds - 1661224081041; // time_period = 38050153244; a_end = a_mid_1+"@#"+t.url+"@#"+time_period+"@#"+"3"; console.log("a_end==>",a_end); // 我生成的 MjAyMy0xMS0wNjMzNmFsbGNuaXBob25l@#/rank/indexPlus/brand_id/1@#38050153244@#3 // 页面生成 "MjAyMy0xMS0wNjMzNmFsbGNuaXBob25l@#/rank/indexPlus/brand_id/1@#38050153244@#3" data = customDecrypt(a_end, d); e = btoa(data); console.log(e); return e }; // 接受一个t的对象 const t = { "url": "/rank/indexPlus/brand_id/0", "params": { "brand": "all", "country": "cn", "device": "iphone", "genre": "36", "date": "2023-11-06", "page": 3 }, "baseURL": "https://api.qimai.cn", }; // 将 params 对象拼接为查询字符串 const params = new URLSearchParams(t.params).toString(); // 构建完整的 URL const fullURL = `${t.baseURL}${t.url}?analysis=${analysis_gen(t)}&${params}`; console.log(fullURL); // 完整生成流程 // 1. 获取加密请求数据对象 // 2. 生成需要加密的字符串a_start // 3. base64编码生成密文 a_mid_1 // 4. 获取毫秒时间戳与定义差值 // 5. 拼接密文,时间戳差值,请求uri,参数等,生成代编码字符串a_end // 6. 结合密钥d生成待编码字符串 data // 7. base64编码字符串生成最终的analysis参数
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
  • 相关阅读:
    93---Python 极坐标系下绘制椭圆
    NLP工具学习(1)Thulac分词工具与WordCloud词云
    [附源码]JAVA毕业设计计算机专业在线学习评估软件-演示录像-(系统+LW)
    重生之我是一名程序员 38
    Transformers入门:实战Ubuntu使用huggingface上的语句情感分类模型+配环境(2024.02.20)
    NLP教程(5) - 语言模型、RNN、GRU与LSTM
    ShardingSphere简介(一)
    电池管理系统(BMS)的进化与分类
    入门篇-其之六-Java运算符(中)
    【人工智能】Anthropic发布强大的Claude3对齐GPT-4,大模型杂谈个人感想
  • 原文地址:https://blog.csdn.net/Jesse_Kyrie/article/details/134255640