声明:我买了emby的正版!5人车,永久只有150!!!
Emby的一些问题:
Emby作为一款不错的Self-hosted播放器/媒体服务项目,我用了一段时间。这期间也尝试过开源版本的Jellyfin,和付费成为emby的会员。但是Emby的价格和服务让我感到不值,某些定价更让人困惑:Emby会员一个月$5,终身会员$120,这个价格已经比很多大型商业软件还要昂贵了。而Emby却大量使用开源工具,软件bug也多,收这个价格实在没有道理。另外就是Android客户端至少可以看视频,iOS客户端竟然要$5来激活,激活了也仅仅是能看视频而已,这个iOS的激活还不能带给服务器(服务器的激活可以带给iOS)。如此种种,让我想到了干脆破解算了。我支持开源软件,但是开发者不能这么瞎搞。如果iOS客户端能看视频,但某些高级功能花钱解锁,这还说得过去。要么就一视同仁,安卓端也收费。
破解思路:
很简单,Emby服务器、客户端都向 mb3admin.com
发送客户的key,获取返回的会员有效期等状态。搞一个假的验证服务器。
如果你只是要随便看看视频,那不需要再往下看了:
服务器端直接用别人破解好的docker:lovechen/embyserver 或者 xinjiawei1/emby_unlockd
配置兼容官方,只要把image换了,数据库等可以继承。
iOS端使用Surge、Shadowrocket等软件破解,方法见这篇文章。基本常见的代理软件就能实现。
Android端本来就不用交钱,凑合看看吧。
而我的要求是,在全平台(PC,Mac,Android,iOS,Web)和服务器实现免费使用会员功能,且不依赖于特定的软件(比如Shadowrocket)。
所以思路就是先搭建一个自己的认证服务器,然后所有设备统一找这个认证服务器认证。
需求:
1,对DNS有控制权
2,有一台http服务器(以nginx为例),内外网均可。
比如 ,在adguard home,或路由器上,直接解析DNS , mb3admin.com 到晖服务器 192.168.x.xxx
构造认证服务器 mb3admin.com
1,建立一个Nginx 反代服务器,如果没有Internet上的VPS,可以用内网的任意一台虚拟机。当然最简单的就是和Emby服务器共用一台机器,使用同一个Nginx反代就行了。
2,在你控制的DNS上,把 mb3admin.com
指向这台机器的IP。
3,nginx新建一个反向代理,主机名字就是 mb3admin.com,具体代到哪里都无所谓(反正又不是真的代),配置文件添加以下内容:
location /admin/service/registration/validateDevice { default_type application/json; return 200 '{"cacheExpirationDays": 3650,"message": "Device Valid","resultCode": "GOOD"}'; } location /admin/service/registration/validate { default_type application/json; return 200 '{"featId":"","registered":true,"expDate":"2099-01-01","key":""}'; } location /admin/service/registration/getStatus { default_type application/json; return 200 '{"deviceStatus":"","planType":"Lifetime","subscriptions":{}}'; } location /admin/service/appstore/register { default_type application/json; return 200 '{"featId": "","registered": true,"expDate": "2099-01-01","key": ""}'; } location /emby/Plugins/SecurityInfo { default_type application/json; return 200 '{SupporterKey: "", IsMBSupporter: true}'; } add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers *; add_header Access-Control-Allow-Method *; add_header Access-Control-Allow-Credentials true;
如果是群晖,只需要用webstation增加一个网站,
然后,在晖NGINX中配置,如上代码到 /usr/local/etc/nginx/conf.d/刚刚建的网站UUID/user.conf 中,注意 UUID自行尝试。
先不要选择证书,先用http测试一遍:
http://mb3admin.com/admin/service/registration/validateDevice
返回 如下内容,就算成功了:
{"cacheExpirationDays": 3650,"message": "Device Valid","resultCode": "GOOD"}
说明配置正确了。服务器返回了伪造的会员信息,剩余3650天。
*CORS 经过实测,仅为iOS设备要求,如果不需要iOS使用,可以不加CORS。
配置服务器CA、自签名证书
SSL/TLS的规则保证了我们无法获得真正的 mb3admin.com
的证书。因此我们需要自签发一套证书,并在设备上手工添加这些证书。由于当前各类设备的安全设置,通常不允许添加自签名证书,因此我们需要添加一个私有CA,用私有CA签发一套证书。
构建CA!
在晖中创建自签证书,并配置mb3admin.com使用该证书。
导出根证书,并安装到手机、电脑、TV上面,
其中,syno-ca-cert.pem 为根证书,可改名为mb3admin.com.crt。然后上传到手机或电脑,TV上安装即可。
验证
iOS
进入iOS客户端后,点击会员验证,如果不出来就关掉重新开一下APP。
注意这个验证有效期很长,就算离开了本局域网还能用很久。如果登出会要求重新验证。
Android同上,解锁后可以用所有功能,包括歌曲播放和歌词显示。
Win、Mac
Win和Mac 都要在系统里安装完证书后(Mac安装根证书方法不赘述),打开客户端验证一遍。客户端我用的是emby在github上的安装包,不是官网的安装程序。
Web
Web的权限,在PC或Mac等桌面环境下是跟随服务器的,服务器有会员权限,Web就有会员权限。
Web在iOS上(只要User-Agent为iOS)就必须额外要会员(神经病),要么改掉UA,要么也在同一个局域网里一起被破解掉。
注意Web的Session有时限,被退出了,会要求再要验证会员,不过反正都在这一局域网了,还怕它个啥…
服务器的破解
因为现在大多数情况都是用容器安装了,所以破解起来比较麻烦,大多数情况可以使用上面提到的两款已经破解好的容器。如果怕被删了,可以commit到自己的docker账号里哦。
如果一定要自己破解容器,先下载官方容器。
思路1,替换掉官方的某些文件,直接指向一个假的验证服务器(都不需要证书)。
思路2,进到容器里,添加根证书,修改DNS,出来,commit容器,上传保存,再开。
也可以用bind挂载破解文件进容器,参考这篇
这样就实现了内网中全平台的Emby开心版,类似于内网中的KMS服务器一样。设备在获取了有效期(比如999天或者3650天)后,应该不会再向服务器请求有效期,除非登出了emby播放服务器。除了Web需要保持在内网环境中,其他设备也可以在其他地方正常使用。
iOS必须在nginx中加入CORS设定。
参考资料:
使用 Docker Compose 编排整合 emby 伪站授权
tiagofreire-pt/self-signed-certificate-with-custom-ca-for-home-assistant.md
Nginx配置跨域请求 Access-Control-Allow-Origin *