特色

[Python][纯代码分享]QQ音乐解析,搜索等

源码,全部功能说明:https://github.com/MCQTSS/MCQTSS_QQMusic

代码仅用于学习交流

里面所有的_headers都是

{
  ‘Accept’: ‘*/*’,
  ‘Accept-Encoding’: ‘gzip, deflate, br’,
  ‘Accept-Language’: ‘zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6’,
  ‘Referer’: ‘https://y.qq.com/’,
  ‘User-Agent’: ‘Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X; zh-CN) AppleWebKit/537.51.1 (‘
                ‘KHTML, like Gecko) Mobile/17D50 UCBrowser/12.8.2.1268 Mobile AliApp(TUnionSDK/0.1.20.3) ‘
}

搜索:

最开始其实是想用电脑版的,不过最后还是发现手机版的网页简单点

不过现在电脑版貌似需要登录后才能搜索

搜索代码:

def search_music(name, limit=20):  # 搜索歌曲,name歌曲名,limit返回数量
  print(json.dumps({
     ‘w’: name,
     ‘t’: 0,
     ‘n’: limit,
     ‘page’: 1,
     ‘cr’: 1,
     ‘new_json’: 1,
     ‘format’: ‘json’,
     ‘platform’: ‘yqq.json’
  }))
  return requests.get(url=’https://c.y.qq.com/soso/fcgi-bin/client_search_cp’, params={
     ‘w’: name,
     ‘t’: 0,
     ‘n’: limit,
     ‘page’: 1,
     ‘cr’: 1,
     ‘new_json’: 1,
     ‘format’: ‘json’,
     ‘platform’: ‘yqq.json’
  }, timeout=1, headers=_headers).json()[‘data’][‘song’][‘list’]

除了这种记得还有这种方法

https://c.y.qq.com/soso/fcgi-bin/client_search_cp?n=长度&w=歌名

获取音乐下载地址:

万能提交接口:https://u.y.qq.com/cgi-bin/musicu.fcg?data=xxx

网页版还有个sign=xxx的方法,没研究明白

至于能不能解析VIP歌曲,看你_cookies填的是不是有绿钻的

代码:

def get_music_url(music_mid): 
  uin = ''.join(random.sample('1234567890', 10))
  data = {
     "req": {
        "module": "CDN.SrfCdnDispatchServer",
        "method": "GetCdnDispatch",
        "param": {
           "guid": "1535153710",
           "calltype": 0,
           "userip": ""
        }
     },
     "req_0": {
        "module": "vkey.GetVkeyServer",
        "method": "CgiGetVkey",
        "param": {
           "guid": "1535153710",
           "songmid": [music_mid],
           "songtype": [0],
           "uin": uin,
           "loginflag": 1,
           "platform": "20",
        }
     },
     "comm": {
        "uin": uin,
        "format": "json",
        "ct": 24,
        "cv": 0
     }
  }
  ret = json.loads(requests.get('https://u.y.qq.com/cgi-bin/musicu.fcg?data={}'.format(json.dumps(data)),
                                headers=_headers, cookies=_cookies).text)
  if ret['code'] == 500001: 
     return 'Error'
  return 'https://dl.stream.qqmusic.qq.com/{}'.format(ret['req_0']['data']['midurlinfo'][0]['purl'])

polarctf-Misc-为什么关机又关机

重命名扩展名为zip并解压后得到两个文件

其中密码内容如下:

slidetoshutdown

一大段回车

//被‎‍‍‍‏‏‎‏‍‏‌‎‍‌‏‌‍‎‍‎‌‏‏‌‏‍‏‌‎‎‎‍‏‍‌‎‏‎‎‏‎‍‍‍‎‍‏‌‎‍‎‌‍‏‌‍‍‏‎‏‍‏‌‏‏‍‎‌‏‌‎‍‌‍‏‌‏‏‏‌‌‏‏‎‏‍‎‍‏‎‌‏‏‍‍‎‌‏‎‏‎‌‌‍‏‍‎‏‌‍‍‎‎‌‏‏‌‏‎‌‏‍‌‏‍‎‏‏‌‍‏‍‎‏‌‏‍‍‎‍‎‍‏‍‎‍‏‎‌‏‎‍‍‏‏‏‌‎‏‍‌‏‍骗了吧!事情变得有趣了起来嘿嘿

使用文字隐藏加密/解密 – 蜻蜓在线工具对最后一段//被‎‍‍‍‏‏‎‏‍‏‌‎‍‌‏‌‍‎‍‎‌‏‏‌‏‍‏‌‎‎‎‍‏‍‌‎‏‎‎‏‎‍‍‍‎‍‏‌‎‍‎‌‍‏‌‍‍‏‎‏‍‏‌‏‏‍‎‌‏‌‎‍‌‍‏‌‏‏‏‌‌‏‏‎‏‍‎‍‏‎‌‏‏‍‍‎‌‏‎‏‎‌‌‍‏‍‎‏‌‍‍‎‎‌‏‏‌‏‎‌‏‍‌‏‍‎‏‏‌‍‏‍‎‏‌‏‍‍‎‍‎‍‏‍‎‍‏‎‌‏‎‍‍‏‏‏‌‎‏‍‌‏‍骗了吧!事情变得有趣了起来嘿嘿进行解密得到babalelilababala

使用密码解压压缩包后得到

其中exe双击执行后电脑直接关机

通过文件描述解压压缩包玩差不多就行啦.rar得到女王威力很强奥.jpg

使用命令

steghide extract -sf 女王威力很强奥.jpg -p 160

tips:这里使用steghide完成数据提取是学长告知的,具体怎么分析出来的我似乎也不是很清楚

steghide只能在linux中使用,使用apt install steghide安装

得出flag,其中160为威力40*6/1.5的计算结果

得到最终flag:flag{713a1e97b33356441e68d6c5ef36b385}

polarctf-Misc-爱你

下载后得到202206MISC_PolarDN_CTF_.zip,解压后得到cyndi-stego.png

使用StegSolve打开后切换R/G/B Plane 0通道发现顶部存在数据,初步判定为LSB隐写,需要提取

选择对应通道预览并导出数据

提取后数据如下

删除前两列的内容只保留第三第四列,并使用010作为16进制粘贴发现是zip

同时在底部发现存在疑似密码

存在提示rfc4042经过查找发现为utf-9,编写脚本进行解密

pwd = b",\x9b\xce\xa6s)\xd0\xd2t\x10\x9c\x0c'3\x99\xdc`r2\x08\r'1\x010\xdev2\x90\xcf&\xe3 \xc4"


def decode_utf9(data):
    # 1. 将字节转换为完整的二进制字符串
    bits = "".join(f"{b:08b}" for b in data)

    # 2. 每 9 位取出一个数值
    decoded_chars = []
    for i in range(0, len(bits) - 8, 9):  # 步长为 9
        nonet = bits[i:i + 9]
        if len(nonet) == 9:
            decoded_chars.append(chr(int(nonet, 2)))

    return "".join(decoded_chars)


result = decode_utf9(pwd)
print(f"解密结果为: {result}")

脚本如上,解密结果为Yougetit!passw0rd is LoveCynd1

使用LoveCynd1解压压缩包得到flag:flag{01e979f6dd21cd325e05fc1405e76bfd}

[Python]关于QQ音乐最新Sign算法

源码,全部功能说明:https://github.com/MCQTSS/MCQTSS_QQMusic

代码仅用于学习交流!

最近观察QQ音乐网页时发现Sign算法再次更新(开头由zzb变成了zzc)所以就有了这篇文章

可以观察到sign开头发生了改变

开头不卖关子,只需要将原来的var o = ventor(147).default;换成var o = ventor(350).default;即可解决

这次更新似乎修改了sign算法的函数位置以及新的API域名u6.y.qq.com

最后是闲的没事新增的但还没有上传到项目中的新搜索代码:

def search_music_2(self, name, limit=20):
"""
搜索歌曲
本函数使用前请设置Cookie,否则不会返回结果
:param name: 音乐名
:param limit: 搜索页数
:return:
"""
data = json.dumps({"comm": {"cv": 4747474, "ct": 24, "format": "json", "inCharset": "utf-8",
"outCharset": "utf-8", "notice": 0, "platform": "yqq.json", "needNewCode": 1,
"uin": ''.join(random.sample(string.digits, 10))},
"req_0": {"method": "DoSearchForQQMusicDesktop", "module": "music.search.SearchCgiService",
"param": {"remoteplace": "txt.yqq.top",
"searchid": "".join(random.sample(string.digits + string.digits, 17)),
"search_type": 0, "query": name, "page_num": 1, "num_per_page": limit}}},
ensure_ascii=False).encode('utf-8')
return requests.post(
url='https://u6.y.qq.com/cgi-bin/musics.fcg?_={}&sign={}'.format(
int(round(time.time() * 1000)), self.get_sign(data.decode('utf8'))),
headers={
'Referer': 'https://y.qq.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0',
'cookie':self._cookies},
data=data).json()['req_0']['data']['body']['song']['list']

注意,使用前请使用set_cookie函数设置Cookie才可使用,否则会因为无返回结果导致报错