【QQ音樂】sign簽名| data參數 | AES-GCM加密 | webpack(上)

1.目標

網址:https://y.qq.com/n/ryqq/toplist/26

在這里插入圖片描述
在這里插入圖片描述
切換榜單出現請求,可以看到signdata是加密的

2.逆向分析

搜索sign:
在這里插入圖片描述
在這里插入圖片描述
可以看到sign = P(n.data),而n.data就是請求的加密data參數

data = '{"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":"musicToplist.ToplistInfoServer","method":"GetDetail","param":{"topid":27,"offset":0,"num":20,"period":"2025-05-27"}}}'

3.webpack分析

在這里插入圖片描述
這是Webpack 打包后的模塊加載代碼
在這里插入圖片描述
在這里打上斷點找加載器n,然后刷新頁面
在這里插入圖片描述
可以看到加載器的name"f",數組m里面390個模塊
點擊進入就是加載器
在這里插入圖片描述
可以看到是以列表的方式存儲模塊的,
然后將獲取sign的模塊,就是含有下面內容的模塊,放進去

var P = G._getSecuritySign;
var L = j.__cgiEncrypt, N = j.__cgiDecrypt;

在這里插入圖片描述

  • G._getSecuritySign
    • 獲取sign
  • j.__cgiEncrypt
    • 加密請求參數data
  • j.__cgiDecrypt
    • 解密響應二進制數據

window = global;!function(e) {function r() {for (var e, t = 0; t < d.length; t++) {for (var r = d[t], a = !0, n = 1; n < r.length; n++) {var c = r[n];0 !== o[c] && (a = !1)}a && (d.splice(t--, 1),e = f(f.s = r[0]))}return e}var a = {}, n = {21: 0}, o = {21: 0}, d = [];function f(t) {if (a[t])return a[t].exports;var r = a[t] = {i: t,l: !1,exports: {}};console.log(t)return e[t].call(r.exports, r, r.exports, f),r.l = !0,r.exports}f.m = e,f.c = a,f.d = function(e, t, r) {f.o(e, t) || Object.defineProperty(e, t, {enumerable: !0,get: r})},f.r = function(e) {"undefined" !== typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {value: "Module"}),Object.defineProperty(e, "__esModule", {value: !0})},f.t = function(e, t) {if (1 & t && (e = f(e)),8 & t)return e;if (4 & t && "object" === typeof e && e && e.__esModule)return e;var r = Object.create(null);if (f.r(r),Object.defineProperty(r, "default", {enumerable: !0,value: e}),2 & t && "string" != typeof e)for (var a in e)f.d(r, a, function(t) {return e[t]}.bind(null, a));return r},f.o = function(e, t) {return Object.prototype.hasOwnProperty.call(e, t)}r()window.shark = f;
}([]);console.log(window.shark);

先刪除一些無用的代碼,然后將模塊放進去
在這里插入圖片描述

如果這么運行的話,毫無疑問是會報錯的

        return e[t].call(r.exports, r, r.exports, f),^TypeError: Cannot read properties of undefined (reading 'call')

很明顯缺少的是下標為81的模塊,然后我們去瀏覽器取該模塊
在這里插入圖片描述
在這里插入圖片描述
然后這里也不是導入81模塊,在這里我們是導入自己的下標為1的模塊
在這里插入圖片描述
然后接下來就是導出全局函數了
在這里插入圖片描述
打印方法沒有問題
在這里插入圖片描述

4.sign驗證


get_sign = (data) => window.shark(0).getSign(data);data = '{"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":"musicToplist.ToplistInfoServer","method":"GetDetail","param":{"topid":27,"offset":0,"num":20,"period":"2025-05-28"}}}'console.log(get_sign(data))

寫個箭頭函數驗證能否生成sign
在這里插入圖片描述

運行代碼可以生成sign
在這里插入圖片描述
但是和瀏覽器的sign不一樣,而且data是一樣的,這就是缺少必要的環境

