利用爬虫js逆向破解网易云制作播放器
目标网易云音乐
详情见B站教程https://www.bilibili.com/video/BV18V4y1T79F?p=14
还有这两篇https://blog.csdn.net/zly717216/article/details/113522474
https://blog.csdn.net/qq_36779888/article/details/90738012
抓包
喜爱页
https://music.163.com/weapi/v6/playlist/detail?csrf_token=880738687515b74fb700788c52270b8b
搜索页
https://music.163.com/#/search/m/?id=7053185814&s=陈奕迅&type=1
歌曲页
https://music.163.com/#/song?id=65800
辅助代码,下载喜爱歌曲到一个列表里面
import execjs
import requests
headers = {
'referer': 'https://music.163.com/',
'cookie':'_ga=GA1.1.18448714.1632904553; _ntes_nuid=9c0d0f8e61f12c731b6fb04a2d2e279b; _ga_C6TGHFPQ1H=GS1.1.1632904553.1.0.1632904615.0; NMTID=00Ozo1wJ1fXcNyV6kiHvvcOtt5D20kAAAF8ZQy0RA; WNMCID=wsqenr.1633782907500.01.0; WEVNSM=1.0.0; WM_TID=dI1C5xAE2t1AURUEBUI78DgnQaSfP1on; usertrack=ezq0J2LYu3quZhxDA9yVAg==; ntes_kaola_ad=1; _ntes_nnid=9c0d0f8e61f12c731b6fb04a2d2e279b,1664203664905; __snaker__id=FcswSyk2djPmoVxA; YD00000558929251%3AWM_TID=S6hdsgMkCj1BRAQUQELVSiqMIXGKybbE; _9755xjdesxxd_=32; hb_MA-93D5-9AD06EA4329A_source=www.baidu.com; __root_domain_v=.163.com; _qddaz=QD.351866958934376; WM_NI=0muVkpfNdOBVCkJVaAa%2FRcJak77OdnGHxOZhxcKgWNuswIp1NId%2BMR28EuoKp4V4WTfqCac3%2BW61WiioRfKkvvm5HMsdYH5Ww6122FHIXTAS5yBcz2CvHtsFIWN8vBYGZHo%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eea8e14489eea984f664f6bc8bb3d45a968f9b87c85287bac0d4b85b8a9ae5ccb52af0fea7c3b92af4b3bbb7ea7ca692acb0c15e81b586b7e44ba3f19e84c96ba9e9f9b0e7668598b8b0d964bcbd8588d646b7adb9aaf33b8e97acccd05af2e88b96ee41b4ec9ad5d660a6af8d82e239e989fad2d663abb19e87ca61b6aaa3d6cb47b1bc97a9b85db5eaffd3b14e8c9798b5c459f7a78e84f93a81aa8895f24e8b8982d9f54a9b9996a9ee37e2a3; gdxidpyhxdE=%5CSQfxqPLswGhHQkWaeqziJH113SBu%2B87SD%2ByEUsco%5CIL%2FpCYi8dfNwN6prCjgxD%2FL9uUnPAMaH9m7RItN7P%2F%5CjhdJ6s5yM54QznWjYDgDAabyvfiVtLb616m59%2F7REbBvqN9SxyrKjPI1NsEWpWy2YbmI%2B%5CqP%2B7Eecb7lsWE8lZ%5CQp%5Cu%3A1667012947397; YD00000558929251%3AWM_NI=d9l9PqWZ04W0cPm6nuaQkN2%2FR7Cix7xJrv6G8x8OxLYm2e73LzLf0hRTEzf5I6PbSYQ124M%2FDcE%2FKyU%2BYuM6qHPfogH1L%2FQcCHVWyHIHtWlqpmKBauFngIYmTLFIr9xNZXY%3D; YD00000558929251%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eed9c84f889cafbae2259bb48aa7d15b839b8ab1d54783ef988fc953a38bae99c92af0fea7c3b92aa8e7a4dad37b958600d5d63ca190a3d7ed7fa38fa5afb12592e98d8afb3dbc96be97b54dfca8f8b0fb489bb3fe86b63990a68487b364928c8b9be53f8beaa083d25393effed5d02588bd8bd0ca7397f59796d03eb398a087ee6d8cef84d0d46981989ab8fc448b98bcb8ef7bb4b385a3e47f86b2a9aadc6798948aaaf133bc9296b9dc37e2a3; __csrf=880738687515b74fb700788c52270b8b; MUSIC_U=6acc1a5bb7fe3625dc22db7370d5570bbb40d86bd42b29f60c049e3db3398c4f993166e004087dd326a0f72a48558f6c6c17c85bdd7a8046672c525893c48e2b37ecc291c0801a2ad4dbf082a8813684; _iuqxldmzr_=32; playerid=98979907; JSESSIONID-WYYY=ReeUtuIMo5N4sNZQWIvASEdPBWwXp2Xvf3zGHnwm%5Csz2EAMOePH1qxiuJHyUZxErrcvSSntMzKc%2Fs88lzv7JPqtpvzftMTx6%2Fo4sTy4GvfiBPzdPomqXI%5CwQ%5C%5CbC0AGrR2zxyJFFiBH9Z3H0j8Hh2%2BOszJSxZO13fDuqukPQrigm1NzR%3A1667034584884',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
params = {
'csrf_token': 'c08dc13fbcff3a4a9285ed4250812a22',
}
ctx=open('Python/实战项目/爬虫网易云播放器/网易云.js','r').read()
song_list=[]
like_list=[]
# 个人喜爱歌单
def get_like_list():
like_encText=execjs.compile(ctx).call('get_like_encText')
like_encSecKey=execjs.compile(ctx).call('get_like_encSecKey')
like_data={
'params': like_encText,
'encSecKey': like_encSecKey,
}
like_url='https://music.163.com/weapi/v6/playlist/detail'
like_songs= requests.post(like_url, params=params,headers=headers, data=like_data).json()['playlist']['tracks']
for song in like_songs:
song_name=song['name']
id=song['id']
singer=song['ar'][0]['name']
song=get_song(id,song_name,singer)
like_list.append(song)
print(song)
with open('Python/实战项目/爬虫网易云播放器/我的喜欢.txt','w',encoding='utf-8') as f:
f.write(str(like_list)+",")
# 获取歌曲
def get_song(id,song_name,singer):
encText=execjs.compile(ctx).call('get_encText',id)
encSecKey=execjs.compile(ctx).call('get_encSecKey')
song_data = {
'params': encText,
'encSecKey': encSecKey,
}
song_url = 'https://music.163.com/weapi/song/enhance/player/url/v1'
song_data = requests.post(song_url, params=params,headers=headers, data=song_data).json()['data'][0]
song_id=song_data['id']
m4a_url=song_data['url']
song={
'id':song_id,
'name':song_name,
'singer':singer,
'url':m4a_url
}
if m4a_url !=None:
song['url']=f"http://music.163.com/song/media/outer/url?id={song_id}"
return song
主界面的代码
import random
import requests
import execjs
import requests
import tkinter as tk
import os
import pygame as py
from pydub import AudioSegment
from pydub.playback import play
from playsound import playsound
from Likedsongs import I_liked_songs
headers = {
'referer': 'https://music.163.com/',
'cookie':'_ga=GA1.1.18448714.1632904553; _ntes_nuid=9c0d0f8e61f12c731b6fb04a2d2e279b; _ga_C6TGHFPQ1H=GS1.1.1632904553.1.0.1632904615.0; NMTID=00Ozo1wJ1fXcNyV6kiHvvcOtt5D20kAAAF8ZQy0RA; WNMCID=wsqenr.1633782907500.01.0; WEVNSM=1.0.0; WM_TID=dI1C5xAE2t1AURUEBUI78DgnQaSfP1on; usertrack=ezq0J2LYu3quZhxDA9yVAg==; ntes_kaola_ad=1; _ntes_nnid=9c0d0f8e61f12c731b6fb04a2d2e279b,1664203664905; __snaker__id=FcswSyk2djPmoVxA; YD00000558929251%3AWM_TID=S6hdsgMkCj1BRAQUQELVSiqMIXGKybbE; _9755xjdesxxd_=32; hb_MA-93D5-9AD06EA4329A_source=www.baidu.com; __root_domain_v=.163.com; _qddaz=QD.351866958934376; WM_NI=0muVkpfNdOBVCkJVaAa%2FRcJak77OdnGHxOZhxcKgWNuswIp1NId%2BMR28EuoKp4V4WTfqCac3%2BW61WiioRfKkvvm5HMsdYH5Ww6122FHIXTAS5yBcz2CvHtsFIWN8vBYGZHo%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eea8e14489eea984f664f6bc8bb3d45a968f9b87c85287bac0d4b85b8a9ae5ccb52af0fea7c3b92af4b3bbb7ea7ca692acb0c15e81b586b7e44ba3f19e84c96ba9e9f9b0e7668598b8b0d964bcbd8588d646b7adb9aaf33b8e97acccd05af2e88b96ee41b4ec9ad5d660a6af8d82e239e989fad2d663abb19e87ca61b6aaa3d6cb47b1bc97a9b85db5eaffd3b14e8c9798b5c459f7a78e84f93a81aa8895f24e8b8982d9f54a9b9996a9ee37e2a3; gdxidpyhxdE=%5CSQfxqPLswGhHQkWaeqziJH113SBu%2B87SD%2ByEUsco%5CIL%2FpCYi8dfNwN6prCjgxD%2FL9uUnPAMaH9m7RItN7P%2F%5CjhdJ6s5yM54QznWjYDgDAabyvfiVtLb616m59%2F7REbBvqN9SxyrKjPI1NsEWpWy2YbmI%2B%5CqP%2B7Eecb7lsWE8lZ%5CQp%5Cu%3A1667012947397; YD00000558929251%3AWM_NI=d9l9PqWZ04W0cPm6nuaQkN2%2FR7Cix7xJrv6G8x8OxLYm2e73LzLf0hRTEzf5I6PbSYQ124M%2FDcE%2FKyU%2BYuM6qHPfogH1L%2FQcCHVWyHIHtWlqpmKBauFngIYmTLFIr9xNZXY%3D; YD00000558929251%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eed9c84f889cafbae2259bb48aa7d15b839b8ab1d54783ef988fc953a38bae99c92af0fea7c3b92aa8e7a4dad37b958600d5d63ca190a3d7ed7fa38fa5afb12592e98d8afb3dbc96be97b54dfca8f8b0fb489bb3fe86b63990a68487b364928c8b9be53f8beaa083d25393effed5d02588bd8bd0ca7397f59796d03eb398a087ee6d8cef84d0d46981989ab8fc448b98bcb8ef7bb4b385a3e47f86b2a9aadc6798948aaaf133bc9296b9dc37e2a3; __csrf=880738687515b74fb700788c52270b8b; MUSIC_U=6acc1a5bb7fe3625dc22db7370d5570bbb40d86bd42b29f60c049e3db3398c4f993166e004087dd326a0f72a48558f6c6c17c85bdd7a8046672c525893c48e2b37ecc291c0801a2ad4dbf082a8813684; _iuqxldmzr_=32; playerid=98979907; JSESSIONID-WYYY=ReeUtuIMo5N4sNZQWIvASEdPBWwXp2Xvf3zGHnwm%5Csz2EAMOePH1qxiuJHyUZxErrcvSSntMzKc%2Fs88lzv7JPqtpvzftMTx6%2Fo4sTy4GvfiBPzdPomqXI%5CwQ%5C%5CbC0AGrR2zxyJFFiBH9Z3H0j8Hh2%2BOszJSxZO13fDuqukPQrigm1NzR%3A1667034584884',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
params = {
'csrf_token': 'c08dc13fbcff3a4a9285ed4250812a22',
}
ctx=open('Python/实战项目/爬虫网易云播放器/网易云.js','r').read()
song_list=[]
# 个人喜爱歌单
def get_like_list():
lab=tk.Label(root,text="猜你喜欢",font=('kaiti',16))
lab.grid(row=2,column=0,columnspan=4)
song_list=random.sample(I_liked_songs,10)
show(song_list)
# 搜索歌单
def get_song_list():
query=var.get()
list_encText=execjs.compile(ctx).call('get_list_encText',query)
list_encSecKey=execjs.compile(ctx).call('get_list_encSecKey')
list_data={
'params': list_encText,
'encSecKey': list_encSecKey,
}
search_url='https://music.163.com/weapi/cloudsearch/get/web'
songs= requests.post(search_url, params=params,headers=headers, data=list_data).json()['result']['songs']
for i,song in enumerate(songs):
song_name=song['name']
id=song['id']
singer=song['ar'][0]['name']
song=get_song(id,song_name,singer)
print(song)
song_list.append(song)
if i==9:
break
lab=tk.Label(root,text="以下是搜索结果",font=('kaiti',16))
lab.grid(row=2,column=0,columnspan=4)
show(song_list)
# 获取歌曲
def get_song(id,song_name,singer):
encText=execjs.compile(ctx).call('get_encText',id)
encSecKey=execjs.compile(ctx).call('get_encSecKey')
song_data = {
'params': encText,
'encSecKey': encSecKey,
}
song_url = 'https://music.163.com/weapi/song/enhance/player/url/v1'
song_data = requests.post(song_url, params=params,headers=headers, data=song_data).json()['data'][0]
song_id=song_data['id']
m4a_url=song_data['url']
song={
'id':song_id,
'name':song_name,
'singer':singer,
'url':m4a_url
}
if m4a_url:
song['url']=f"http://music.163.com/song/media/outer/url?id={song_id}"
return song
# 显示搜索结果
def show(song_list):
lab=tk.Label(root,width=10,text="歌曲ID",font=('heiti',12))
lab.grid(row=3,column=0)
lab=tk.Label(root,width=25,text="歌名",font=('heiti',12))
lab.grid(row=3,column=1)
lab=tk.Label(root,width=15,text="歌手",font=('heiti',12))
lab.grid(row=3,column=2)
btn=tk.Button(root,width=10,text="刷新列表",font=('heiti',12),command=get_like_list)
btn.grid(row=3,column=3)
for i,song in enumerate(song_list):
lab=tk.Label(root,width=10,text=song['id'],font=('songti',12))
lab.grid(row=4+i,column=0)
lab=tk.Label(root,width=25,text=song['name'],anchor='w',font=('songti',12))
lab.grid(row=4+i,column=1,sticky='w')
lab=tk.Label(root,width=15,text=song['singer'],anchor='w',font=('songti',12))
lab.grid(row=4+i,column=2,sticky='w')
if song['url'] is None:
btn=tk.Button(root,width=10,text="VIP尊享",font=('songti',12))
else:
btn=tk.Button(root,width=10,text="播放",font=('songti',12),command=lambda x=song:play_song(x))
btn.grid(row=4+i,column=3)
# 播放歌曲
def play_song(song):
url=song['url']
name=song['name']
id=song['id']
music_path=f'D:/56号妖精仓库/square/Python/实战项目/爬虫网易云播放器/{name}_{id}.mp3'
sound=requests.get(url).content
with open(music_path,'wb') as f:
f.write(sound)
ex = tk.Toplevel()
ex.geometry("240x30+660+260")
ex.title(name)
def delete_explain():
py.mixer.quit()
os.remove(music_path)
ex.destroy()
btn1=tk.Button(ex,width=10,text="继续",command=py.mixer.music.unpause)
btn1.grid(row=0,column=0)
btn2=tk.Button(ex,width=10,text="暂停",command=py.mixer.music.pause)
btn2.grid(row=0,column=1)
btn3=tk.Button(ex,width=10,text="结束",command=delete_explain)
btn3.grid(row=0,column=2)
ex.protocol('WM_DELETE_WINDOW',delete_explain)
py.mixer.init()
py.mixer.music.load(music_path)
py.mixer.music.play(-1, 0)
root=tk.Tk()
root.title("网易云音乐播放器")
root.iconphoto(True, tk.PhotoImage(file='Python/实战项目/爬虫网易云播放器/163.png'))
var=tk.StringVar()
var.set('')
lab=tk.Label(root,width=40,text=" 欢迎使用网易云播放器!请输入歌曲/歌手: ",font=('songti',12))
lab.grid(row=0,column=0,columnspan=2)
ent=tk.Entry(root,width=10,textvariable=var,font=('kaiti',14))
ent.grid(row=0,column=2)
btn=tk.Button(root,width=10,text="搜索音乐",font=('heiti',10),command=get_song_list)
btn.grid(row=0,column=3)
get_like_list()
l=tk.Label(root,text="***",font=('songti',10))
l.grid(row=1,column=0,columnspan=4)
root.mainloop()
js扣扣扣
window=this;
const CryptoJS = require('crypto-js');
function RSAKeyPair(a, b, c) {
this.e = biFromHex(a),
this.d = biFromHex(b),
this.m = biFromHex(c),
this.chunkSize = 2 * biHighIndex(this.m),
this.radix = 16,
this.barrett = new BarrettMu(this.m)
}
function twoDigit(a) {
return (10 > a ? "0" : "") + String(a)
}
function encryptedString(a, b) {
for (var f, g, h, i, j, k, l, c = new Array, d = b.length, e = 0; d > e; )
c[e] = b.charCodeAt(e),
e++;
for (; 0 != c.length % a.chunkSize; )
c[e++] = 0;
for (f = c.length,
g = "",
e = 0; f > e; e += a.chunkSize) {
for (j = new BigInt,
h = 0,
i = e; i < e + a.chunkSize; ++h)
j.digits[h] = c[i++],
j.digits[h] += c[i++] << 8;
k = a.barrett.powMod(j, a.e),
l = 16 == a.radix ? biToHex(k) : biToString(k, a.radix),
g += l + " "
}
return g.substring(0, g.length - 1)
}
function decryptedString(a, b) {
var e, f, g, h, c = b.split(" "), d = "";
for (e = 0; e < c.length; ++e)
for (h = 16 == a.radix ? biFromHex(c[e]) : biFromString(c[e], a.radix),
g = a.barrett.powMod(h, a.d),
f = 0; f <= biHighIndex(g); ++f)
d += String.fromCharCode(255 & g.digits[f], g.digits[f] >> 8);
return 0 == d.charCodeAt(d.length - 1) && (d = d.substring(0, d.length - 1)),
d
}
function setMaxDigits(a) {
maxDigits = a,
ZERO_ARRAY = new Array(maxDigits);
for (var b = 0; b < ZERO_ARRAY.length; b++)
ZERO_ARRAY[b] = 0;
bigZero = new BigInt,
bigOne = new BigInt,
bigOne.digits[0] = 1
}
function BigInt(a) {
this.digits = "boolean" == typeof a && 1 == a ? null : ZERO_ARRAY.slice(0),
this.isNeg = !1
}
function biFromDecimal(a) {
for (var d, e, f, b = "-" == a.charAt(0), c = b ? 1 : 0; c < a.length && "0" == a.charAt(c); )
++c;
if (c == a.length)
d = new BigInt;
else {
for (e = a.length - c,
f = e % dpl10,
0 == f && (f = dpl10),
d = biFromNumber(Number(a.substr(c, f))),
c += f; c < a.length; )
d = biAdd(biMultiply(d, lr10), biFromNumber(Number(a.substr(c, dpl10)))),
c += dpl10;
d.isNeg = b
}
return d
}
function biCopy(a) {
var b = new BigInt(!0);
return b.digits = a.digits.slice(0),
b.isNeg = a.isNeg,
b
}
function biFromNumber(a) {
var c, b = new BigInt;
for (b.isNeg = 0 > a,
a = Math.abs(a),
c = 0; a > 0; )
b.digits[c++] = a & maxDigitVal,
a >>= biRadixBits;
return b
}
function reverseStr(a) {
var c, b = "";
for (c = a.length - 1; c > -1; --c)
b += a.charAt(c);
return b
}
function biToString(a, b) {
var d, e, c = new BigInt;
for (c.digits[0] = b,
d = biDivideModulo(a, c),
e = hexatrigesimalToChar[d[1].digits[0]]; 1 == biCompare(d[0], bigZero); )
d = biDivideModulo(d[0], c),
digit = d[1].digits[0],
e += hexatrigesimalToChar[d[1].digits[0]];
return (a.isNeg ? "-" : "") + reverseStr(e)
}
function biToDecimal(a) {
var c, d, b = new BigInt;
for (b.digits[0] = 10,
c = biDivideModulo(a, b),
d = String(c[1].digits[0]); 1 == biCompare(c[0], bigZero); )
c = biDivideModulo(c[0], b),
d += String(c[1].digits[0]);
return (a.isNeg ? "-" : "") + reverseStr(d)
}
function digitToHex(a) {
var b = 15
, c = "";
for (i = 0; 4 > i; ++i)
c += hexToChar[a & b],
a >>>= 4;
return reverseStr(c)
}
function biToHex(a) {
var d, b = "";
for (biHighIndex(a),
d = biHighIndex(a); d > -1; --d)
b += digitToHex(a.digits[d]);
return b
}
function charToHex(a) {
var h, b = 48, c = b + 9, d = 97, e = d + 25, f = 65, g = 90;
return h = a >= b && c >= a ? a - b : a >= f && g >= a ? 10 + a - f : a >= d && e >= a ? 10 + a - d : 0
}
function hexToDigit(a) {
var d, b = 0, c = Math.min(a.length, 4);
for (d = 0; c > d; ++d)
b <<= 4,
b |= charToHex(a.charCodeAt(d));
return b
}
function biFromHex(a) {
var d, e, b = new BigInt, c = a.length;
for (d = c,
e = 0; d > 0; d -= 4,
++e)
b.digits[e] = hexToDigit(a.substr(Math.max(d - 4, 0), Math.min(d, 4)));
return b
}
function biFromString(a, b) {
var g, h, i, j, c = "-" == a.charAt(0), d = c ? 1 : 0, e = new BigInt, f = new BigInt;
for (f.digits[0] = 1,
g = a.length - 1; g >= d; g--)
h = a.charCodeAt(g),
i = charToHex(h),
j = biMultiplyDigit(f, i),
e = biAdd(e, j),
f = biMultiplyDigit(f, b);
return e.isNeg = c,
e
}
function biDump(a) {
return (a.isNeg ? "-" : "") + a.digits.join(" ")
}
function biAdd(a, b) {
var c, d, e, f;
if (a.isNeg != b.isNeg)
b.isNeg = !b.isNeg,
c = biSubtract(a, b),
b.isNeg = !b.isNeg;
else {
for (c = new BigInt,
d = 0,
f = 0; f < a.digits.length; ++f)
e = a.digits[f] + b.digits[f] + d,
c.digits[f] = 65535 & e,
d = Number(e >= biRadix);
c.isNeg = a.isNeg
}
return c
}
function biSubtract(a, b) {
var c, d, e, f;
if (a.isNeg != b.isNeg)
b.isNeg = !b.isNeg,
c = biAdd(a, b),
b.isNeg = !b.isNeg;
else {
for (c = new BigInt,
e = 0,
f = 0; f < a.digits.length; ++f)
d = a.digits[f] - b.digits[f] + e,
c.digits[f] = 65535 & d,
c.digits[f] < 0 && (c.digits[f] += biRadix),
e = 0 - Number(0 > d);
if (-1 == e) {
for (e = 0,
f = 0; f < a.digits.length; ++f)
d = 0 - c.digits[f] + e,
c.digits[f] = 65535 & d,
c.digits[f] < 0 && (c.digits[f] += biRadix),
e = 0 - Number(0 > d);
c.isNeg = !a.isNeg
} else
c.isNeg = a.isNeg
}
return c
}
function biHighIndex(a) {
for (var b = a.digits.length - 1; b > 0 && 0 == a.digits[b]; )
--b;
return b
}
function biNumBits(a) {
var e, b = biHighIndex(a), c = a.digits[b], d = (b + 1) * bitsPerDigit;
for (e = d; e > d - bitsPerDigit && 0 == (32768 & c); --e)
c <<= 1;
return e
}
function biMultiply(a, b) {
var d, h, i, k, c = new BigInt, e = biHighIndex(a), f = biHighIndex(b);
for (k = 0; f >= k; ++k) {
for (d = 0,
i = k,
j = 0; e >= j; ++j,
++i)
h = c.digits[i] + a.digits[j] * b.digits[k] + d,
c.digits[i] = h & maxDigitVal,
d = h >>> biRadixBits;
c.digits[k + e + 1] = d
}
return c.isNeg = a.isNeg != b.isNeg,
c
}
function biMultiplyDigit(a, b) {
var c, d, e, f;
for (result = new BigInt,
c = biHighIndex(a),
d = 0,
f = 0; c >= f; ++f)
e = result.digits[f] + a.digits[f] * b + d,
result.digits[f] = e & maxDigitVal,
d = e >>> biRadixBits;
return result.digits[1 + c] = d,
result
}
function arrayCopy(a, b, c, d, e) {
var g, h, f = Math.min(b + e, a.length);
for (g = b,
h = d; f > g; ++g,
++h)
c[h] = a[g]
}
function biShiftLeft(a, b) {
var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt;
for (arrayCopy(a.digits, 0, d.digits, c, d.digits.length - c),
e = b % bitsPerDigit,
f = bitsPerDigit - e,
g = d.digits.length - 1,
h = g - 1; g > 0; --g,
--h)
d.digits[g] = d.digits[g] << e & maxDigitVal | (d.digits[h] & highBitMasks[e]) >>> f;
return d.digits[0] = d.digits[g] << e & maxDigitVal,
d.isNeg = a.isNeg,
d
}
function biShiftRight(a, b) {
var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt;
for (arrayCopy(a.digits, c, d.digits, 0, a.digits.length - c),
e = b % bitsPerDigit,
f = bitsPerDigit - e,
g = 0,
h = g + 1; g < d.digits.length - 1; ++g,
++h)
d.digits[g] = d.digits[g] >>> e | (d.digits[h] & lowBitMasks[e]) << f;
return d.digits[d.digits.length - 1] >>>= e,
d.isNeg = a.isNeg,
d
}
function biMultiplyByRadixPower(a, b) {
var c = new BigInt;
return arrayCopy(a.digits, 0, c.digits, b, c.digits.length - b),
c
}
function biDivideByRadixPower(a, b) {
var c = new BigInt;
return arrayCopy(a.digits, b, c.digits, 0, c.digits.length - b),
c
}
function biModuloByRadixPower(a, b) {
var c = new BigInt;
return arrayCopy(a.digits, 0, c.digits, 0, b),
c
}
function biCompare(a, b) {
if (a.isNeg != b.isNeg)
return 1 - 2 * Number(a.isNeg);
for (var c = a.digits.length - 1; c >= 0; --c)
if (a.digits[c] != b.digits[c])
return a.isNeg ? 1 - 2 * Number(a.digits[c] > b.digits[c]) : 1 - 2 * Number(a.digits[c] < b.digits[c]);
return 0
}
function biDivideModulo(a, b) {
var f, g, h, i, j, k, l, m, n, o, p, q, r, s, c = biNumBits(a), d = biNumBits(b), e = b.isNeg;
if (d > c)
return a.isNeg ? (f = biCopy(bigOne),
f.isNeg = !b.isNeg,
a.isNeg = !1,
b.isNeg = !1,
g = biSubtract(b, a),
a.isNeg = !0,
b.isNeg = e) : (f = new BigInt,
g = biCopy(a)),
new Array(f,g);
for (f = new BigInt,
g = a,
h = Math.ceil(d / bitsPerDigit) - 1,
i = 0; b.digits[h] < biHalfRadix; )
b = biShiftLeft(b, 1),
++i,
++d,
h = Math.ceil(d / bitsPerDigit) - 1;
for (g = biShiftLeft(g, i),
c += i,
j = Math.ceil(c / bitsPerDigit) - 1,
k = biMultiplyByRadixPower(b, j - h); -1 != biCompare(g, k); )
++f.digits[j - h],
g = biSubtract(g, k);
for (l = j; l > h; --l) {
for (m = l >= g.digits.length ? 0 : g.digits[l],
n = l - 1 >= g.digits.length ? 0 : g.digits[l - 1],
o = l - 2 >= g.digits.length ? 0 : g.digits[l - 2],
p = h >= b.digits.length ? 0 : b.digits[h],
q = h - 1 >= b.digits.length ? 0 : b.digits[h - 1],
f.digits[l - h - 1] = m == p ? maxDigitVal : Math.floor((m * biRadix + n) / p),
r = f.digits[l - h - 1] * (p * biRadix + q),
s = m * biRadixSquared + (n * biRadix + o); r > s; )
--f.digits[l - h - 1],
r = f.digits[l - h - 1] * (p * biRadix | q),
s = m * biRadix * biRadix + (n * biRadix + o);
k = biMultiplyByRadixPower(b, l - h - 1),
g = biSubtract(g, biMultiplyDigit(k, f.digits[l - h - 1])),
g.isNeg && (g = biAdd(g, k),
--f.digits[l - h - 1])
}
return g = biShiftRight(g, i),
f.isNeg = a.isNeg != e,
a.isNeg && (f = e ? biAdd(f, bigOne) : biSubtract(f, bigOne),
b = biShiftRight(b, i),
g = biSubtract(b, g)),
0 == g.digits[0] && 0 == biHighIndex(g) && (g.isNeg = !1),
new Array(f,g)
}
function biDivide(a, b) {
return biDivideModulo(a, b)[0]
}
function biModulo(a, b) {
return biDivideModulo(a, b)[1]
}
function biMultiplyMod(a, b, c) {
return biModulo(biMultiply(a, b), c)
}
function biPow(a, b) {
for (var c = bigOne, d = a; ; ) {
if (0 != (1 & b) && (c = biMultiply(c, d)),
b >>= 1,
0 == b)
break;
d = biMultiply(d, d)
}
return c
}
function biPowMod(a, b, c) {
for (var d = bigOne, e = a, f = b; ; ) {
if (0 != (1 & f.digits[0]) && (d = biMultiplyMod(d, e, c)),
f = biShiftRight(f, 1),
0 == f.digits[0] && 0 == biHighIndex(f))
break;
e = biMultiplyMod(e, e, c)
}
return d
}
function BarrettMu(a) {
this.modulus = biCopy(a),
this.k = biHighIndex(this.modulus) + 1;
var b = new BigInt;
b.digits[2 * this.k] = 1,
this.mu = biDivide(b, this.modulus),
this.bkplus1 = new BigInt,
this.bkplus1.digits[this.k + 1] = 1,
this.modulo = BarrettMu_modulo,
this.multiplyMod = BarrettMu_multiplyMod,
this.powMod = BarrettMu_powMod
}
function BarrettMu_modulo(a) {
var i, b = biDivideByRadixPower(a, this.k - 1), c = biMultiply(b, this.mu), d = biDivideByRadixPower(c, this.k + 1), e = biModuloByRadixPower(a, this.k + 1), f = biMultiply(d, this.modulus), g = biModuloByRadixPower(f, this.k + 1), h = biSubtract(e, g);
for (h.isNeg && (h = biAdd(h, this.bkplus1)),
i = biCompare(h, this.modulus) >= 0; i; )
h = biSubtract(h, this.modulus),
i = biCompare(h, this.modulus) >= 0;
return h
}
function BarrettMu_multiplyMod(a, b) {
var c = biMultiply(a, b);
return this.modulo(c)
}
function BarrettMu_powMod(a, b) {
var d, e, c = new BigInt;
for (c.digits[0] = 1,
d = a,
e = b; ; ) {
if (0 != (1 & e.digits[0]) && (c = this.multiplyMod(c, d)),
e = biShiftRight(e, 1),
0 == e.digits[0] && 0 == biHighIndex(e))
break;
d = this.multiplyMod(d, d)
}
return c
}
var maxDigits, ZERO_ARRAY, bigZero, bigOne, dpl10, lr10, hexatrigesimalToChar, hexToChar, highBitMasks, lowBitMasks, biRadixBase = 2, biRadixBits = 16, bitsPerDigit = biRadixBits, biRadix = 65536, biHalfRadix = biRadix >>> 1, biRadixSquared = biRadix * biRadix, maxDigitVal = biRadix - 1, maxInteger = 9999999999999998;
setMaxDigits(20),
dpl10 = 15,
lr10 = biFromNumber(1e15),
hexatrigesimalToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"),
hexToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"),
highBitMasks = new Array(0,32768,49152,57344,61440,63488,64512,65024,65280,65408,65472,65504,65520,65528,65532,65534,65535),
lowBitMasks = new Array(0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535);
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 b(a, b) {
var c = CryptoJS.enc.Utf8.parse(b)
, d = CryptoJS.enc.Utf8.parse("0102030405060708")
, e = CryptoJS.enc.Utf8.parse(a)
, f = CryptoJS.AES.encrypt(e, c, {
iv: d,
mode: CryptoJS.mode.CBC
});
return f.toString()
}
function c(a, b, c) {
var d, e;
return setMaxDigits(131),
d = new RSAKeyPair(b,"",c),
e = encryptedString(d, a)
}
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
}
function e(a, b, d, e) {
var f = {};
return f.encText = c(a + e, b, d),
f
}
window.asrsea = d,
window.ecnonasr = e
pa_e='010001'
pa_f='00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'
pa_g='0CoJUm6Qyw8W8jud'
pa_i='vIh9NqhrNQYqF3rD'
get_like_encText=function(){
pa_d='{"id":"7053185814","offset":"0","total":"true","limit":"1000","n":"1000","csrf_token":"880738687515b74fb700788c52270b8b"}'
h_encText=b(pa_d, pa_g)
like_encText = b(h_encText,pa_i);
return like_encText;
}
console.log(get_like_encText())
get_like_encSecKey=function(){
pd_d='{"moduleName":"preload","csrf_token":"880738687515b74fb700788c52270b8b"}'
like_encSecKey = c(pa_i,pa_e,pa_f);
return like_encSecKey;
}
console.log(get_like_encSecKey())
pa_i="etalO0jto4hGfdDj"
get_list_encText=function(s){
pa_d='{"hlpretag":"<span class=\\"s-fc7\\">","hlposttag":"</span>","id":"65766","s":"'+s+'","type":"1","offset":"0","total":"true","limit":"30","csrf_token":"c08dc13fbcff3a4a9285ed4250812a22"}'
h_encText=b(pa_d, pa_g)
list_encText = b(h_encText,pa_i);
return list_encText;
}
get_list_encSecKey=function(){
pd_d='{"logs":"[{\\"action\\":\\"mobile_monitor\\",\\"json\\":{\\"meta._ver\\":2,\\"meta._dataName\\":\\"pip_lyric_monitor\\",\\"action\\":\\"render\\",\\"userAgent\\":\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52\\",\\"chromeVersion\\":106,\\"resourceId\\":5253801,\\"resourceType\\":\\"song\\"}}]","csrf_token":"c08dc13fbcff3a4a9285ed4250812a22"}'
list_encSecKey = c(pa_i,pa_e,pa_f);
return list_encSecKey;
}
get_encText=function(id){
pa_d='{"ids":"['+id+']","level":"standard","encodeType":"aac","csrf_token":"c08dc13fbcff3a4a9285ed4250812a22"}'
h_encText=b(pa_d, pa_g)
encText = b(h_encText,pa_i);
return encText;
}
get_encSecKey=function(){
pd_d='{"logs":"[{\\"action\\":\\"mobile_monitor\\",\\"json\\":{\\"meta._ver\\":2,\\"meta._dataName\\":\\"pip_lyric_monitor\\",\\"action\\":\\"render\\",\\"userAgent\\":\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52\\",\\"chromeVersion\\":106,\\"resourceId\\":5253801,\\"resourceType\\":\\"song\\"}}]","csrf_token":"c08dc13fbcff3a4a9285ed4250812a22"}'
encSecKey = c(pa_i,pa_e,pa_f);
return encSecKey;
}