酷狗音乐app 评论signature

文章目录

  • 声明
  • 目标
  • 加密参数定位
  • 翻页逻辑
  • 代码实现

声明

本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除!

目标

在这里插入图片描述
在这里插入图片描述
复制curl转python

# -*- coding: UTF-8 -*-
import requests
import jsonheaders = {"KG-DEVID": "164b01be4b8b37b759a0dbf7f918bc3e6f65ffd20a4f001014fa0e01f5706206732d46fdb3dff190338613e7e4e931b20ec20575366de8475843a37dc2a6617f7ed4b9ed6f921e60fb239462522c472163c2f6729e36147ba355dcde1b2d90edaafd32f1b75cccd9a6062fb77d91288d","KG-CLIENTTIMEMS": "1701247879527","KG-THash": "5d9e66d","User-Agent": "Android11-AndroidPhone-12069-130-0-COMMENT-wifi","KG-RC": "1","KG-FAKE": "0","KG-RF": "0098c118","Content-Type": "application/json; charset=utf-8","Host": "m.comment.service.kugou.com"
}
url = "http://m.comment.service.kugou.com/v1/cmtlist"
params = {"code": "fc4be23b4e972707f36b8a828a93ba8a","clienttoken": "","signature": "9db81d03c35b714f6f73ec636a3d0a4c","mid": "334239931975782545528382737887498518928","uuid": "f3d96b13323b04867443a3eaa976c6d0","ret_cmt_card_media_info": "1","show_star_cmts": "1","hidden_cmt": "1","reply_version": "1","pagesize": "20","tag": "5","clienttime": "1701247879","gitversion": "796919f","ver": "10","area_code": "1","extdata": "bf7d67b1bc6d9f10891395fc8f6aa6dd","p": "1","dfid": "2TnT9N47Jln83dpfih1eheS3","fakem": "1acf321ea88ab1da9c093ce610001bc17a0d","appid": "1005","is_show_hot_word": "1","show_classify": "1","clientver": "12069","mixsongid": "411031988","kugouid": "0"
}
data = {}
data = json.dumps(data, separators=(',', ':'))
response = requests.post(url, headers=headers, params=params, data=data)print(response.json())

在这里插入图片描述

本次主要是解决signature。

加密参数定位

直接搜索signature" 有很多结果:
在这里插入图片描述
点一个看着有点像的碰碰运气,点进去
在这里插入图片描述
hook一下这个getSign方法:

function main(){Java.perform(function(){let MusicSearchManager = Java.use("com.kugou.android.app.hicar.newhicar.voicesearch.MusicSearchManager");MusicSearchManager["getSign"].implementation = function (str, map, map2) {console.log(`MusicSearchManager.getSign is called: str=${str}, map=${map}, map2=${map2}`);let result = this["getSign"](str, map, map2);console.log(`MusicSearchManager.getSign result=${result}`);return result;};})
}setImmediate(main)

hook评论翻页也没没啥反应,看一下return返回的啥方法
在这里插入图片描述
在这里插入图片描述

hook 这个a方法看看

function main(){Java.perform(function(){let ba = Java.use("com.kugou.common.utils.ba");ba["a"].overload('java.lang.String', 'java.lang.String').implementation = function (str, str2) {let result = this["a"](str, str2);console.log(`\nstr= ${str} \nstr2= ${str2}\nresult= ${result}`);return result;};})
}setImmediate(main)

在这里插入图片描述
有反应了

str= appid=1005&channel=130&platform=1&pluginVersion=0&singerName=Kiiiu_&songHash=AAC5EC2144CB3E479C135F9B3EDCDF28&songId=33983713&usemkv=1&version=12069*s&iN#G70*
str2= utf-8
result= 4a6813f2f51992f2f6ec4226adf92380

在这里插入图片描述
可以确定ba.a是个md5,
但是这个str和我们要找的评论接口相关性貌似不大,里面的参数都是写死的

并且后面再翻页就hook不到东西了,至此怀疑评论不走这个a方法。

事实证明:hook错了。。。

signature 是32位看着也像md5

再尝试一下,翻了一下这个ba文件,发现也有个b方法使用的md5
在这里插入图片描述
感觉可疑的就hook一下

function main(){Java.perform(function(){let ba = Java.use("com.kugou.common.utils.ba");ba["b"].overload('java.lang.String').implementation = function (str) {let result = this["b"](str);console.log(`\nstr= ${str} \nresult= ${result}`);return result;};})
}setImmediate(main)

