- // ==UserScript==
- // @name New Userscript
- // @namespace http://tampermonkey.net/
- // @version 0.1
- // @description try to take over the world!
- // @author You
- // @match https://music.163.com/*
- // @grant GM_xmlhttpRequest
- // @require http://libs.baidu.com/jquery/2.0.0/jquery.min.js
- // ==/UserScript==
- /*
- * GreasyFork不允许的库,直接代码贴进来
- */
- (function () {
- let c = [];
- //#g_player > div.head.j-flag > a
- //&encSecKey=70af33c020a8543f0028c8e83bb03794dbaf27fc991b7544cee6f309d41d5713548e8d8fb4859831f2ffe92320d07a15fb6a041887c297b1ffc4e5b04b9d1cbc07ee6271d7dd2dcbf1c0b742081d36b72f3118b00a5d720a9b82811b0cfce0efc6c1e57a0cef437a00406afa19768a5d6341773497675cdb3fe424eab374429e
- $("#content-operation").append("<button class='u-btni u-btni-share ' style='color: blue' id='myurl'>下载歌曲</button>");
- $("#myurl").click(function () {
- const id = getQueryString("id");
- encrypted_request(id);
- getMusicLink(c)
- });
- // encText=str({'ids': "[" + str(id) + "]", 'br': 128000, 'csrf_token': ""})#i8a
- //获取get传值的方法
- function getQueryString(name) {
- var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
- var r = window.location.search.substr(1).match(reg);
- if (r != null) return decodeURI(r[2]);
- return null;
- }
-
- //产生16位随机数
- function r(e) {
- var t, n, r = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", o = "";
- for (t = 0; e > t; t += 1)
- n = Math.random() * r.length,
- n = Math.floor(n),
- o += r.charAt(n);
- return o
- }
-
- function o(e, t) {
- //aes 加密
- var n = CryptoJS.enc.Utf8.parse(t)
- , r = CryptoJS.enc.Utf8.parse("0102030405060708")
- , o = CryptoJS.enc.Utf8.parse(e);
- return CryptoJS.AES.encrypt(o, n, {
- iv: r,
- mode: CryptoJS.mode.CBC
- }).toString()
- }
-
- function i(e, t, n) {
- var r;
- setMaxDigits(256);
- r = new RSAKeyPair(t, "", n);
- let text = encryptedString(r, e)
- return text
- }
- function getMusicLink(c){
- GM_xmlhttpRequest({
- method: 'POST',
- url: 'https://music.163.com/weapi/song/enhance/player/url?csrf_token=',
- headers: {
- 'Accept':'*/*',
- 'Accept-Encoding':'gzip, deflate',
- 'Accept-Language':'zh-CN,zh;q=0.8',
- 'Connection':'keep-alive',
- 'Content-Type':'application/x-www-form-urlencoded',
- 'Host':'music.163.com',
- 'Origin':'http://music.163.com',
- 'Referer':'http://music.163.com/',
- 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36',
- 'Cookie': document.cookie + ';os=pc'
- },
- data: "params="+c.encText+"&encSecKey="+c.encSecKey,
- onreadystatechange: function(res) {
- if (res.readyState == 4) {
- if (res.status == 200) {
- var o=JSON.parse(res.response);
- window.open(o.data[0].url, '_blank');
-
- }
- }
- }
- });
- }
- // //const modulus = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
- // const nonce = "0CoJUm6Qyw8W8jud"
- // const pubKey = "010001"
- // const keys = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/"
- // const iv = "0102030405060708"
- var modulus = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7' +
- 'b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280' +
- '104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932' +
- '575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b' +
- '3ece0462db0a22b8e7';
- var nonce = '0CoJUm6Qyw8W8jud';
- var pubKey = '010001';
-
- function createSecretKey(size) {
- return (Math.random().toString(16).substring(2) + Math.random().toString(16).substring(2)).substring(0, 16);
- }
-
- function aesEncrypt(text, secKey) {
- secKey = CryptoJS.enc.Utf8.parse(secKey);
- text = CryptoJS.enc.Utf8.parse(text);
- var encrypted = CryptoJS.AES.encrypt(text, secKey, {
- iv: CryptoJS.enc.Utf8.parse('0102030405060708'),
- mode: CryptoJS.mode.CBC
- });
- encrypted = encrypted.toString();
- return encrypted;
- }
-
- function rsaEncrypt(text, pubKey, modulus) {
- setMaxDigits(256);
- var keys = new RSAKeyPair(pubKey, "", modulus);
- var encText = encryptedString(keys, text);
- return encText;
- }
-
- function encrypted_request(text) {
- text = '{"ids": [' + text + '], "br": 320000, "csrf_token": ""}';
- var secKey = r(16);
- var encText = aesEncrypt(aesEncrypt(text, nonce), secKey);
- var encSecKey = rsaEncrypt(secKey, pubKey, modulus);
- // var data = 'params=' + encodeURIComponent(encText) + '&encSecKey=' + encodeURIComponent(encSecKey);
- return c.encText = encodeURIComponent(encText), c.encSecKey = encodeURIComponent(encSecKey);
- }
- })();