Magisk 搭配 UnblockNeteaseMusic 无感知解锁网易云音乐客户端变灰歌曲
Fanx / 2020-03-14 / Misc / 阅读量 7540

前言

这次使用的是服务端部署 UnblockNeteaseMusic + 本地 iptables 转发流量的实现方法。
原理上来讲是可以做到本地部署的,这样的话可以做到无成本,因为空余时间没那么多,就没去研究。
具体可以参考 https://github.com/Flysky12138/UnblockNeteaseMusic-Android 项目。

准备

  • 一台位于大陆的服务器(必须是国内的,因为很多歌曲都只是买了大陆版权)

    其实国外的服务器也可以,UnblockNeteaseMusic 提供了使用上游代理的方法,具体请查阅官方食用指南。
  • 一台已 root 并安装了 Magisk 的手机
  • 将网易云音乐移出 Magisk Hide 名单(未设置请忽略)

    如果网易云音乐客户端在 Magisk Hide 名单内会导致证书不生效

    服务端部署 UnblockNeteaseMusic

    这个应该不用多说了,https://github.com/nondanee/UnblockNeteaseMusic 官方搭建方法已经写的很明白了,不过需要注意的是必须开启 HTTPS 并导入证书(接下来会讲到),否则会导致网易云音乐客户端个人页面和登录无法正常使用

Magisk 模块编写

这个的话我已经写好了,改一下配置即可
模块模板下载链接:https://rushb.lanzous.com/icgsqkh 密码: 6e01

修改 iptables 脚本

编辑 post-fs-data.sh 文件

http=127.0.0.1:8080 # 这里修改成你的服务器地址:UnblockNeteaseMusic http 端口
https=127.0.0.1:8081 # 这里修改成你的服务器地址:UnblockNeteaseMusic https 端口
re=$(grep -m1 -i "com.netease.cloudmusic" /data/system/packages.list | cut -d' ' -f2)
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $re -m tcp --dport 80  -j DNAT --to-destination $http
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $re -m tcp --dport 443 -j DNAT --to-destination $https

修改证书

我们知道,如果应用的 Target API 在 24 以上的话,应用就只会信任系统证书而不会信任用户证书,而刚好我们是 Magisk 模块,就可以顺便把系统证书也写进去
打开文件夹 system\etc\security\cacerts 我们以 UnblockNeteaseMusic 证书为例,他的证书为 ca.crt
我们把它下载下来,转换为pem格式:

openssl x509 -in ca.crt -out ca.pem

以hash方式重命名文件(Android 系统要求)

openssl x509 -subject_hash_old -in ca.pem |head -1

得到证书的 hash 之后将证书 ca.pem 重命名为 557de9dd.0 放入模块的 system\etc\security\cacerts 文件夹,再把模块打包即可
模块的其他信息可在 module.prop 修改

如果是你自己的证书也可以通过此方法算出 hash 进行替换

效果图




系统证书正常



解锁网易云音乐客户端变灰歌曲正常

Changelog

20200510

  • 将 iptables 配置从 post-fs-data.sh 移动到 service.sh
  • 去除无用配置

参考

https://github.com/nondanee/UnblockNeteaseMusic
https://github.com/Flysky12138/UnblockNeteaseMusic-Android

8 + 7 =
5 评论
    wukiChrome 107Android
    2022年11月22日 回复

    大佬 iptables好像不支持使用域名
    iptables v1.8.7 (legacy): Bad IP address "xxx.xxx"
    但我的服务器是动态ip的 不可能每次ip变更都去修改配置 所以大佬可以改一改脚本吗 比如说在运行ipstables前跑一次ping 让ipstables使用ping出来的ip吗

      FanxSafari 16iPhone
      2022年11月24日 回复

      @wuki iptables确实不支持域名,且启动比网络早,你可以写一个延时或者检测网络后重新写iptables,我已经不用Android了,所以没办法帮您测试了

    harryChrome 83Windows 10 / 11
    2020年06月06日 回复

    请问一下openssl使用hash重命名的步骤:openssl x509 -subject_hash_old -in ca.pem |head -1
    head报错的原因是什么

    tcKUqs.jpg

      FanxEdge Chromium 83Windows 10 / 11
      2020年06月08日 回复

      @harry 直接在 shell 运行 openssl x509 -subject_hash_old -in ca.pem |head -1 而不是在 openssl 内运行

    cherryChrome 80Windows 10 / 11
    2020年03月18日 回复

    666