在这里插入图片描述
入参很像,柳暗花明又一村,撞大运.jpg

OIlwieks28dk2k092lksi2UIkpappid=1005area_code=1clienttime=1701228738clienttoken=clientver=12069code=fc4be23b4e972707f36b8a828a93ba8adfid=2TnT9N47Jln83dpfih1eheS3extdata=c5748b5b2fb966f28b9a71af8290497dfakem=1acf321ea88ab1da9c093ce610001bc17a0dgitversion=796919fhidden_cmt=1is_show_hot_word=1kugouid=0mid=334239931975782545528382737887498518928mixsongid=439217749p=1pagesize=20reply_version=1ret_cmt_card_media_info=1show_classify=1show_star_cmts=1tag=5uuid=f3d96b13323b04867443a3eaa976c6d0ver=10{}OIlwieks28dk2k092lksi2UIkp

验证一下是不是标准md5

在这里插入图片描述
比较加密结果一致,确定也是标准md5。

hook到的第3页的一组结果

// md5入参
OIlwieks28dk2k092lksi2UIkpappid=1005area_code=1clienttime=1701234156clienttoken=clientver=12069cmtreturnserver=%7B%22newindex%22%3A%7B%22cmts%22%3A%22%22%2C%22index%22%3A0%7D%2C%22all%5Fstart%5Findex%22%3A40%2C%22scid%22%3A%22188165003%22%2C%22r%5Fsort%5Findex%22%3A%5B%5D%2C%22weightlistcount%22%3A15%7Dcode=fc4be23b4e972707f36b8a828a93ba8adfid=2TnT9N47Jln83dpfih1eheS3extdata=c5748b5b2fb966f28b9a71af8290497dfakem=1acf321ea88ab1da9c093ce610001bc17a0dgitversion=796919fhidden_cmt=1is_show_hot_word=1kugouid=0mid=334239931975782545528382737887498518928mixsongid=439217749p=3pagesize=20reply_version=1ret_cmt_card_media_info=1show_classify=1show_star_cmts=1tag=5uuid=f3d96b13323b04867443a3eaa976c6d0ver=10{}OIlwieks28dk2k092lksi2UIkp// MD5结果
44db349dca5586f2b947d4b452d1ba4d

入参按着url参数拆一下方便查看:

OIlwieks28dk2k092lksi2UIkp
appid=1005
area_code=1
clienttime=1701234156
clienttoken=
clientver=12069
cmtreturnserver=%7B%22newindex%22%3A%7B%22cmts%22%3A%22%22%2C%22index%22%3A0%7D%2C%22all%5Fstart%5Findex%22%3A40%2C%22scid%22%3A%22188165003%22%2C%22r%5Fsort%5Findex%22%3A%5B%5D%2C%22weightlistcount%22%3A15%7D
code=fc4be23b4e972707f36b8a828a93ba8a
dfid=2TnT9N47Jln83dpfih1eheS3
extdata=c5748b5b2fb966f28b9a71af8290497d
fakem=1acf321ea88ab1da9c093ce610001bc17a0d
gitversion=796919f
hidden_cmt=1
is_show_hot_word=1
kugouid=0
mid=334239931975782545528382737887498518928
mixsongid=439217749
p=3
pagesize=20
reply_version=1
ret_cmt_card_media_info=1
show_classify=1
show_star_cmts=1
tag=5
uuid=f3d96b13323b04867443a3eaa976c6d0
ver=10
{}OIlwieks28dk2k092lksi2UIkp

大部分都是定值。extdata就是作品的hash标识,p就是页数,clienttime是当前时间戳,

翻页逻辑

cmtreturnserver解码之后

第二页{"newindex":{"cmts":"","index":0},"all_start_index":29,"scid":"188165003","r_sort_index":[],"weightlistcount":15}第三页
{"newindex":{"cmts":"","index":0},"all_start_index":40,"scid":"188165003","r_sort_index":[],"weightlistcount":15}第四页 
{"newindex":{"cmts":"","index":0},"all_start_index":40,"scid":"188165003","r_sort_index":[],"last_page":{"last_index":30,"p":2},"weightlistcount":15}第五页{"newindex":{"cmts":"","index":0},"all_start_index":40,"scid":"188165003","r_sort_index":[],"last_page":{"last_index":56,"p":3},"weightlistcount":15}第六页{"newindex":{"cmts":"","index":0},"all_start_index":40,"scid":"188165003","r_sort_index":[],"last_page":{"last_index":82,"p":4},"weightlistcount":15}第七页{"newindex":{"cmts":"","index":0},"all_start_index":40,"scid":"188165003","r_sort_index":[],"last_page":{"last_index":104,"p":5},"weightlistcount":15}

