某音乐平台歌曲信息逆向之参数寻找

如何逆向加密参数:某音乐平台歌曲信息逆向之webpack扣取-CSDN博客

参数构建

{"comm": {"cv": 4747474,"ct": 24,"format": "json","inCharset": "utf-8","outCharset": "utf-8","notice": 0,"platform": "yqq.json","needNewCode": 1,"uin": 0,"g_tk_new_20200303": 5381,"g_tk": 5381},"req_1": {"module": "vkey.GetVkeyServer","method": "CgiGetVkey","param": {"guid": "7146813132","songmid": ["002dw4gv1ZmiGt"],"songtype": [0],"uin": "0","loginflag": 1,"platform": "20"}},"req_2": {"module": "music.musicasset.SongFavRead","method": "IsSongFanByMid","param": {"v_songMid": ["002dw4gv1ZmiGt"]}},"req_3": {"module": "music.musichallSong.PlayLyricInfo","method": "GetPlayLyricInfo","param": {"songMID": "002dw4gv1ZmiGt","songID": 372639235}},"req_4": {"method": "GetCommentCount","module": "music.globalComment.GlobalCommentRead","param": {"request_list": [{"biz_type": 1,"biz_id": "372639235","biz_sub_type": 0}]}},"req_5": {"module": "music.musichallAlbum.AlbumInfoServer","method": "GetAlbumDetail","param": {"albumMid": "003QIVDT3UB8zG"}},"req_6": {"module": "vkey.GetVkeyServer","method": "CgiGetVkey","param": {"guid": "9868485411","songmid": ["002dw4gv1ZmiGt"],"songtype": [0],"uin": "0","loginflag": 1,"platform": "20"}}
}

分析参数

  • req_1 中参数  【guid】,【songmid】,
  • req_2中参数【v_songMid】,
  • req_3中参数【songMID】,【songID】
  • req_4中参数【biz_id】
  • req_5 中参数【albumMid】
  • req_6中参数【guid】,【songmid】

由请求参数中可看出:

songmid == v_songMid ==  songMID == biz_id

那么这几个可以根据歌曲详情页链接后缀得到

问题参数

guid   

songID   歌曲编号

albumMid  专辑短链

guid 参数逆向

调试跟栈可定位到giud生成位置

function getGuid() {a = (new Date).getUTCMilliseconds()return String(Math.round(2147483647 * Math.random()) * a % 1e10);
}

那么其余参数如何获取呢 ??? 带着这个问题开始寻找之路

寻找接口

来到歌曲详情页面开始各种搜索发现前文章中提到得接口被反复请求,仔细观察之下发现有需要得结果。

请求参数

{"comm": {"cv": 4747474,"ct": 24,"format": "json","inCharset": "utf-8","outCharset": "utf-8","notice": 0,"platform": "yqq.json","needNewCode": 1,"uin": 0,"g_tk_new_20200303": 5381,"g_tk": 5381},"req_1": {"module": "music.musicsearch.HotkeyService","method": "GetHotkeyForQQMusicMobile","param": {"searchid": "26594278617551874","remoteplace": "txt.yqq.top","from": "yqqweb"}},"req_2": {"method": "get_song_detail_yqq","module": "music.pf_song_detail_svr","param": {"song_mid": "002dw4gv1ZmiGt"}},"req_3": {"module": "music.paycenterapi.LoginStateVerificationApi","method": "GetChargeAccount","param": {"appid": "mlive"}}
}

参数刨析

  • req_1 中参数  【searchid】
  • req_2中参数【song_mid】,

由首次分析可知  song_mid  为歌曲得短链,可有歌曲详情页中链接提取到

调试取参

【searchid】26594278617551874

断点跟栈

如上方式跟栈大概到  k.request  处发现关键位置

this.request = function(t) {var n = t instanceof Array ? t : [t];e.wait || (e.wait = e.sendRequest());var r = {};return n.forEach((function(t) {e.index += 1,t.param || (t.param = {}),r["req_" + e.index] = t})),e.reqData = Object.assign(Object.assign({}, e.reqData), r),e.wait.then((function(t) {var e = Object.keys(r);return 0 === e.length ? [] : e.map((function(e) {return t[e]}))}))
}

e.reqData = Object.assign(Object.assign({}, e.reqData), r),

 此处打上断点看变量 r 值结果

