请选择 进入手机版 | 继续访问电脑版
  • 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

游客您好
第三方账号登陆
  • 点击联系客服

    在线时间:8:00-16:00

    客服电话

    400-123-4567

    电子邮件

    admin@4x45.com
  • 星点互联APP

    随时掌握企业动态

  • 扫描二维码

    关注星点微信公众号

Lv.9 官方人员
2号会员,82活跃度,2020/09/09 加入学习
  • 40发帖
  • 40主题
  • 1关注
  • 5粉丝
这个人很懒,什么也没有留下。
  • 论坛元老

    为论坛做出突出贡献的会员
推荐课程更多
课堂交流更多

[python] 喜马拉雅加密算法分析

[复制链接]
民间小编 发表于 2020-10-6 02:30:13 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
所有源码我放到了 蓝奏云,所有人可以免费下载,知识用来共享:https://www.lanzoux.com/ibiWDg4gc2f
download.py为主入口文件,其中有两个参数你可能需要调节
一个是同时下载个数,一个是保存路径,剩下的需要调节最下面的整本书的albumId了,另外其中我加入了转换mp3格式的函数,不过我默认注释掉了,如果想使用可以配置ffmpeg到环境变量中去
前言
这几天一直听听评书,发现喜马拉雅上的资源很多,不过很可惜都是付费的,所以我冲了一个月会员,简单写个爬虫,爬下来几10部,够我一年听的了
开始分析
打开chrome控制台,点击播放,最先拿到的一个接口就是
a8cedb4a59f9fbf564b03d0e3b5e859.png

这里,我充会员了,所以可以直接用浏览器中打开这个url,其中有用的字段有了只有几个 seed和 fileId两个通过js加密算法计算出 m4a的路径,并拼接主域名,然后 ep 经过另一个加密算法得到url的访问参数buy_key sign token timestamp,最后将它们拼接到一起才是一个完整的 音频的url
两个js加密算法
经过我调试我分别找到了这两个加密的 js算法
  • 计算 m4a的路径js算法:用node跑一下可以得到 m4a的路径
    输出:
  • 通过ep来计算url参数的js算法:这段js比较复杂,调试的时候坑死我了,不在同一个地方,导致我来回复制,最终于才把这个算法整理到这一个js文件中,依然用 node跑一下,输出:
这几个参数分别对应的是:buy_key sign token timestamp

有了这了两个js算法就可以完全的解析 这个接口返回的参数了。

python 代码仿写加密算法
计算 m4a路径加密算法


通过ep来计算url参数的算法:


这个接口到此为止才算是完全可以解析。

免费接口分析
如果你没有充会员,免费的音频还是可以听的,我找到一个免费音频的接口



返回值:


这个接口还是比较简单的,返回值里面直接包含 m4a音频地址,没有加密措施,另外 url中的数字依然是 trackId,值得一提的是免费音频的trackId不能用在付费接口,我猜测是版本迭代的问题,或者是客户端不同的问题,因为当时我不只是分析网页的接口,还抓包了电脑客户端的接口,具体对应的是网页还是客户端我也忘了。

解析整本书的接口
喜马拉雅接口主要关键的有两个参数,一个是前面我说的 trackId 另一个就是albumId,trackId 对应唯一的一个音频,而 albumId 对应的是唯一的一本书。



返回值中就有每一集的trackId,其实喜马拉雅还有很多其他接口,搜索接口等等,一般的其他的接口需要在请求头中加入xm-sign,我也写了xm-sign的计算方法:

还有很多其他接口,我就懒得说了,因为我不想写了,有了这些就可以满足我下载整本书的需求了
最终整合
我写了 喜马拉雅 扫码登陆的脚本,因为我不能每次都去复制浏览器中的 cookie,这种重复劳动太傻了
简单的一个扫码登陆脚本,如果cookie自动保存成文件,下次使用的时候直接调用:
就能在保持登陆状态下,访问各种接口




点评回复

使用道具 举报

精彩评论1

事与愿违 发表于 2020-10-9 21:45:51 | 显示全部楼层
感谢分享
点评回复

使用道具 举报

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

本版积分规则

客服QQ:1403590444

24x7小时免费咨询

Powered by folk hacker Copyright © 2014-2021 民间安全 (原民间黑客联盟) ( 蒙ICP备20002614号 )