没找到啥规律,经查看发现在上页的响应内容都有一个cmtreturnserver
在这里插入图片描述

请求下一页的时候携带上这个cmtreturnserver应该就可以实现翻页了。

至此以上所有流程基本都清晰了,接下来就是代码实现。

代码实现

# -*- coding: UTF-8 -*-
import time
import requests
import json
import hashlib
from urllib.parse import unquoteheaders = {"KG-DEVID": "164b01be4b8b37b759a0dbf7f918bc3e6f65ffd20a4f001014fa0e01f5706206732d46fdb3dff190338613e7e4e931b20ec20575366de8475843a37dc2a6617f7ed4b9ed6f921e60fb239462522c472163c2f6729e36147ba355dcde1b2d90edbc881819d853b3c8ce9922044acf9fb3","KG-CLIENTTIMEMS": "1701234156542","KG-THash": "5d9e66d","User-Agent": "Android11-AndroidPhone-12069-130-0-COMMENT-wifi","KG-RC": "1","KG-FAKE": "0","KG-RF": "00988d3d","Content-Type": "application/json; charset=utf-8","Host": "m.comment.service.kugou.com"
}def get_md5(sign_s):m = hashlib.md5()m.update(sign_s.encode(encoding='UTF-8'))sign = m.hexdigest()return signdef get_kugou_commnet(pages):page = 1print(f"指定采集评论{pages}页,当前第{page}页:")ts = str(round(time.time()))params = {"code": "fc4be23b4e972707f36b8a828a93ba8a","clienttoken": "","mid": "334239931975782545528382737887498518928","uuid": "f3d96b13323b04867443a3eaa976c6d0","ret_cmt_card_media_info": "1","show_star_cmts": "1","hidden_cmt": "1","reply_version": "1","pagesize": "20","tag": "5","clienttime": ts,"gitversion": "796919f","ver": "10","area_code": "1",# "extdata": "5febf34a4835ef685b27c520d69ec608","extdata": "bf7d67b1bc6d9f10891395fc8f6aa6dd",# 掌心之中# "extdata": "c5748b5b2fb966f28b9a71af8290497d","p": str(page),"dfid": "2TnT9N47Jln83dpfih1eheS3","fakem": "1acf321ea88ab1da9c093ce610001bc17a0d","appid": "1005","is_show_hot_word": "1","show_classify": "1","clientver": "12069","mixsongid": "569900661","kugouid": "0"}# print(params)sign_s = f"OIlwieks28dk2k092lksi2UIkpappid={params.get('appid')}area_code={params.get('area_code')}clienttime={params.get('clienttime')}clienttoken=clientver={params.get('clientver')}code={params.get('code')}dfid={params.get('dfid')}extdata={params.get('extdata')}fakem={params.get('fakem')}gitversion=796919fhidden_cmt=1is_show_hot_word=1kugouid=0mid={params.get('mid')}mixsongid={params.get('mixsongid')}p={params.get('p')}pagesize=20reply_version=1ret_cmt_card_media_info=1show_classify=1show_star_cmts=1tag=5uuid={params.get('uuid')}ver=10" + "{}OIlwieks28dk2k092lksi2UIkp"sign = get_md5(sign_s)# print(sign)params.update({"signature":sign})data = {}data = json.dumps(data, separators=(',', ':'))url = "http://m.comment.service.kugou.com/v1/cmtlist"response = requests.post(url, headers=headers, params=params, data=data)js_data = response.json()print(js_data)cmtreturnserver = js_data["cmtreturnserver"]# count = js_data["count"] # 总评论数# pages = count//20while True:if page < pages:page += 1print(f"指定采集评论{pages}页,当前第{page}页:")ts = str(round(time.time()))params.update({"clienttime":ts})# 翻页更新逻辑params.update({"cmtreturnserver":cmtreturnserver})params.update({"p":page})sign_s = f"OIlwieks28dk2k092lksi2UIkpappid={params.get('appid')}area_code={params.get('area_code')}clienttime={params.get('clienttime')}clienttoken=clientver={params.get('clientver')}cmtreturnserver={params.get('cmtreturnserver')}code={params.get('code')}dfid={params.get('dfid')}extdata={params.get('extdata')}fakem={params.get('fakem')}gitversion=796919fhidden_cmt=1is_show_hot_word=1kugouid=0mid={params.get('mid')}mixsongid={params.get('mixsongid')}p={params.get('p')}pagesize=20reply_version=1ret_cmt_card_media_info=1show_classify=1show_star_cmts=1tag=5uuid={params.get('uuid')}ver=10" + "{}OIlwieks28dk2k092lksi2UIkp"sign = get_md5(sign_s)# print(sign)params.update({"signature": sign})data = {}data = json.dumps(data, separators=(',', ':'))url = "http://m.comment.service.kugou.com/v1/cmtlist"response = requests.post(url, headers=headers, params=params, data=data)js_data = response.json()cmtreturnserver = js_data["cmtreturnserver"]# print(unquote(cmtreturnserver))print(js_data)else:breakif __name__ == '__main__':pages = 5get_kugou_commnet(pages)

在这里插入图片描述

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

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

相关文章

供应链大事记 | 2024第二届中国供应链碳中和峰会来了!

背景 当下&#xff0c;全球气候变化、环境污染、资源紧张问题加剧&#xff0c;世界各国致力于推动碳达峰、碳中和&#xff0c;绿色低碳发展已成为全球共识。我国也于2020年明确提出“3060双碳目标”&#xff0c;经济结构、能源结构、产业结构亟待转型升级&#xff0c;各重点行…

熟悉SVN基本操作-(SVN相关介绍使用以及冲突解决)

一、SVN相关介绍 1、SVN是什么? 代码版本管理工具它能记住你每次的修改查看所有的修改记录恢复到任何历史版本恢复已经删除的文件 2、SVN跟Git比&#xff0c;有什么优势 使用简单&#xff0c;上手快目录级权限控制&#xff0c;企业安全必备子目录checkout&#xff0c;减少…

Git——工作区管理

如何管理工作目录&#xff0c;以便用户可以更高效地新建提交。如何在处理工作区和暂存区文件的过程中修复错误&#xff0c;以及如何修复最近一次提交记录中的问题&#xff1b;同时还会了解到如何安全地使用暂存机制和多个工作目录处理工作流中的中断问题。 主要内容有以下几点…

玻色量子研发进展

2023年 2023.8 量子计算突破云渲染资源调度&#xff01;真机测试完整报告公开&#xff01; 2023.8 量子计算突破金融信用评分&#xff01;真机测试完整报告公开&#xff01; 2023.7 玻色量子“揭秘”之旅行商问题与Ising建模 2023.7 玻色量子“揭秘”之背包问题与Ising建…

采集软件大全-全网免费的采集软件大全

采集软件大揭秘&#xff1a;从排名到任意网站采集的全方位解读 在数字时代&#xff0c;信息是黄金&#xff0c;而采集软件就是那把能够淘金的工具。无论是市场调研、竞品分析还是SEO优化&#xff0c;采集软件都扮演着不可或缺的角色。在这个领域里&#xff0c;有许多选择&…

性能测试线上监控

如果你的产品出现了一个线上问题&#xff0c;你会是怎么样的反应&#xff1f; 也许会跟下面这张图一样。 哇&#xff01;有一个线上bug&#xff0c;好慌呀&#xff01;&#xff01; 咦&#xff0c;问题似乎自动解决了&#xff1f;渐渐冷静。 不对&#xff01;&#xff01;&a…

虚拟机系列:Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置

Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置 Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置Oracle VM VirtualBox安装/更新/卸载出现 无法访问你试图使用的功能所在的网络位置 在更新Oracle VM Virtua…

【JavaEE初阶】 详解HTTPS协议加密过程

文章目录 &#x1f334;HTTPS协议是什么&#xff1f;&#x1f384;运营商劫持事件&#x1f38b;HTTPS的工作过程&#x1f6a9;对称加密&#x1f6a9;非对称加密&#x1f6a9;引入证书&#x1f6a9;完整流程 &#x1f333;HTTPS加密总结⭕总结 &#x1f334;HTTPS协议是什么&…

基于SSM校园驿站管理系统的设计与实现

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对校园快递信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差…

C语言——多种方式打印出1000之内的所有的“水仙花数”

所谓水仙花数,是指一个3位数,其各位数字立方和等于该数本身。水仙花数是指一个三位数&#xff0c;它的每个位上的数字的立方和等于它本身。例如&#xff0c;153是一个水仙花数&#xff0c;因为1^3 5^3 3^3 153。 方法一 #define _CRT_SECURE_NO_WARNINGS 1#include <std…

Docker自定义镜像

目录 回顾 镜像含义 DockerFile语法 自定义java项目镜像 创建一个空目录&#xff0c;在这个空目录中创建一个文件&#xff0c;命名为 DockerFile&#xff0c;将 java 项目打包成 jar 包&#xff0c;放到这个目录中 ​编辑 编写DockerFile文件信息 使用 docker build 构建…

分享86个简历竞聘PPT,总有一款适合您

分享86个简历竞聘PPT&#xff0c;总有一款适合您 86个简历竞聘PPT下载链接&#xff1a;https://pan.baidu.com/s/130iX0EIH6J-PFzb6HcntcQ?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整…

【追求卓越10】算法--跳表

引导 在上一节中&#xff0c;我们学习到二分查找&#xff0c;惊叹于它超高的效率&#xff08;时间复杂度为O(logn)&#xff09;。但是二分查找有一个局限性就是依赖于数组&#xff0c;这就导致它应用并不广泛。 那么适用链表是否可以做到呢&#xff1f;答案是可以的。只不过要复…

【程序员的自我修养03】深入了解ELF文件格式

绪论 大家好&#xff0c;欢迎来到【程序员的自我修养】专栏。正如其专栏名&#xff0c;本专栏主要分享学习《程序员的自我修养——链接、装载与库》的知识点以及结合自己的工作经验以及思考。编译原理相关知识本身就比较有难度&#xff0c;我会尽自己最大的努力&#xff0c;争取…

嵌入式Linux:ARM驱动+QT应用+OpenCV人脸识别项目实现

一、前言&#xff1a; 这个项目主要分为两部分&#xff0c;客户端&#xff08;ARM板端&#xff09;负责利用OpenCV采集人脸数据&#xff0c;利用TCP将人脸数据发送给服务器&#xff0c;然后服务器根据人脸数据进行人脸识别&#xff0c;将识别后的结果返还给客户端&#xff0c;客…

请大数据把奥威BI分析工具推给每一个财务!

这个财务指标怎么算&#xff1f;那些数据什么时候能拿到&#xff1f;看完报表&#xff0c;发现某部门上个月的支出涨幅过大&#xff0c;想了解原因怎么办&#xff1f;……财务人&#xff0c;你是不是每个月都把时间消耗在这些事情上了&#xff1f;那你可得快接住这个BI大数据分…

网站文章采集软件大盘点

在信息时代&#xff0c;随着互联网的不断发展和普及&#xff0c;获取、整理和利用海量信息成为各行业的共同挑战。在这个背景下&#xff0c;网站文章采集技术应运而生&#xff0c;成为满足信息需求的重要工具。本文将对网站文章采集及其相关软件进行深入探讨&#xff0c;为读者…

Golang语言基础之切片

概述 数组的长度是固定的并且数组长度属于类型的一部分&#xff0c;所以数组有很多的局限性 func arraySum(x [3]int) int{sum : 0for _, v : range x{sum sum v}return sum } 这个求和函数只能接受 [3]int 类型&#xff0c;其他的都不支持。 切片 切片&#xff08;Slic…

virustotal的使用

www.virustotal.com是一个恶意代码扫描网站&#xff0c;提交时需要验证码。 该网站有近百个病毒引擎的支持。 该网站最有用的地方在于&#xff0c;这是一个交互式的恶意代码检测网站&#xff0c;这样的模式有一个隐形的福利&#xff0c;那就是为病毒木马爱好者提供了攻防一体…

市面上这么多SD-WAN服务商,究竟有何不同?

随着数字化浪潮的不断发展&#xff0c;企业网络已经成为了现代企业中不可缺少的一部分。而提供企业组网服务的SD-WAN服务商也呈现出快速增长的趋势。但是&#xff0c;市场上有这么多SD-WAN服务商&#xff0c;各个服务商技术实现方案非常相似&#xff0c;那么这些服务商之间到底…