小技巧!从网易云音乐缓存中获取版权失效的音乐

起因

前两天听了赵方婧小姐姐翻唱的《知否》,惊为天人,就点了颗心收藏了。结果今天在点开一看。居然没有版权了!!!

这也不是一次两次了,充了两个会员跟没充一样,说下架就下架,喜欢的歌听不到,这怎么能忍!

把爱曲抢救回来!

想到这两天听过,电脑一定有缓存的,所以去设置里面看了下缓存目录:

嗯。。。果然改了名字,看文件大小就知道这个.uc后缀的就是缓存的MP3文件了,文件名应该就是它id

那这个id是什么呢?客户端看不到,我们把这首歌复制到浏览器去看看:

还是挺显眼的,参数名就叫id了哈哈哈哈

拿到这个id,去文件夹搜索一下,就能找到我们想要的歌的缓存啦

然后按照原本的想法,后缀改成MP3之后,应该直接就能听了,然而。。。

右键网易云音乐打开,提示解码失败!!!看来网易云也防了一手啊,大概是做了什么加密处理。

对缓存文件反向解密

考虑到文件加密后大小跟原来的基本没有变化,大概是进行了与或处理

上google搜索了一下,很多人都遇到了,有大佬已经试出来了,就是逐字节跟0xa3与或一下就好了。

至于大佬是怎么试出来的,我个人猜测应该是拿到缓存文件,再拿到下载文件,各取第一个字节来试一下,与或虽然不能逆运算,不过应该能拿来猜一下。
下面贴出转换代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.io.*;

/**
* @author Chenyl
* @date 2019/2/14 10:41
*/
public class music {

public static void main(String[] args){
try{
File inFile = new File("C:\\Users\\Void\\Desktop\\知否-赵方婧.mp3");
File outFile = new File("C:\\Users\\Void\\Desktop\\知否-赵方婧(解).mp3");

DataInputStream dis = new DataInputStream( new FileInputStream(inFile));
DataOutputStream dos = new DataOutputStream( new FileOutputStream(outFile));
byte[] by = new byte[1000];
int len;
while((len=dis.read(by))!=-1){
for(int i=0;i<len;i++){
by[i]^=0xa3;
}
dos.write(by,0,len);
}
dis.close();
dos.close();
}catch(IOException ioe){
System.err.println(ioe);
}
}
}

解出来的文件直接就可以听啦!不过不知道是不是心理作用,总觉得音质受损了= =

一些感想

此方法仅限于自己学习使用,请勿无版权传播音频。
其实我也是很不愿意这样做的,各大运营商为了利益把版权弄得四分五裂,听歌都要各个软件来回切换,开四五个会员就算了,还经常突然下架歌曲,甚至有偷偷删除歌单的行为出现。

希望国家早日立法,统一版权,给我们一个稳定付费的环境吧。真的,支持歌手,不差那点钱,现在是想给钱都听不到,我也是醉了。

参考链接

0%