window = global;document = {cookie: 'pgv_pvid=592785550; fqm_pvqid=75e53579-6875-45e3-9bfa-8c3634fd8b23; fqm_sessionid=4742d993-b7c2-4148-b070-67c2ac322bc7; pgv_info=ssid=s6945372512; ts_last=y.qq.com/n/ryqq/toplist/26; ts_refer=cn.bing.com/; ts_uid=4872983500',createElement: function(res){if(res == 'a') return {}},
}
navigator = {userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36",}
location = {"href": "https://y.qq.com/","host": "y.qq.com",
}

在這里插入圖片描述
補充環境之后發現和瀏覽器的一致

sign算法逆向參見:https://blog.csdn.net/2406_83321119/article/details/146435985

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82777.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82777.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82777.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uni-app(6):Vue3語法基礎下

1 列表渲染 1.1 在 v-for 里使用數組 v-for 指令可以實現基于一個數組來渲染一個列表。v-for 指令需要使用 item in items 形式的特殊語法&#xff0c;其中 items 是源數據數組&#xff0c;而 item 則是被迭代的數組元素的別名。 在 v-for 塊中&#xff0c;我們可以訪問所有父…

STM32之SPI——外部FLASH和RFID

一、SPI協議的原理與應用 基本概念 串行外設接口SPI&#xff08;Serial Peripheral Interface&#xff09;是由美國摩托羅拉公司最先推出的一種同步串行傳輸規范&#xff0c;也是一種單片機外設芯片串行外設擴展接口。該接口是一種高速、全雙工、同步的通信總線&#xff0c;并…

51c視覺~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13954440 #SceneTracker 在4D時空中追蹤萬物&#xff01;國防科大提出首個長時場景流估計方法 本篇分享 TPAMI 2025 論文??SceneTracker: Long-term Scene Flow Estimation Network??&#xff0c;國防科大提出首…

cf2059B

原題鏈接&#xff1a;https://codeforces.com/contest/2059/problem/B 題目背景&#xff1a; 將一個長度為 n 的數組 a 劃分為 k 個數組&#xff0c;再將所有偶數索引的數組合并成 b 數組&#xff0c;定義代價為 的最小索引 i &#xff0c;可得到的最小代價為多少。 思路&am…

爬蟲到智能數據分析:Bright Data × Kimi 智能洞察亞馬遜電商產品銷售潛力

前言 電商數據分析在現代商業中具有重要的戰略價值&#xff0c;通過對消費者行為、銷售趨勢、商品價格、庫存等數據的深入分析&#xff0c;企業能夠獲得對市場動態的精準洞察&#xff0c;優化運營決策&#xff0c;預測市場趨勢、優化廣告投放、提升供應鏈效率&#xff0c;并通…

從解決一個分享圖片生成的歷史bug出發,詳解LayoutInflater和View.post的工作原理

問題背景 最近在項目中遇到一個問題&#xff1a;在檔口分享功能中&#xff0c;需要動態生成一個分享圖片。代碼是這樣寫的&#xff1a; // 項目中的代碼 val shareView LayoutInflater.from(thisStallMainActivityV1).inflate(R.layout.share_header_stall_main_layout, nul…

2.linux目錄切換命令:cd與pwd以及路徑與路徑符

cd 切換當前工作目錄 cd [linux路徑0] cd沒有選項,直接執行,只有參數.如果沒有參數,表示回到用戶的home目錄 pwd 無參,無選項,直接打印當前工作目錄的絕對路徑 路徑 相對路徑 以當前目錄為起點,路徑描述無需使用/開頭 # cd Desktop 絕對路徑 路徑描述需要以/開頭 cd…

摩爾條紋 原理以及matlab 實現

一、簡介 莫爾條紋的形成原理-CSDN博客 “莫爾”一詞源于法文“Moire”&#xff0c;其原本的含義是“波動”或者“起波紋的”。早在古代時期&#xff0c;人們便偶然發現&#xff0c;當把兩塊薄的絲綢織物相互疊加放置時&#xff0c;能夠看到一種呈現不規則形態的花紋。此后&a…

【海康USB相機被HALCON助手連接過后,MVS顯示無法連接故障。】

在Halcon里使用助手調用海康USB相機時&#xff0c;如果這個界面點擊了【是】 那么恭喜你&#xff0c;相機只能被HALCON調用使用&#xff0c;使用MVS或者海康開發庫&#xff0c;將查找不到相機 解決方式&#xff1a; 右鍵桌面【此電腦】圖標 ->選擇【管理】 ->選擇【設備…

數據治理是什么意思?數據治理平臺有哪些?

目錄 一、數據治理的概念 1. 數據治理的定義 2. 數據治理的目標 二、數據治理的實施流程 1. 規劃階段 2. 評估階段 3. 執行階段 4. 監控與評估階段 三、常見的數據治理平臺 1. FineDataLink 2. IBM InfoSphere Information Governance Catalog 四、總結 隨著企業業…

高效工具-tldr

喜歡使用命令操作的小伙伴&#xff0c;肯定會遇到一個問題&#xff0c;查看命令如何使用時&#xff0c;會列出一堆&#xff0c;特別是英文&#xff0c;看的直發懵。前段時間我也是研究git命令&#xff0c;也遇到了類似的問題。好在有大數據&#xff0c;幫我普及相關的知識。 在…

安卓添加設備節點權限和selinux訪問權限

# 1 修改設備節點權限及配置屬性設置節點值 ## 1.1 修改設備節點權限 ### 1.1.1 不會手動卸載的節點 在system/core/rootdir/init.rc中添加節點權限 在on boot下面添加 chown system system /sys/kernel/usb/host chmod 0664 /sys/kernel/usb/host ### 1.1.2 支持熱插拔的…

ssm學習筆記(尚硅谷) day1

創建新項目 maven的聚合 1. 標記父類項目 標簽<packaging>pom</packaging>表示將該項目標記為父類項目&#xff0c;必須添加。 以下是標簽<packing>的常見取值 groupId在pom.xml中&#xff0c;可以從pom.xml直接修改。 2. 通過<modules>添加子項目…

基于Java,SpringBoot,Vue,UniAPP醫院預約掛號買藥就診病例微信小程序系統設計

摘要 隨著醫療信息化的不斷推進以及“互聯網醫療”模式的廣泛普及&#xff0c;傳統醫院掛號流程中存在的排隊時間長、資源分配不均等問題日益凸顯&#xff0c;急需通過數字化手段加以解決。本研究設計并實現了一套基于Java、SpringBoot、Vue與UniAPP技術棧的醫院預約掛號微信小…

Axure項目實戰:運輸統計頁引入echarts實現高保真設計(JS代碼ctrl+c ctrl+v懂得來)

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝!如有幫助請訂閱專欄! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 案例視頻: 數據統計引入echarts示例演示 課程主題:運輸統計頁引入echarts實現高保真設計 主要內容…

python打卡day39

圖像數據與顯存 知識點回顧 圖像數據的格式&#xff1a;灰度和彩色數據模型的定義顯存占用的4種地方 模型參數梯度參數優化器參數數據批量所占顯存神經元輸出中間狀態 batchisize和訓練的關系 作業&#xff1a;今日代碼較少&#xff0c;理解內容即可 在 PyTorch 中&#xff0c;…

15.1 【基礎項目】使用 HTML、CSS 和 TypeScript 構建的簡單計數器應用

一個簡單的計數器應用是學習如何集成 HTML、CSS 和 TypeScript 的絕佳項目。該應用允許用戶對計數值進行增加、減少和重置&#xff0c;展示了 TypeScript 中基本的 DOM 操作和事件處理。 我們將構建的內容 我們將創建一個具有以下功能的計數器應用&#xff1a; 增加計數值減…

RT-Thread源碼閱讀(3)——內核對象管理

_object_container對象容器數組 在RT-Thread操作系統中&#xff0c;_object_container數組的作用是按類型分類管理內核對象&#xff0c;提供高效的類型檢查、資源管理和統計功能 struct rt_list_node {struct rt_list_node *next; /**< point to…

《智能醫學》征稿通知:7天可見刊,專科及以上可發表

香港科學出版社(Hong Kong Scientific Publishers Journals)是一家全球獨立高質量的學術出版機構&#xff0c;遵循國際開放獲取的出版(OA)原則。現已與科檢易學術攜手共同征集高質量文章。目前可出版來自高等學校、科研院所和企業的先進科技成果。包括理、工、農、醫、經、管、…