关于网易云音乐单首歌曲加密算法的破解?

2017-02-20 08:59:26 +08:00
 onsala

最近在学习爬网易云的歌曲,在获取单首歌曲的播放地址的时候遇到了一点问题,拜托 V 站各位大神帮看下。 ps: 第一次发帖,对社区的规则还不是很熟悉。

参考 musicbox 加密算法,比如我现在要抓取周杰伦的告白气球,通过抓取我得到它的 dfsid 是 3435973841155597 ,现在我想通过这个破解得到这首歌的播放地址。我是下面这样做的:

破解程序:

import hashlib
import base64
import random

def encrypted_id(id):
    magic = bytearray('3go8&$8*3*3h0k(2)2', 'u8')
    song_id = bytearray(id, 'u8')
    magic_len = len(magic)
    for i, sid in enumerate(song_id):
        song_id[i] = sid ^ magic[i % magic_len]
    m = hashlib.md5(song_id)
    result = m.digest()
    result = base64.b64encode(result)
    result = result.replace(b'/', b'_')
    result = result.replace(b'+', b'-')
    return result.decode('utf-8')

调用程序:

song_dfsId = str(3435973841155597)
enc_id = encrypted_id(song_dfsId)
url = 'http://m%d.music.126.net/%s/%s.mp3' % (random.randrange(1, 3), enc_id, song_dfsId)
print url

输出的运行结果是:

http://m2.music.126.net/RMJR7wDullRqppBk8dhLow==/3435973841155597.mp3

如果直接拿上面的 url 去访问会报 403 错误,通过在浏览器下面抓包歌曲正确的 url 应该是 http://m10.music.126.net/20170220090502/e6fb244e65e9ee9933982e16e10c218c/ymusic/6e01/a4d4/bbef/2dda07904eb54d44abb278165e1c6ead.mp3

请问上面的程序出错的原因在哪里?

9937 次点击
所在节点    Python
18 条回复
zhihaofans
2017-02-20 09:06:10 +08:00
403 有可能是需要什么认证 key 或者登陆
ss098
2017-02-20 09:10:12 +08:00
干嘛那么复杂 ...

var httpurl = "http://music.163.com/api/song/detail?id=" + music_id + "&ids=[" + music_id + "]";

给你摘一句 ... 去年写的,拿到的 URL 可以直接用。

http://projects.qiyichao.cn/netease-music-parse/
onsala
2017-02-20 09:27:22 +08:00
@zhihaofans 应该不是登录的原因,因为 403 是到浏览器里面访问得到的,在浏览器里面我已经登录好了。感觉可能是 url 解析的不对,但是[https://github.com/darknessomi/musicbox/blob/master/NEMbox/api.py](musicbox)好像就是我这样做的,不知道我哪里理解错了?
hcwhan
2017-02-20 09:49:21 +08:00
抓包比较一下两个 http head 的区别应该就知道了
hcwhan
2017-02-20 09:53:25 +08:00
看你的秒速 可能是 User-Agent 字段有判断
hcwhan
2017-02-20 09:55:04 +08:00
问题看错了 请忽略我的回答😂😂😂
DlYgod
2017-02-20 09:55:51 +08:00
crytis
2017-02-20 10:16:05 +08:00
你下面的 url 浏览器直接访问也不行
yingos
2017-02-20 10:18:40 +08:00
cherrypick
2017-02-20 13:58:55 +08:00
我也可以直接访问,不会有 403
yivanus
2017-02-20 14:26:58 +08:00
我这边无法访问。
czvatqin
2017-02-20 14:44:22 +08:00
我这边现在无法访问, 403
supermaxisme
2017-02-20 15:05:00 +08:00
http://m2.music.126.net/RMJR7wDullRqppBk8dhLow==/3435973841155597.mp3

可以直接访问 并且 IDM 弹出来下载的对话框了
danili
2017-02-20 16:47:11 +08:00
404 Not Found
ihuzhou
2017-02-20 18:00:48 +08:00
默默关注这个问题,搞了好久没搞出来
onsala
2017-02-20 19:57:06 +08:00
@ihuzhou 上面的代码现在是正确的,已经可以正确的获取到歌曲的地址了。
fhefh
2017-02-23 15:52:28 +08:00
nice mark
mingyun
2017-02-26 09:10:32 +08:00
请问下 dfsid 怎么获取的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/341662

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX