网易云音乐的版权、海外播放限制及破解

更新:OMG近期在网易改版后已失效。下文内容仅作存档用未作修改,不保证其内容依然有效(准确地说应该已经无效)。


Intro

众所周知,网易云音乐有两种限制:

  1. 大部分歌曲不对海外用户开放。
  2. 部分歌曲会因为版权问题“下架”,所有用户,包括海外和国内用户,一般情况下都无法播放;

对于两种限制的具体表现形式以及破解方式在客户端和网页端也各有不同。下面,将分情况讨论。另外,我会主要以我这个歌单作为示例。在测试歌曲的能否播放时,均尝试多遍,以防出现误判。但是请注意,如果你要重做我的测试的时候,请确保播放出的歌曲是你点击的歌曲——有的时候在歌曲无法播放的时候,会自动跳到别的歌曲,如果没注意会以为可以正常播放。另外,在对客户端进行测试的时候,要小心缓存对结果的干扰。

网页端

海外用户限制

UI限制

对于海外用户,如果不经过任何破解,所有的歌曲都会显示为灰色:

QQ截图20160326214110

如果点击播放,会提示“由于版权保护,您所在的地区暂时无法使用。”

这个可以通过3种方式破解:

一、充值会员“破解”:网易对海外的收费会员开了个后门,如果是会员,将享受到和国内会员一样的待遇。

二、用国内服务器反向代理网页端地址 http://music.163.com。下面有几个网友义务提供的服务器,你可以用hosts的方式将music.163.com指定到他们:

UnblockYou的:158.69.209.100

Migflyway的:45.32.72.192 / 45.63.69.42

三、将你的DNS设为上述地址。本质是一样的,因为这几个服务器配置成充当DNS服务器的时候,会把music.163.com解析给自己(来代理)。而且这样做会兼有对其他一些国内网站的支持功能。

四、使用user.js脚本移除UI灰色限制。目前最为流行的是由开发的多功能脚本“跳过网站等待、验证码及登录 [CUWCL4C]”。

如果使用方法1-3,将会看到和国内用户完全一样的结果:

QQ截图20160326220247

有几首歌(例如:《我会好好的》)依然是灰色,因为这几首歌属于版权限制。

如果用方法4中的脚本,你会发现所有的歌曲都变成黑色了,这也是这脚本方式的原理所致。但是这并不代表那些版权限制的歌曲就能听了!如果你尝试去播放诸如《我会好好的》这样的歌曲,会发现会自动跳到别的歌,实际并不能用。

DNS污染

然而,如果你用了上面的方法2或4(会员是否会有问题DNS污染的问题我不知道,手头没有会员没法测试),相信你会发现,即使是黑名的歌曲,也依然不能听。这是因为网易对m10.music.126.net(网页版主要的音频文件服务器)这一域名进行了海外DNS污染:

QQ截图20160326220551

自然也就无法正常播放了。

解决方案也分为几种:

一、直接把DNS改成国内的DNS,如阿里的或者114。但是这招有时候不太好使,我这里改成国内DNS仍然会解析出127.0.0.1。而且很显然这样会有副作用,影响访问其他网站的速度(因为可能会导致分配到不佳的CDN)。所以不推荐这种方法。

二、把DNS改成上面提到的那几个UnblockYouku系的服务器。因为他们也会把m10解析出正常的、非127.0.0.1的结果。我这里会解析成113.107.57.64(广东省揭阳市 电信)。

三、用hosts强制指定服务器。先随便找一个国内的域名解析服务,例如这个,然后在得出的域名中随便挑一个(因为网易有很多CDN,所以结果也非常多)。例如,我将第一个结果,183.6.245.47 m10.music.126.net添加之后,就可以正常播放了。

四、像破解UI变灰一样,用国内服务器反向代理。

这里要先说一下网易对音频文件的处理。当你点击播放时,浏览器一开始是请求 m10.music.126.net 开头的URL没错,但是并不是这个网址就直接访问网址了,网易服务器侧会先重新给你分配一个CDN,然后重新302定向到以CDN IP+之前网址的方式重新生成的网址中:

QQ截图20160326222334

第一张是初始请求。跳转前服务器就是我利用方法2 hosts的IP的。

QQ图片20160326222424

这张是真正请求音乐文件的CDN。地址变了。

