去年入了蜗牛B款单网口,装好黑群晖之后就利用docker搭建了Jellyfin服务器来管理Nas上的电影,也开启了硬件转码。但是Jellyfin对于硬解的转码效率,有时候还真的是一言难尽。于是一直想转Emby,入正之后又想给小伙伴发点福利,但由于Emby授权政策,无法实现。于是尝试了一下白嫖。
前期分析
通过在虚拟机里安装Emby服务端,并通过在服务端后台页面进行调试和抓包发现:当我们使用、注册会员功能时,我们的客户端会向mb3admin.com发送带有设备id和激活码的请求,服务器返回设备已激活的信息,客户端收到信息后启用会员功能,这也就是我们在没有网络的情况下无法使用离线转码等会员功能的原因。
通过抓包,我们发现服务端主要会向以下几个地址发送带有服务器 ID、客户端 ID 等其他客户端信息的请求:
mb3admin.com/admin/service/registration/getStatus mb3admin.com/admin/service/registration/validate mb3admin.com/admin/service/registration/validateDevice
分别会返回
{"deviceStatus":"","planType":"","subscriptions":[]} {"featId":"","registered":true,"expDate":"2099-01-01","key":""} {"cacheExpirationDays": 7,"message": "Device Valid","resultCode": "GOOD"}
对应的是用户的会员状态,会员过期日期,会员设备验证。
白嫖思路
因为服务器端返回的信息都是明文,我们只需要让客户端请求后得到分析得出的返回即可。所以我们有两种思路:
1.中间人攻击,因为请求的链接使用了https,所以重放攻击我是做不了了,中间人攻击似乎可行。
2做一个假的mb3admin.com站点,并进行DNS劫持,劫持请求后直接返回验证信息。
实战操作
使用nginx配置一个站点。配置文件实例:
server { listen 443 ssl http2 ; server_name mb3admin.com; ssl_certificate '$/path/to/cert'; ssl_certificate_key '$/path/to/key'; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_session_cache 'shared:SSL:32k'; ssl_session_timeout '64m'; 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; location /admin/service/registration/validateDevice { default_type application/json; return 200 '{"cacheExpirationDays": 365,"message": "Device Valid (limit not checked)","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":0,"planType":"Lifetime","subscriptions":[]}'; } }
其中证书的签发可以使用openssl进行,注意保存CA证书。如果对openssl操作不熟悉,可以使用:国密线上证书签发,注意勾选自动包含CA证书链,证书有效天数填入824天(这里是为了兼容辣鸡iOS)。
注意,这里我们使用的站点劫持的方式是包含https的。所以如果需要正常访问,我们必须把生成的CA证书导入你使用emby的系统。
Windows系统emby客户端:导入到系统的“收信人的根证书颁发机构”。
Debian、Ubuntu 系统:
cp /path/to/ca.crt /usr/share/ca-certificates/mozilla/mb3admin.com.crt#添加CA证书到CA证书目录 cat /path/to/ca.crt >> /etc/ssl/certs/ca-certificates.crt#为了保险,在系统默认CA后添加这个CA的内容,不一定需要 update-ca-certificates#更新证书
更新证书。对于服务端还需在/opt/emby-server/etc/ssl/certs/ca-certificates.crt进行一次操作
cat /path/to/ca.crt >> /opt/emby-server/etc/ssl/certs/ca-certificates.crt
对于使用docker安装emby服务端的,还需要使用docker exec在docker内修改 /etc/ssl/certs/ca-certificates.crt,方法同上。
最后进行的是对 mb3admin.com 的DNS劫持。使用hosts文件进行或者在dnsmasq上进行也可以。建议使用hosts文件劫持,因为 www.mb3admin.com 这个地址还要用来更新插件呢。
写在最后
本文禁止以任何方式进行转载。
本人已购买正版Emby,以上内容仅供研究学习。若读者因为本文产生任何法律纠纷,与作者无关。