前一阵子弄了个AIO的小主机,然后吧pppoe的拨号放在上面,还装了个黑群晖,上面放了一些动画片。然后打算用Emby做媒体库,Emby的话界面比较好看,另外元数据处理器比较多,刮削完之后看着比较赏心悦目。
安装配置完之后看着还比较舒服,用浏览器也可以播放,Android也没啥问题,但是到了IOS设备上官方的APP就会提示需要付费,这还挺坑爹的。另外一点就是硬件加速,AIO性能本身就羸弱,而且是被动散热,软件解码1080P的视频都会跑满CPU,设备会非常热。
所以得想办法弄一下Emby Premiere,一是解决IOS设备播放的问题,二是开启Emby的硬件加速。
目前来说,破解Emby授权原理非常简单,Emby客户端在启动时会向mb3admin.com
发送鉴权请求,那么思路就是建立伪站,并在请求时重定向请求至伪站,就可以打到欺骗Emby客户端的效果。
这种方式的优势比较明显:
1.支持全部种类的客户端
2.支持更新至官方最新版(假如官方不修改授权验证方式)
3.使用官方客户端和服务端,避免有坏人提供带有后门的修改版程序
但是这种方式也有一些缺点:
1.需要有一台可以部署HTTP(s)的服务器,如果Emby在互联网上运行,那么伪站服务器也需要公网访问
2.需要自签名SSL证书,并且需要安装(信任)自签CA,如果使用不当,会增加系统被入侵的风险
说完优缺点,那么我们就开始实施。首先准备一台伪站用的服务器,我推荐Nginx,配置很简单。但是由于我的服务器安装的是LiteSpeed,所以我以LShttpd进行演示。
Nginx只需要改一下配置文件,在Server字段中增加以下代码就行。
location /admin/service/registration/validateDevice { 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; default_type application/json; return 200 '{"cacheExpirationDays": 7,"message": "Device Valid","resultCode": "GOOD"}'; } location /admin/service/registration/validate { 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; default_type application/json; return 200 '{"featId":"","registered":true,"expDate":"2099-01-01","key":""}'; } location /admin/service/registration/getStatus { 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; default_type application/json; return 200 '{"deviceStatus":"","planType":"","subscriptions":{}}'; }
对于LShttpd,我们需要手动在站点目录内创建/admin/service/registration
这三级目录,并且创建以下三个文件,内容和Nginx配置中的返回值一样
文件validateDevice
{"cacheExpirationDays": 7,"message": "Device Valid","resultCode": "GOOD"}
文件validate
{"featId":"","registered":true,"expDate":"2099-01-01","key":""}
文件getStatus
{"deviceStatus":"","planType":"","subscriptions":{}}
创建完成后,需要手动修改.htaccess,增加CORS Header
Header add Access-Control-Allow-Origin *; Header add Access-Control-Allow-Headers *; Header add Access-Control-Allow-Method *; Header add Access-Control-Allow-Credentials true;
都配置好之后访问伪站试一下https://mb3admin.com/admin/service/registration/validateDevice
,应该是可以访问到刚才创建的文件。
考虑到可能有不会自建CA并签发证书的,这里简单写一下,你可以使用openssl也可以是用别的工具,我用的是cloudflare开源的CFSSL工具。
下载地址:https://github.com/cloudflare/cfssl/releases
我们只用到两个文件,分别是cfssl
和cfssljson
首先生成CA证书的配置文件和CSR,通过下面的命令生成默认的然后进行修改就可以了
cfssl print-defaults config > ca-config.json
cfssl print-defaults csr > ca-csr.json
一般来说只需要修改ca-csr.json就可以,我这里贴一个我用的,你们按需修改。
{ "CN": "Faker CA", "hosts": [], "key": { "algo": "ecdsa", "size": 256 }, "names": [ { "C": "CN", "ST": "SH", "L": "Shanghai", "O": "Fake Co., Ltd.", "OU": "Technology Service Center" } ] }
执行命令生成CA证书以及对应的私钥
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
复制一份ca-csr.json,命名为emby-csr.json并进行修改,这个文件用于使用自建CA签发证书
{ "CN": "mb3admin.com", "hosts": [ "mb3admin.com", "*.mb3admin.com" ], "key": { "algo": "ecdsa", "size": 256 }, "names": [ { "C": "FR", "ST": "Reims", "L": "Reims" } ] }
执行命令签发证书
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www emby-csr.json | cfssljson -bare emby
我们需要吧生成的证书文件,私钥文件保存分别是 ca.pem, ca-key.pem, emby.pem, emby-key.pem
emby对于的两个文件需要安装到HTTP服务器上,ca.pem需要添加到对应设备的信任证书库中,Windows一般在对应浏览器的设置 -> 隐私和安全 -> 管理证书中,具体请根据你的浏览器去搜索,
Linux这里只讲Debian11 和 DSM(群晖)
DSM使用root登录SSH,证书存放路径在/var/db/ca-certificates/
进入该目录手动创建一个 Faker_CA.crt 文件,吧ca.pem文件中的内容粘贴进去,然后执行update-ca-certificates.sh更新CA证书
Debian11使用root登录SSH,证书存放路径在/usr/share/ca-certificates/
进入该目录手动创建一个Faker_CA.crt 文件,吧ca.pem文件中的内容粘贴进去,然后执行dpkg-reconfigure ca-certificates并在对应的界面选择上你新建的证书
处理完成后,在hosts文件,或是路由器的DNS解析服务中添加重定向,将mb3admin.com
重定向到你创建的服务器。然后curl看一下是否能正常返回数据,正常返回数据就可以了。然后进入Emby服务器看一下Emby Premiere是不是已经激活了。