找回密码
 立即注册
搜索
楼主: EraserKing

[其他] 解决网易云下架:网页版及Win客户端(04/01-0.9)

[复制链接]
     
 楼主| 发表于 2015-12-6 19:35 | 显示全部楼层
本帖最后由 EraserKing 于 2015-12-6 19:41 编辑
君往何处 发表于 2015-12-6 17:24
替换了按钮虽然可以点了,但是点击的时候会向 weapi/v3/song/detail?csrf_token= 请求数据,返回是歌曲的基 ...

感谢点拔!
我又看了一下 结合手上有的一首神奇的歌(http://music.163.com/#/song?id=817772
可以发现,a这个属性不是关键,在这首歌的页面上,点了播放按钮,返回来的JSON的a属性也是空的,但是实际上是可以加到播放列表里的,也能放

我把core.js又看了一遍,感觉还是privileges这个属性有点可疑,应该是里面的st、pl和版权提示有关的
st最后会赋给status

加断点检查可以发现,检查版权是core.js里的function bPC(bc)这个函数
其中有一行是bNu = bq.bNA(eD);
eD我明白是哪来的了,应该就是上面那个API返回的JSON
然后把eD扔到bNA里作检查
bq.bNA应该返回一个不为10也不为100的值才对,不为0的话就会弹框
正常的话 pl应该是320000 st为0

但是不知道如何下手了……
回复

使用道具 举报

     
发表于 2015-12-6 19:44 | 显示全部楼层
EraserKing 发表于 2015-12-6 19:35
感谢点拔!
我又看了一下 结合手上有的一首神奇的歌(http://music.163.com/#/song?id=817772)
可以发现 ...

你那首歌我这里就是弹框的,我怀疑是不是有本地缓存这种信息。你可以在firefox的隐私模式下试试。
回复

使用道具 举报

     
 楼主| 发表于 2015-12-6 20:55 | 显示全部楼层
君往何处 发表于 2015-12-6 19:44
你那首歌我这里就是弹框的,我怀疑是不是有本地缓存这种信息。你可以在firefox的隐私模式下试试。 ...

好了。完全突破。
我的思路和你不太一样,我主要是看JS这边。现在证明果然是和privileges.pl有关。
这个privilieges就是那个API里以JSON返回的一个属性。
刚刚怎么突破的原理略过不谈。现在就是看技术上怎么实现了。

核心在于core.js这个文件的bq.bNA = function (eD)这个函数里
刚进入这个函数体的时候,改一下
eD.privilege.pl = 320000
然后让它继续执行即可。
st可以不管。

试了LS有人的提的这首,http://music.163.com/#/song?id=565824。没问题,可以放。
隐私模式不登录都可以。

注意,这个函数会执行两次,两次都要改,少改任何一次都会弹窗。具体没查是在什么地方调用了两次,不管了。

现在技术问题就是如何拦截返回的这个JSON,把那个属性改掉;
或者是在修改core.js。
两者得一即可。

可惜两个我都不会……
回复

使用道具 举报

     
 楼主| 发表于 2015-12-6 21:28 | 显示全部楼层
君往何处 发表于 2015-12-6 19:44
你那首歌我这里就是弹框的,我怀疑是不是有本地缓存这种信息。你可以在firefox的隐私模式下试试。 ...

看了下Chrome的WebRequests扩展
不能直接改requestsBody啊……醉了。
回复

使用道具 举报

发表于 2015-12-6 21:39 | 显示全部楼层
这么好的福利,不会用啊
回复

使用道具 举报

     
发表于 2015-12-6 23:06 | 显示全部楼层
EraserKing 发表于 2015-12-6 20:55
好了。完全突破。
我的思路和你不太一样,我主要是看JS这边。现在证明果然是和privileges.pl有关。
这个pr ...

我在你说的那个bq.bNA里改了这个值,现象和之前改Response的值是一样的,都是能加进列表,不能放。点播放的时候左下角小红点一直转圈,不能加载音乐。
回复

使用道具 举报

     
 楼主| 发表于 2015-12-7 10:06 | 显示全部楼层
君往何处 发表于 2015-12-6 23:06
我在你说的那个bq.bNA里改了这个值,现象和之前改Response的值是一样的,都是能加进列表,不能放。点播放 ...

你用的什么浏览器 FX42下我换了台机器试 依然可以
Chrome下加了断点但是总是不断 我也不知道为什么
回复

使用道具 举报

     
发表于 2015-12-7 10:18 | 显示全部楼层
EraserKing 发表于 2015-12-7 10:06
你用的什么浏览器 FX42下我换了台机器试 依然可以
Chrome下加了断点但是总是不断 我也不知道为什么 ...

Firefox 42. 我刚才在公司的电脑试了一下也不行,还是不能加载。你有没有试过别的歌。
回复

使用道具 举报

     
 楼主| 发表于 2015-12-7 11:01 | 显示全部楼层
君往何处 发表于 2015-12-7 10:18
Firefox 42. 我刚才在公司的电脑试了一下也不行,还是不能加载。你有没有试过别的歌。 ...

你给一首 我试试
回复

使用道具 举报

     
发表于 2015-12-7 11:05 | 显示全部楼层
本帖最后由 君往何处 于 2015-12-7 11:06 编辑

http://music.163.com/#/album?id=2732401
里面很多都是

可以选一首把json串拿出来一起比较一下
回复

使用道具 举报

     
 楼主| 发表于 2015-12-7 11:21 | 显示全部楼层

我就挑了第一首,没问题吧?
进到歌曲页面 http://music.163.com/#/song?id=28138644
使用userscript把播放按钮替换出来
先点了一下播放,确认了会弹框

打开Firebug,在
  1. var bOj = eD.privilege;
复制代码
这一行上加断点
再按播放,遇到断点,暂停
在Firebug里切到Console tab
粘贴如下代码
  1. eD.privilege.pl = 320000
复制代码
,Run
切回Script tab,按Continue,第二次进断点
再次切到Console tab
再次运行如下代码
  1. eD.privilege.pl = 320000
复制代码
切回Script tab,再按Continue

成功加进播放列表,并开始播放


JSON是
  1. {"songs":[{"rtUrls":[],"ar":[{"id":16692,"name":"梶浦由記"}],"al":{"id":2732401,"name":"魔法少女まどか☆マギカ Music Collection","picUrl":"http://p3.music.126.net/eZiDckeQNGZOtEaSqlW7Ng==/5802122859908553.jpg","pic_str":"5802122859908553","pic":5802122859908553},"name":"prelude to Act 1","id":28138644,"fee":0,"ftype":0,"rtype":0,"rurl":null,"t":3,"v":22,"st":-9,"no":1,"crbt":null,"rtUrl":null,"pst":0,"alia":[],"pop":50.0,"rt":"","mst":9,"cp":0,"mv":0,"cf":"","dt":369293,"h":{"br":320000,"fid":0,"size":14808606,"vd":0.0},"m":{"br":160000,"fid":0,"size":7421701,"vd":0.0},"l":{"br":96000,"fid":0,"size":4466938,"vd":0.0},"a":null,"cd":""}],"privileges":[{"id":28138644,"fee":0,"payed":0,"st":-200,"pl":0,"dl":0,"sp":0,"cp":0,"subp":0,"cs":false,"maxbr":320000,"fl":0}],"code":200}
复制代码
我觉得没什么问题,就是pl的值是0
你对比下你的JSON看看
回复

使用道具 举报

     
发表于 2015-12-7 11:40 | 显示全部楼层
EraserKing 发表于 2015-12-7 11:21
我就挑了第一首,没问题吧?
进到歌曲页面 http://music.163.com/#/song?id=28138644
使用userscript把播 ...

我看了一下,json只有 "cs":false这里不一样,我的是true。但是改成false也是不行,步骤是照着你的做的,除了最开始我是用debug tool改的dom
回复

使用道具 举报

     
 楼主| 发表于 2015-12-7 11:49 | 显示全部楼层
君往何处 发表于 2015-12-7 11:40
我看了一下,json只有 "cs":false这里不一样,我的是true。但是改成false也是不行,步骤是照着你的做的, ...

怪了。
你的Firefox里面也是用Firebug么 还是自带的那个Inspect?
回复

使用道具 举报

     
发表于 2015-12-7 11:58 | 显示全部楼层
EraserKing 发表于 2015-12-7 11:49
怪了。
你的Firefox里面也是用Firebug么 还是自带的那个Inspect?

家里的是firebug,这里的是自带的那个
回复

使用道具 举报

     
发表于 2015-12-7 12:04 | 显示全部楼层
EraserKing 发表于 2015-12-7 11:49
怪了。
你的Firefox里面也是用Firebug么 还是自带的那个Inspect?

又看了下request,开始播放后会向weapi/song/enhance/player/url?csrf_token= 请求歌曲信息,正常的和不正常的区别是url是不是空的
  1. {"data":[{"id":28138647,"url":null,"br":0,"size":0,"md5":null,"code":404,"expi":1200,"type":null,"gain":0.0,"fee":0,"uf":null,"canExtend":false}],"code":200}

  2. {"data":[{"id":28138646,"url":"http://m10.music.126.net/20151207122803/74798f0c475790121bfa323ca8e27fb4/ymusic/ac97/817a/a5ea/7108a9ba9cb2595e5d3b5ed27728b9c2.mp3","br":128000,"size":1576310,"md5":"7108a9ba9cb2595e5d3b5ed27728b9c2","code":200,"expi":1200,"type":"mp3","gain":0.4211,"fee":0,"uf":null,"canExtend":false}],"code":200}
复制代码
回复

使用道具 举报

     
 楼主| 发表于 2015-12-7 13:10 | 显示全部楼层
本帖最后由 EraserKing 于 2015-12-7 13:11 编辑
君往何处 发表于 2015-12-7 12:04
又看了下request,开始播放后会向weapi/song/enhance/player/url?csrf_token= 请求歌曲信息,正常的和不 ...

我仔细看了 用Fiddler抓了 是这样的
weapi/song/enhance/player/url 这个API,是在每次刷新页面重新加载播放器的时候调用,平时加进播放列表或者切歌的时候并不调用

weapi/v3/song/detail 这个API,是在加进播放列表的时候调用,里面并没有URL的信息
现场加歌进播放列表的话,不会调用url这个API……所以应该是不会由你说的这个问题导致的。
回复

使用道具 举报

     
发表于 2015-12-7 13:59 | 显示全部楼层
EraserKing 发表于 2015-12-7 13:10
我仔细看了 用Fiddler抓了 是这样的
weapi/song/enhance/player/url 这个API,是在每次刷新页面重新加载播 ...

我不太确定你说的现场是什么意思。我先来整理一下调用顺序。

首先把按钮改出来了,之后点击播放或者加入列表,首先会请求 weapi/v3/song/detail ,获得歌曲的初步信息,验证没问题之后就加到播放列表里。
之后播放的时候,如果没有缓存,就会请求 weapi/song/enhance/player/url ,如果有缓存,就不请求

问题是缓存从哪里来的呢?

另外那个a,结合上面的部分看,可能指的是某种比低码率更差的模式,所以确实没用。pl的320000应该指的也是码率。之后请求weapi/song/enhance/player/url,有一个br参数用的128000,并不在detail的列表里,但是正常的返回里br确实是128000,所以实在是迷……
回复

使用道具 举报

     
 楼主| 发表于 2015-12-7 14:27 | 显示全部楼层
君往何处 发表于 2015-12-7 13:59
我不太确定你说的现场是什么意思。我先来整理一下调用顺序。

首先把按钮改出来了,之后点击播放或者加入 ...

不对。
打开新页面的时候 会请求 weapi/song/enhance/player/url 这个API 剩下的时候并不会请求
然后只要你在这个页面上不刷新,你点到别的任何歌曲的页面,把播放按钮改出来,然后点播放
只会请求 weapi/v3/song/detail ,与 weapi/song/enhance/player/url 无关

我甚至做了个测试,把 weapi/song/enhance/player/url 它加到ublock里面,照样可以放歌。

建议你可以再试试。

-----
或者楼里有谁有兴趣的可以再试一下?
回复

使用道具 举报

     
发表于 2015-12-7 14:43 | 显示全部楼层
EraserKing 发表于 2015-12-7 14:27
不对。
打开新页面的时候 会请求 weapi/song/enhance/player/url 这个API 剩下的时候并不会请求
然后只要 ...

这就比较怪了。我不管点到哪首歌,只要不是以前播放过的,点播放都会请求weapi/song/enhance/player/url 。我是用firefox自带的developer tool的network tab看的。
我回去再试试。不管是否请求这个URI,前端必然有某个方法能够获得音频文件的URI,问题就是这个地址怎么来的。
回复

使用道具 举报

发表于 2015-12-7 16:19 | 显示全部楼层
网易云音乐现在随便一听,好多歌都是灰色的
回复

使用道具 举报

     
 楼主| 发表于 2015-12-7 17:58 | 显示全部楼层
君往何处 发表于 2015-12-7 14:43
这就比较怪了。我不管点到哪首歌,只要不是以前播放过的,点播放都会请求weapi/song/enhance/player/url  ...

实际上完全可以本地完成,不用向服务器请求
https://www.hello1995.com/archives/wangyiyun_music.html
https://www.hello1995.com/archives/netease_cloud_music.html
https://github.com/yanunon/Netea ... I%E5%88%86%E6%9E%90
于是我觉得你的推测可能有错,既然可以在本地完成,就不一定会再请求某个API

我用FX的Devel tool,抓了下Network
打开页面,直到页面静止,打开Network面板,点播放按钮
一共5个请求
http://music.163.com/weapi/v3/so ... ae90213981f0c1fdd0b
然后是缩略图一张(显示在播放器里)
http://music.163.com/weapi/log/w ... ae90213981f0c1fdd0b
http://music.163.com/weapi/log/w ... ae90213981f0c1fdd0b (没错,就是2次)
再后是mp3文件的请求
其中没有你说的player/url那个API

具体在JS里怎么出来的,我看core.js里有一大块迷之数学运算,可能就是从那里拼出来的

另外有个问题,你登录了账号没有?没有话试试登录一下看看。
回复

使用道具 举报

     
发表于 2015-12-7 21:25 | 显示全部楼层
EraserKing 发表于 2015-12-7 17:58
实际上完全可以本地完成,不用向服务器请求
https://www.hello1995.com/archives/wangyiyun_music.html
h ...

我现在都快怀疑我们用的不是一个版本的……
我这个获取音乐的url是这个样子的

最后那个名字是音乐文件的md5值(下载下来确认过)。我不是太确定有什么方法可以在不访问服务器的情况下拿到这个值。

另外我点播放之后的请求是这些:
weapi/v3/song/detail?csrf_token=5b23a26426c31db0e6403227fb046c
weapi/song/enhance/player/url?csrf_token=5b23a26426c31db0e6403227fb046c
weapi/log/web?csrf_token=5b23a26426c31db0e6403227fb046c
Fr3Bqfw1IW0Ew5cdQKPTBg==/2919203374005587.jpg?param=34y34
20151207214700/e81e01ed15d6cd06359b6cb353b709fd/ymusic/260a/c938/8a84/1600b5c21bd55c82d7733ea6efe2c738.mp3
?wshc_tag=0&wsts_tag=566587f8&wsid_tag=de80ad6c&wsiphost=ipdbm
回复

使用道具 举报

     
发表于 2015-12-7 21:34 | 显示全部楼层
EraserKing 发表于 2015-12-7 17:58
实际上完全可以本地完成,不用向服务器请求
https://www.hello1995.com/archives/wangyiyun_music.html
h ...

另外我看了一下 https://www.hello1995.com/archives/netease_cloud_music.html 里的方法,需要用到dfsId,这个就是detail里,h, l, m三个属性里的fid,但是在被下架的歌曲里都是0,所以是没法用的。
回复

使用道具 举报

     
 楼主| 发表于 2015-12-7 21:58 | 显示全部楼层
君往何处 发表于 2015-12-7 21:25
我现在都快怀疑我们用的不是一个版本的……
我这个获取音乐的url是这个样子的


…………
可能是某个扩展的问题吧 我明天再试试
回复

使用道具 举报

     
 楼主| 发表于 2015-12-8 15:46 | 显示全部楼层
本帖最后由 EraserKing 于 2015-12-8 15:48 编辑

我把所有扩展一个一个启用了一遍,发现是我错了……FX的隐私模式下扩展还是处于启用状态……
但是,现在原理明白了,这个USERJS也很重要:
https://greasyfork.org/zh-CN/scr ... A%E7%99%BB%E5%BD%95

如果没有它,就会出现你说的情况,加进播放列表之后,放不了
如果有它,那么按照我的方法就可以用起来了
Chrome下测试也通过了

另外,如果出现
  1. bq.bNA = function (eD)
复制代码
这一行进不去断点的话
在pt_content_song.js里面找到
  1. if (bq.jC(bHM)) {
复制代码
,加上断点,并在进断点的时候执行
  1. bHM.status = 0
复制代码
于是……现在原因都清楚了,下面就是怎么做了。
回复

使用道具 举报

     
发表于 2015-12-8 22:56 | 显示全部楼层
本帖最后由 君往何处 于 2015-12-8 23:00 编辑
EraserKing 发表于 2015-12-8 15:46
我把所有扩展一个一个启用了一遍,发现是我错了……FX的隐私模式下扩展还是处于启用状态……
但是,现在原 ...

我照着那个脚本改了一个版本,我这边好像可以用了,你可以试试  ttp //fuzhi.co/28t
回复

使用道具 举报

     
 楼主| 发表于 2015-12-9 11:25 | 显示全部楼层
君往何处 发表于 2015-12-8 22:56
我照着那个脚本改了一个版本,我这边好像可以用了,你可以试试  ttp //fuzhi.co/28t
...

嗯 可以用了 谢谢
然后我又加了一点功能 把专辑页面的灰的也改出来
应该没有其它地方要改了吧?

我先整理下代码 现在看得有些乱 然后先问问原作者是不是有意向要加这个功能
他如果不要加的话 我们再看一下怎么把功能独立出来 把效率提高一些

回复

使用道具 举报

     
 楼主| 发表于 2015-12-9 13:27 | 显示全部楼层
君往何处 发表于 2015-12-8 22:56
我照着那个脚本改了一个版本,我这边好像可以用了,你可以试试  ttp //fuzhi.co/28t
...

https://gist.github.com/EraserKing/20eed986cafc4deda99a
换个了位置 加在了作者原来没写完的地方……
回复

使用道具 举报

     
发表于 2015-12-9 14:40 | 显示全部楼层
本帖最后由 君往何处 于 2015-12-9 14:45 编辑
EraserKing 发表于 2015-12-9 13:27
https://gist.github.com/EraserKing/20eed986cafc4deda99a
换个了位置 加在了作者原来没写完的地方…… ...

要改的话就两部分吧,一个是搜索CR3函数的关键字得改成和变量名无关的,不然网易更新一次前端js cache就可能得动一次,目测把'bOj=eD.privilege;if'换成 '.privilege;if'就行。第二个是我没注意tab和space混用,格式已经乱了。

突然想起来,我图方便就直接把bNA (就是CR3) 返回0了,没考虑付费歌曲的情况,你觉得有问题可以再改。
回复

使用道具 举报

     
 楼主| 发表于 2015-12-9 15:49 | 显示全部楼层
君往何处 发表于 2015-12-9 14:40
要改的话就两部分吧,一个是搜索CR3函数的关键字得改成和变量名无关的,不然网易更新一次前端js cache就可 ...

嗯 修了下格式 然后改了下关键字 于是可以算完工了
问了下作者 看看他愿意不愿意merge 不愿意的话我就去fork

付费歌曲的情况我知道 不过不打算改了 毕竟是别人要赚钱的东西 不能断人财路

谢谢你的帮助
回复

使用道具 举报

     
发表于 2015-12-9 15:58 | 显示全部楼层
EraserKing 发表于 2015-12-9 15:49
嗯 修了下格式 然后改了下关键字 于是可以算完工了
问了下作者 看看他愿意不愿意merge 不愿意的话我就去f ...

不用谢,我也感兴趣而已。

不过付费那个,你不改的话付费歌曲也会返回0(本来会返回10?),会不会有问题不知道,但是这才是断人财路吧
回复

使用道具 举报

     
 楼主| 发表于 2015-12-9 16:18 | 显示全部楼层
君往何处 发表于 2015-12-9 15:58
不用谢,我也感兴趣而已。

不过付费那个,你不改的话付费歌曲也会返回0(本来会返回10?),会不会有问 ...

我没再回去看代码了,但是我试了下霉霉的歌,提示需要开通包月包……应该就没问题了吧……
回复

使用道具 举报

     
发表于 2015-12-9 16:24 | 显示全部楼层
EraserKing 发表于 2015-12-9 16:18
我没再回去看代码了,但是我试了下霉霉的歌,提示需要开通包月包……应该就没问题了吧…… ...

那可能没问题,估计涉及钱的东西验证的比较严
回复

使用道具 举报

     
 楼主| 发表于 2015-12-12 15:27 | 显示全部楼层
搞定收工!
回复

使用道具 举报

     
发表于 2015-12-12 16:18 | 显示全部楼层
s1历史地位再度提高!
回复

使用道具 举报

发表于 2015-12-12 16:47 | 显示全部楼层
人在墙外的话好像还是没用 根本连不上服务器
回复

使用道具 举报

     
发表于 2015-12-12 17:13 | 显示全部楼层
可用,感谢!
回复

使用道具 举报

发表于 2015-12-12 17:35 | 显示全部楼层
可用, 感谢
回复

使用道具 举报

     
发表于 2015-12-12 18:38 | 显示全部楼层
精神加鹅
回复

使用道具 举报

     
发表于 2015-12-12 18:45 | 显示全部楼层
流石S1,可用,太感谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-11-21 19:59 , Processed in 0.081965 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表