存在需要得变量   【searchid】

进一步跟栈可跟踪到我们需要得位置: searchid: Object(_.a)(1)

扣取代码
, function(e, t, n) {"use strict";n.d(t, "a", (function() {return i}));var a = function(e, t) {for (var n = "".concat(e).split("").reverse(), a = "".concat(t).split("").reverse(), r = [], i = n.length, o = a.length, c = 0, s = i + o - 1; c <= s; c++)r[c] = 0;for (var l = 0; l < o; l++)for (var u = 0; u < i; u++)r[u + l] += parseInt(n[u], 10) * parseInt(a[l], 10),r[u + 1 + l] += Math.floor(r[u + l] / 10),r[u + l] = r[u + l] % 10;return r.reverse(),0 == r[0] && r.shift(),r.join("")}, r = function(e, t) {for (var n = "".concat(e).split("").reverse(), a = "".concat(t).split("").reverse(), r = n.length, i = a.length, o = 0, c = 0, s = 0, l = 0, u = 0, m = Math.max(r, i); u < m; u++)c = u < r ? parseInt(n[u], 10) : 0,s = u < i ? parseInt(a[u], 10) : 0,l = Math.round(c) + Math.round(s) + o,n[u] = "".concat(l % 10),o = l >= 10 ? 1 : 0;return 1 == o && n.push("1"),n.reverse().join("")}, i = function(e) {var t = a(e, "18014398509481984"), n = a(Math.round(Math.random() * parseInt("4194304", 10)), "4294967296"), i = new Date, o = 1e3 * (3600 * i.getHours() + 60 * i.getMinutes() + i.getSeconds()) + i.getMilliseconds();return r(r(t, n), o)}
}

通看下来 没有进行其余操作, 我们可以将该内容加入到前文webpack加载器中,也可自行更改函数,

方式二实现

function getSearchId( e ){var a = function(e, t) {for (var n = "".concat(e).split("").reverse(), a = "".concat(t).split("").reverse(), r = [], i = n.length, o = a.length, c = 0, s = i + o - 1; c <= s; c++)r[c] = 0;for (var l = 0; l < o; l++)for (var u = 0; u < i; u++)r[u + l] += parseInt(n[u], 10) * parseInt(a[l], 10),r[u + 1 + l] += Math.floor(r[u + l] / 10),r[u + l] = r[u + l] % 10;return r.reverse(),0 == r[0] && r.shift(),r.join("")}, r = function(e, t) {for (var n = "".concat(e).split("").reverse(), a = "".concat(t).split("").reverse(), r = n.length, i = a.length, o = 0, c = 0, s = 0, l = 0, u = 0, m = Math.max(r, i); u < m; u++)c = u < r ? parseInt(n[u], 10) : 0,s = u < i ? parseInt(a[u], 10) : 0,l = Math.round(c) + Math.round(s) + o,n[u] = "".concat(l % 10),o = l >= 10 ? 1 : 0;return 1 == o && n.push("1"),n.reverse().join("")};var t = a(e, "18014398509481984"), n = a(Math.round(Math.random() * parseInt("4194304", 10)), "4294967296"), i = new Date, o = 1e3 * (3600 * i.getHours() + 60 * i.getMinutes() + i.getSeconds()) + i.getMilliseconds();return r(r(t, n), o)}
调用方式

 

整合调试

详情接口

组建参数

【searchid】,【song_mid】

发起请求
_ 为时间戳, sign 值为前文逆向出来将请求参数传递进入可得到加密后得结果
歌曲id = result['req_2'][ 'data' ][ 'track_info' ][ 'id' ]
专辑短链 = result['req_2'][ 'data' ][ 'track_info' ][ 'album' ][ 'mid' ]

播放接口

将上述拿到得信息写入对应参数位置后,则可发起请求

songID   result['req_2'][ 'data' ][ 'track_info' ][ 'id' ]

albumMid  result['req_2'][ 'data' ][ 'track_info' ][ 'album' ][ 'mid' ]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/588168.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HTML】标签学习(下.4)

&#xff08;Hello&#xff01;大家好哇&#xff0c;今天我们将继续学习HTML的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; &#xff08;续接【HTML】标签学习&#xff08;下.3&#xff09;&#xff09; 3.4.2 <label&g…

