当前位置: 首页 > article >正文

网络爬虫js逆向之某音乐平台案例

 【注意!!!】

前言:

        - 本章主要讲解某音乐平台的js逆向知识

        - 使用关键字搜定位加密入口

        - 通过多篇文章【文字+案例】的形式系统化进行描述

        - 本文章全文进行了脱敏处理

        - 详细代码不进行展示,需要则私聊作者

爬虫js逆向专栏:https://blog.csdn.net/2201_75422674/category_12875823.html

爬虫专栏:https://blog.csdn.net/2201_75422674/category_12686609.html

        - 大家喜欢可以订阅一下,不收费用的

目录

【1】抓包分析

【2】入口定位

​【3】逆向

3.1 逆向思路

3.2 深度刨析

3.2.1 求解d、e、f、g的值

3.2.2 求解i的值

3.2.3 逆向h.encText的值,分析b函数

3.2.4 逆向h.encSecKey的值,分析c函数

【4】结果展示


【1】抓包分析

点击F12,打开谷歌开发者工具,确认发送数据包具体的网址以及发送请求需要携带的加密参数

【2】入口定位

这里使用关键字搜定位入口

 【3】逆向

3.1 逆向思路

 function a(a) {
         var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
         for (d = 0; a > d; d += 1)
             e = Math.random() * b.length,
             e = Math.floor(e),
             c += b.charAt(e);
         return c
     }
 ​
 function d(d, e, f, g) {
         var h = {}
           , i = a(16);
         return h.encText = b(d, g),
         h.encText = b(h.encText, i),
         h.encSecKey = c(i, e, f),
         h
     }

总体思路为:

第一,先通过a函数随机挑选出i的值

第二,然后调用b函数传入d、g的值得到第一个h.encText的结果

第三,然后再调用b函数传入h.encText、i的值得到第二个h.encText的结果

第四,然后调用c函数传入i、e、f的值得到h.encSecKey的结果

最后,return跟着的是一个逗号表达式,返回最后一个h变量,再发送阿贾克斯请求

3.2 深度刨析

3.2.1 求解d、e、f、g的值

这里d的值很重要,因为点击播放音乐时,该网站会同时发送好几个请求,d的值在变化,如果d的值不是对应播放音乐的相应值,会导致参数错误!!!

断点后重新发送请求,d、e、f、g的值每次都一样。

3.2.2 求解i的值

1. 断点+分析

2. 查看i的值

如上所示:i的值就是16位随机组合的字符串

3.2.3 逆向h.encText的值,分析b函数

1. 悬浮定位查看b函数

2. 进入b函数,并打上断点

3. 每次发现第一次的a、b值永远为以下的值

    var a1 = '{"ids":"[歌曲id]","level":"standard","encodeType":"aac","csrf_token":"16fb7117e480783d71478af079eaec9d"}';
    var b1 = '0CoJUm6Qyw8W8jud'

4. 分析b函数中的c、d、e、f值

  • 4.1 逆向c的值

结果返回该c的值,发现一直都是一样的,因为传入的参数没变,只是对传入的参数进行了一个反序列化操作;同理见d、e的值

  • 4.2 求解f的值

 f = CryptoJS.AES.encrypt(e, c, {
             iv: d,
             mode: CryptoJS.mode.CBC
         });
 return f.toString()
 // e: 明文,c:key,iv:偏移量,mode:CBC加密模式

由上所见,这是一个标准的AES加密,最终得到f的字符串形式

通过控制台打印输出,这个f.toString()的返回值和第一次得到的h.encText一模一样

 h.encText = b(h.encText, i) // 重复上述步骤,一样的
3.2.4 逆向h.encSecKey的值,分析c函数

1. 悬浮定位查看c函数

2. 进入c函数,并打上断点

3. 分析RSAKeyPair函数

4. 进入RSAKeyPair函数并打上断点,结果发现每次经过RSAKeyPair产生的d值都一样

由此可见,主要的问题是e函数怎么搞。

5. 分析encryptedString函数

  • 断点+分析,主要为以下代码

当我进入里面想暴力破解它的加密逻辑时,发现对应了一大堆函数,果断使用抠js代码逆向的方式进行处理。

【4】结果展示

由上可见,已经成功获取数据!操作不易,请点个赞,谢谢~ 


http://www.kler.cn/a/534443.html

相关文章:

  • Java进阶学习之路
  • DeepSeek各版本说明与优缺点分析
  • 【免费】2007-2019年各省科技支出占一般公共预算支出的比重数据
  • Linux 安装 RabbitMQ
  • Java基础面试题50题
  • 从Transformer到世界模型:AGI核心架构演进
  • input 超出maxlength限制后,输入框变红
  • 9-收纳的知识
  • LabVIEW自定义测量参数怎么设置?
  • 基于springboot的体质测试数据分析及可视化设计
  • 教程 | i.MX RT1180 ECAT_digital_io DEMO 搭建(一)
  • 2025.2.5
  • 【分布式】服务端高并发分布式结构演进
  • C#面试常考随笔15:C#的GC原理是什么?
  • 【蓝桥杯—单片机】第十一届省赛真题代码题解题笔记 | 省赛 | 真题 | 代码题 | 刷题 | 笔记
  • leetcode_680 验证回文串
  • 除了淘宝开放平台的 API,还有哪些方式可以获取淘宝商品详情信息数据?
  • Android 13.0 系统默认手势导航时设置导航栏高度为1dp功能实现
  • DeepSeek R1技术报告关键解析(7/10):多阶段训练策略,如何优化 AI 的推理能力
  • 【自学笔记】Agent的重点知识点-持续更新
  • AI大模型:DeepSeek
  • Linux跨平台编译StrongSwan Windows版
  • 深度学习篇---计算机视觉任务模型的剪裁、量化、蒸馏
  • Java面试题集合篇5:10道基础面试题
  • C++ RTTI
  • 如何利用i18n实现国际化