所以,这个充当反向代理的服务器其实并不会承载很大流量。他只需要做到能把那个302地址返回就行了。真正的音频文件的流量是直连到网易的CDN的。JixunMoe提供的198.47.104.134服务器就可以完成这个功能,你只需要用hosts将 m10.music.126.net 定向到它就可以。

五、根据在方法四中的描述我们可以想到,如果我们直接在请求前就手动拼出来一个跳转后的CDN IP+音频文件URL的地址出来,我们根本没必要让服务器来302跳转——也不必在乎这个服务器的域名是不是被网易污染成127.0.0.1了。上述的CUWCL4C脚本就有这个功能,不过需要设置一下。安装脚本并启用之后,访问 https://jixunmoe.github.io/cuwcl4c/config/

QQ截图20160326223046

然后勾选第一个开关即可。注意,第二个开关正是上面方法四中提到的反向代理m*.music.126.net域名的功能,但是需要配合作者的的Proxy-163本地程序才能用,这里我没用过就不做介绍了。修改之后别忘了点下面的“存储设定”。

开启之后,可以手动在几个内置的CDN中切换,切换按钮在下方播放条音量键左侧(“换”):

QQ图片20160326223748

观察请求的地址,直接就变成了带CDN的:

QQ图片20160326223820

但是其实网易依然会很蛋疼地跳转一次……变成另外一个隔壁机房(大误)的IP外加后面加了个?wsiphost=local(从正常的m10跳转过来的是&wsiphost=ipdbm)。不管怎样,我们绕过DNS污染的目的已经达到了。

版权限制

很可惜,据我所知目前没有靠谱网页端破解版权限制的方法。原理上不是不能做到(参见下面的客户端节),但是可能需要较复杂的脚本才行。

客户端

网易客户端也是走的http协议,所以其破解方式理应和网页端差不多,只不过因为不能装脚本有些时候要麻烦些。顺便一提,这里的客户端是指桌面版,手头没有Win 10没有研究过UWP版,但是应该大同小异。

海外用户限制

在不挂任何hosts、代理等的情况下海外直连客户端,还是上面那个歌单,结果如下:

QQ截图20160326224958.png