如何远程电脑连接?

远程电脑连接是指通过网络将计算机与远程设备连接起来&#xff0c;实现远程管理和操作的技术。在现代信息化社会中&#xff0c;远程电脑连接成为了人们工作和生活中的重要方面。远程电脑连接可以极大地提高工作效率和便利性&#xff0c;让我们能够在不同地点的计算机之间进行协…

【教学类-09-08】20240405细线迷宫图04(正方形)迷宫格子数量测试+左上角加格子数(15CM横版一页-1份横版)

作品展示 背景说明 从8*8开始&#xff0c;可以生成了迷宫图了。 代码测试&#xff1a; 第一次&#xff1a;8-30格 # 15CM正方形手工纸上 以15*15格子为基础&#xff0c;测试0-14,16-30的格子num1 # int(input(几张&#xff08;30份&#xff09;\n))print(-----------1、 生成…

上海亚商投顾:沪指窄幅震荡微跌 固态电池概念股午后大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整&#xff0c;深成指、创业板指盘中跌超1%&#xff0c;尾盘跌幅有所收窄。固态电池概念股午后…

XRDP登录ubuntu桌面闪退问题

修改 /etc/xrdp/startwm.sh unset DBUS_SESSION_BUS_ADDRESS unset XDG_RUNTIME_DIR . $HOME/.profile

[源码] Android 上的一些快捷方式,如通知、快捷方式等

目录 一、通知0. 配置权限1. 测试发送通知代码2. 打开通知设置界面代码3. 前台服务创建常驻通知 二、快捷方式1. 测试添加动态快捷方式代码 三、开发者图块四、桌面小部件 基于jetpack compose 框架的使用代码 一、通知 参见 官方文档 0. 配置权限 <uses-permission andr…

RK3568 学习笔记 : 独立修改与编译 u-boot

前言 开发板&#xff1a;【正点原子】ATomPi-CA1 开发板&#xff0c;配置&#xff1a;RK3568&#xff0c;4GB DDRAM 64GB emmc 开发板资料给了 u-boot 与 Linux kernel 源码&#xff0c;尝试手动编译。 本篇记录 收到编译 RK3568 平台 u-boot 的方法 环境搭建 由于 RK 平台…

Redis.配置文件

基础篇Redis 6.1.2 .配置文件 spring:redis:host: 192.168.150.101port: 6379password: 123321lettuce:pool:max-active: 8 #最大连接max-idle: 8 #最大空闲连接min-idle: 0 #最小空闲连接max-wait: 100ms #连接等待时间6.1.3.测试代码 SpringBootTest class RedisDemo…

图神经网络实战(7)——图卷积网络(Graph Convolutional Network, GCN)详解与实现

图神经网络实战&#xff08;7&#xff09;——图卷积网络详解与实现 前言1. 图卷积层2. 比较 GCN 和 GNN2.1 数据集分析2.2 实现 GCN 架构 小结系列链接 前言 图卷积网络 (Graph Convolutional Network, GCN) 架构由 Kipf 和 Welling 于 2017 年提出&#xff0c;其理念是创建一…

数据结构(初阶)第一节:数据结构概论

本篇文章是对数据结构概念的纯理论介绍&#xff0c;希望系统了解数据结构概念的友友可以看看&#xff0c;对概念要求不高的友友稍做了解后移步下一节&#xff1a; 数据结构&#xff08;初阶&#xff09;第二节&#xff1a;顺序表-CSDN博客 正文 目录 正文 1.数据结构的相关概…

Word的”交叉引用“和”插入题注“快捷键设置

Word的”交叉引用“和”插入题注“快捷键设置 在MSWord2021中&#xff0c;可以自定义设置快捷键。方法如下&#xff1a;文件-选项-自定义功能区-键盘快捷方式&#xff08;自定义&#xff09;。具体过程如图所示。 最后&#xff0c;按照上述流程将插入题注&#xff08;Insert…

Node | Node.js 版本升级

目录 Step1&#xff1a;下载 Step2&#xff1a;安装 Step3&#xff1a;换源 发现其他博客说的 n 模块不太行&#xff0c;所以老老实实地手动安装 Step1&#xff1a;下载 Node 中文官网&#xff1a;https://nodejs.cn/download 点击后&#xff0c;将会下载得到一个 .msi 文件…