Emby全平台开心版、认证服务器设置方法

声明:我买了emby的正版,虽然只有一个月。

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为例),内外网均可。

构造认证服务器 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;

如果你是全容器化管理,那就用nginx-proxy-manager,新建一个Host,随便代理到哪里,最后在Custom里面输入这些内容。

Nginx-Proxy-Manager 添加自定义字段

先不要选择证书,先用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

需要一台linux主机,通常情况下可以使用emby本身的服务器,如果是NAS机器可能要 进入到”终端“。Mac或者微软系统需要安装openssl库,建议直接虚拟机安装一套Ubuntu一次性使用。

openssl genrsa -des3 -out rootCA.key 2048
#建立CA私钥,之后要求输入密码,记住密码。我这里设置为123456。
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem
#建立CA证书 有效期 3650天。注意:iOS不允许有效期超过825天。如果是iOS设备,应为:
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 824 -out rootCA.pem
#iOS设备,有效期824天
openssl req -new -sha256 -nodes -out mb3admin.csr -newkey rsa:2048 -keyout mb3admin.key -config <(cat rootCA.csr.cnf)
#生成 mb3admin.com的CSR和私钥,使用 rootCA.csr.cnf 配置
openssl x509 -req -in mb3admin.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out mb3admin.crt -days 824 -sha256 -extfile v3.ext
#生成 mb3admin.com的证书,使用 v3.ext 中的配置指定服务器证书用途

其中, rootCA.scr.cnf 为CSR配置文件,内容为:

# rootCA.csr.cnf
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=US
ST=CA
L=LA
O=fuckemby
OU=fuckemby
[email protected]
CN = *.mb3admin.com

v3.ext 为服务器证书用途配置文件,内容为:

# v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
extendedKeyUsage=serverAuth
[alt_names]
DNS.1 = mb3admin.com

所有东西放在同一个目录里,操作下来,得到文件

rootCA.key, rootCA.pem, mb3admin.key, mb3admin.csr, mb3admin.crt

其中 mb3admin.key, mb3admin.csr 为我们使用自己的rootCA 制作的假的mb3admin.com的证书和私钥。

rootCA.pem 为rootCA的根证书,这里我给rootCA的根起名字叫”test“。

在Nginx中安装证书

mb3admin.key, mb3admin.csr 添加到之前为mb3admin.com 设置的反代里。

接下来再各个设备中安装CA根证书。

Windows需要安装到受信任的根证书颁发机构

iOS需要添加为配置文件(办法是把rootCA.pem想办法让手机去下载,或者通过邮件附件发给手机,然后会出现添加配置文件的说明),按照说明添加配置文件,添加证书信任。

Android同上,使用Android证书管理器加载证书并安装证书,信任。

安装后使用https协议访问刚才的API查询:

https://mb3admin.com/admin/service/registration/validateDevice

Windows下锁头正常
iOS下也正常了,说明证书安装完毕。

ping一下服务器:

C:\Users\user>ping mb3admin.com

正在 Ping mb3admin.com [192.168.1.200] 具有 32 字节的数据:
来自 192.168.1.200 的回复: 字节=32 时间<1ms TTL=64

这说明我们已经通过虚假的DNS把mb3admin.com成功指向了虚假的服务器,并用假证书成功完成了握手。

(知道为什么一定要吊销CNNIC的根证书了吗?——)

验证

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

群辉emby套件版服务端一点五键白嫖

安装Emby并白嫖

Emby 客户端破解

Emby Premiere破解思路

Nginx配置跨域请求 Access-Control-Allow-Origin *

发表回复

您的电子邮箱地址不会被公开。