可以看到,和网页版不同并不是所有的歌曲都变灰了。除了和国内一样会有一些版权下架之外(《我会好好的》,《情歌》,点击会提示“因合作方要求,该资源暂时下架>_<”,其他的歌曲只有部分(例如:《光辉岁月》,点击提示“因合作方要求,您所在的地区暂时无法添加播放>_<”)不能播放。对于能放的歌曲(白字),通过fiddler查看http请求:

QQ图片20160326225521.png

可以看到和网页端不同,他用的并不是m10服务器。这个服务器没有被DNS污染,而且也不会经过CDN跳转,直接就会返回音频文件:

QQ截图20160326225737

但是如果你仔细观察,会发现这里有几个值得注意的地方。

第一,一切客户端和服务器的交流都是用POST的方式,把一组不知道什么意思的params传送到网易服务器/eapi/开头的地址(这不限于播放歌曲,切播放列表等所有操作都是这样)。网易返回的response倒是明文的JSON,其中包含音频文件的地址等信息。

第二,返回的音频文件地址和实际播放器再次去请求的地址并不完全一致。上图就可以看到,返回的明明是m8服务器,但是真正请求的时候却是m9服务器。但是域名后面的地址是完全相同的就是了。具体原因不详。不过无论是跳转前还是跳转后,都不是m10系列服务器,所以你不需要任何hosts应该就可以正常播放白名歌曲。

至于变灰的歌曲,每次你打开播放列表或者歌曲详情的时候,都会通过/eapi/开头的API请求一下,然后由服务器决定是否变灰。那么,让服务器决定你是大陆用户就可以了。既然明白了原理,那破解也很简单了。方法无非还是那几种,网页端UI限制部分的方法1-3(买会员,改hosts或者改DNS为UnblockYouku系的服务器让他们代理)都可以。修改后可能需要清理下缓存网易云音乐客户端的缓存:

QQ截图20160326231300

应该是和国内用户一样了。

不过就像网页版可以通过user.js把所有的灰色歌曲变成黑色一样,在客户端中,通过替换服务器返回的数据也可以实现灰色变白。只不过,因为无法插入脚本,必须采用别的方法做到。S1用户EraserKing开发的CloudMusicGear通过本地代理的方式可以实现。因为该客户端的主要目的是修复版权限制的歌曲,故将在下一节中一并介绍。

版权限制

客户端的版权限制首先和海外用户限制一样,会变成灰色字从而无法点击播放。CloudMusicGear(下称CMG)的破解方式是,每次像服务器请求歌曲列表(如播放列表)或者详情时,劫持服务器的response,然后吧其中的相应“变灰”字段替换掉。

但是仅仅这么做还不够,因为对于变灰的歌曲服务器可能并不会返回正确的音频文件地址:在POST到/eapi/song/enhance/player/url之后,服务器返回的JSON里的url是null。这就好像你用user.js替换了网页端之后,也依然不能播放版权限制的歌曲一样。

不过所幸这里有一个漏洞可以利用。网易存储音频文件的路径是类似(去掉.mp3前面的空格,我是为了防止WordPress这白痴编辑器自动转换……)

http://m10.music.126.net/20160327080809/d21cd2d289f1201480d05a4d46f93214/ymusic/2077/26dc/d01f/fcf7252b81403393a8d14e3db3c193f4 .mp3

这个具体是如何生成的,暂时未有人破解。

但是,网易曾经的使用的API是另外一套语法,会得到类似

http://m2.music.126.net/unJpXgOuxHGL21gBMKegSQ==/1902155116124844 .mp3

这样的地址。其中“1902155116124844”被称为dfsId,可以通过手动POST“c=[{{\”id\”:\”{songId}\”,\”v\”:0}}]”(其中songId为歌曲ID)到网易的API地址 http://music.163.com/api/v2/song/detail 查询得到[*]。

[*]:在之前可以用更简单的方法,直接GET http://music.163.com/api/song/detail?id={songId}&ids=[{songId}] 得到,但是近日该API已经被网易关闭。

而“unJpXgOuxHGL21gBMKegSQ==”则是对dfsId加盐后base64编码后得到,已经被网友yanunon 反向(?)出算法。CMG的实现可以参见这里

虽然网易已经启用了新版的地址,但是老版的地址却依然可以使用。因此,对于下架歌曲,只要手动向服务器通过API查询一次,把/eapi/song/enhance/player/url返回的url部分替换成自行生成的老版本音频文件地址即可。

但是这里有一个新问题,对于海外用户,使用了替换之后音频文件URL,经常完全放不出任何歌曲。如果观察会发现这种老版的地址(至少CMG生成的)都是m1或者m2服务器,所以很有可能是这两个域名海外根本无法访问(可能是因为DNS污染,可能是因为海外用户会被指向到根本没有这些歌的CDN:我这里解析m1的地址是174.35.27.74,解析m2的是1.1.1.1←这个很明显是污染了)。我有尝试hosts到上面JixunMoe提供的198.47.104.134服务器,或者用UnblockYouku的DNS,都无效。

不过,CMG提供了一个override IP的功能,可以用fiddler模块中的“x-overrideHost” flag来修改对应音频文件服务器的host。不过我不明白的是理论上这种方法应该和手动通过hosts文件指定到IP等效才对,但是事实上我这里并不行:在CMG中选择override server IP到123.138.138.131就可以播放,在hosts文件添加123.138.138.131 m1.music.126.net和123.138.138.131 m2.music.126.net就不行。

QQ截图20160327211152.png

CMG还有一些其他功能(见上图),这里就不一一介绍了。

总结

如果你用网页端,破解海外限制最简单可靠的方法有(选其一即可):

  1. 安装CUWCL4C并开启海外用户开关;
  2. 使用UnblockYouku系的DNS;
  3.  hosts添加music.163.com到UnblockYouku系的服务器,添加m10.music.126.net到JixunMoe提供的198.47.104.134。

暂时没有办法可以破解版权歌曲。

如果你用客户端,破解海外限制最简单可靠的办法有(选其一即可):

  1. 使用UnblockYouku系的DNS;
  2. hosts music.163.com到UnblockYouku系的服务器。

破解版权歌曲唯一的办法就是使用CMG。海外用户可能需要勾选override IP选项。

 

Advertisements

一个有关“网易云音乐的版权、海外播放限制及破解”的想法

  1. 沙发,顶一下群主,去年我也研究过网易云音乐的相关问题,之前http://music.163.com/api/song/detail?id={songId}&ids=[{songId}]这个还是可以用的(默认获取的都是96Kbps),最后感觉好蛋疼,还是买了会员233

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s