V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
onsala
V2EX  ›  Python

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

  •  
  •   onsala · 2017-02-20 08:59:26 +08:00 · 9916 次点击
    这是一个创建于 2835 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在学习爬网易云的歌曲,在获取单首歌曲的播放地址的时候遇到了一点问题,拜托 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

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

    第 1 条附言  ·  2017-02-20 10:34:47 +08:00
    @yingos 问题解决了, http://m2.music.126.net/RMJR7wDullRqppBk8dhLow==/3435973841155597.mp3 可以正确访问,昨天可能是浏览器配置有一点问题。
    18 条回复    2017-02-26 09:10:32 +08:00
    zhihaofans
        1
    zhihaofans  
       2017-02-20 09:06:10 +08:00 via Android
    403 有可能是需要什么认证 key 或者登陆
    ss098
        2
    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
        3
    onsala  
    OP
       2017-02-20 09:27:22 +08:00
    @zhihaofans 应该不是登录的原因,因为 403 是到浏览器里面访问得到的,在浏览器里面我已经登录好了。感觉可能是 url 解析的不对,但是[https://github.com/darknessomi/musicbox/blob/master/NEMbox/api.py](musicbox)好像就是我这样做的,不知道我哪里理解错了?
    hcwhan
        4
    hcwhan  
       2017-02-20 09:49:21 +08:00 via iPhone
    抓包比较一下两个 http head 的区别应该就知道了
    hcwhan
        5
    hcwhan  
       2017-02-20 09:53:25 +08:00 via iPhone
    看你的秒速 可能是 User-Agent 字段有判断
    hcwhan
        6
    hcwhan  
       2017-02-20 09:55:04 +08:00 via iPhone
    问题看错了 请忽略我的回答😂😂😂
    DlYgod
        7
    DlYgod  
       2017-02-20 09:55:51 +08:00
    crytis
        8
    crytis  
       2017-02-20 10:16:05 +08:00 via iPhone
    你下面的 url 浏览器直接访问也不行
    yingos
        9
    yingos  
       2017-02-20 10:18:40 +08:00
    cherrypick
        10
    cherrypick  
       2017-02-20 13:58:55 +08:00
    我也可以直接访问,不会有 403
    yivanus
        11
    yivanus  
       2017-02-20 14:26:58 +08:00
    我这边无法访问。
    czvatqin
        12
    czvatqin  
       2017-02-20 14:44:22 +08:00
    我这边现在无法访问, 403
    supermaxisme
        13
    supermaxisme  
       2017-02-20 15:05:00 +08:00
    http://m2.music.126.net/RMJR7wDullRqppBk8dhLow==/3435973841155597.mp3

    可以直接访问 并且 IDM 弹出来下载的对话框了
    danili
        14
    danili  
       2017-02-20 16:47:11 +08:00
    404 Not Found
    ihuzhou
        15
    ihuzhou  
       2017-02-20 18:00:48 +08:00
    默默关注这个问题,搞了好久没搞出来
    onsala
        16
    onsala  
    OP
       2017-02-20 19:57:06 +08:00
    @ihuzhou 上面的代码现在是正确的,已经可以正确的获取到歌曲的地址了。
    fhefh
        17
    fhefh  
       2017-02-23 15:52:28 +08:00
    nice mark
    mingyun
        18
    mingyun  
       2017-02-26 09:10:32 +08:00
    请问下 dfsid 怎么获取的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5642 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 07:23 · PVG 15:23 · LAX 23:23 · JFK 02:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.