Emby 客户端的Emby Premiere解锁
环境:
Client:
IOS Emby客户端
Server
群辉Emby官方套件
一台搭建在内网的ubuntu虚拟机
原理
Emby Premiere激活原理
Emby Premiere在任一客户端的解锁均是在线的请求验证,通过携带授权Key向mb3admin.com请求后获取的多个http请求的返回结果来判断是否是合法的授权用户
破解原理
通过修改路由器host的方法来做到将域名mb3admin.com劫持到自身的虚拟机上后并修改为认证成功的返回结果,直接进行授权破解。
破解步骤
虚拟机IP:192.168.50.65
修改host
在host中添加一条记录阻止dns定向
mb3admin.com 192.168.50.65
配置nginx
在虚拟机上设置一个mb3admin.com域名的nginx代理服务,主要包含如下代码
server
{
listen 80;
server_name mb3admin.com;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/mb3admin.com;
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":"123"}';
}
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":{}}';
}
}
测试Http的结果
打开网址 http://admin/service/registration/validateDevice
如果返回值的结果为如下值,则继续
{"cacheExpirationDays": 7,"message": "Device Valid","resultCode": "GOOD"}
SSL自签证书以及自颁发CA
由于验证授权时所需的请求是https,所以http无法满足我们破解的需要,我们需要给它做一个自签的ssl证书以及安装配套的CA来让客户端能顺利解析https请求。
使用CloudFlare的工具生成SSL证书和CA证书
下载地址:https://github.com/cloudflare/cfssl/releases
只需要下载其中的cfssl和cfssljson即可
注意,范例中使用的是windows的工具来生成的ssl证书,因此下载cfssl_version_number.exe和cfssljson_version_number.exe,如果用的其他平台请注意下载的工具
步骤一
首先生成CA证书和CSR的配置文件
命令如下:
cfssl print-defaults config > ca-config.json
cfssl print-defaults csr > ca-csr.json
注意生成的文件有可能存在编码问题,如果存在问题,请先将生成的文件的编码设置为utf8
修改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
将SSL证书颁给域名
四个步骤均成功执行后会得到四个文件
1、ca.pem
2、ca-key.pem
3、emby.pem
4、emby-key.pem
我们用的到的是1、3和4号文件
其中3和4号文件将作为ssl的证书
其将放置于nginx中,代码为如下所示
注意,仅包含nginx中的ssl相关的配置,非全部内容
server
{
listen 443 ssl http2;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
ssl_certificate /www/server/panel/vhost/cert/mb3admin.com/emby.pem;
ssl_certificate_key /www/server/panel/vhost/cert/mb3admin.com/emby-key.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#SSL-END
}
CA证书安装
以群辉为例,DSM使用root登录SSH,进入路径/var/db/ca-certificates/手动创建一个 Faker_CA.crt 文件,把ca.pem文件中的内容粘贴进去,然后执行update-ca-certificates.sh更新CA证书
以IOS为例,我们需要同样的建立一个Faker_CA.crt文件并把ca.pem文件中的内容粘贴进去,通过发送邮件的形式将邮件寄出,然后在手机上使用Safari浏览器登录邮箱后并打开邮箱的附件,将Faker_CA.crt下载后会提示安装描述文件
安装后,进入到手机设置>通用>关于本机>证书信任设置,然后将安装的FakeCA证书勾选为信任
测试Https的结果
打开网址 https://admin/service/registration/validateDevice
如果返回值的结果为如下值,则继续
{"cacheExpirationDays": 7,"message": "Device Valid","resultCode": "GOOD"}
破解完成
打开Emby客户端,此时即可发现已经成功的拿到了金标