学习 Emby 解锁及优化

Emby Plugin

网上很多白嫖 Emby 的资源都失效了,不过教程还是挺多,主要参考了文章「重新学习并解锁emby」,文章讲的不是很详细,在此分享下折腾的心得。

本文不提供任何破解文件下载,仅作分享交流,请支持正版

起因

解锁的方式其实分两类,一种是改客户端,一种是改服务端。最终原理一样,都是搭建仿冒认证服务器,客户端访问伪服务器拿到授权信息。

  • 改客户端:有了伪服务器的前提下(自行搜索「搭建 EMBY 伪验证服务」),通过改 hosts 的方式将 mb3admin.com 的 ip 解析到伪服务器,同时需要伪服务器和客户端都需要安装自签名证书。
  • 改服务端:修改服务端源文件,将默认的认证服务器 mb3admin.com 地址直接改成伪服务器,这样就不需要在每个客户端安装自签名证书了。

起初有大神提供了可以白嫖的伪认证服务 crackemby.neko.re 以及 crackemby.mb6.top,但后来都没能长久坚持下去,不过大神还是留下了教程,目前直接访问 crackemby.mb6.top 就能看到教程。

因为改服务端的方式可以一劳永逸,本文也是主要分享这种方式的折腾过程。本人是用于 Window 服务端,其他端比如 Linux 或者群晖应该步骤也差不多。

伪认证服务

因为改服务端的方案不需要自签名证书,所以把服务部署到 Serverless 平台上是一个不错的选择。上面提到的大神提供了详细的补丁文件,其中一个文件是「emby伪站搭建与去更新」,里面提供了通过 Cloudflare Worker(不懂的请先自行学习) 的方式快速部署一个伪认证服务,但是代码需要改动,以下代码是改后可以直接复制使用的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// validatedevice
addEventListener("fetch", (event) => {
const { origin, pathname: path, search } = new URL(event.request.url);

if (path.endsWith("/admin/service/registration/validateDevice")) {
return event.respondWith(handleRequest1(event.request));
}

if (path.endsWith("/admin/service/registration/getStatus")) {
return event.respondWith(handleRequest3(event.request));
}

if (path.endsWith("/admin/service/registration/validate")) {
return event.respondWith(handleRequest2(event.request));
}
});

async function handleRequest1(request) {
const files = '{"cacheExpirationDays": 365,"message": "Device Valid","resultCode": "GOOD"}';
return new Response(files, {
headers: {
"content-type": "application/json; charset=utf-8",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "*",
"Access-Control-Allow-Method": "*",
"Access-Control-Allow-Credentials": "true",
},
});
}

// validate
async function handleRequest2(request) {
const files = '{"featId":"","registered":true,"expDate":"2099-01-01","key":""}';
return new Response(files, {
headers: {
"content-type": "application/json; charset=utf-8",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "*",
"Access-Control-Allow-Method": "*",
"Access-Control-Allow-Credentials": "true",
},
});
}

// getstatus
async function handleRequest3(request) {
const files = '{"deviceStatus":"0","planType":"Lifetime","subscriptions":{}}';
return new Response(files, {
headers: {
"content-type": "application/json; charset=utf-8",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "*",
"Access-Control-Allow-Method": "*",
"Access-Control-Allow-Credentials": "true",
},
});
}

部署后将官方的 mb3admin.com 地址换成你自己部署的地址即可。举个例子,你部署好的地址是 emby.user.workers.dev,那么你的 Emby 服务器最终的验证请求之一将发送到 https://emby.user.workers.dev/admin/service/registration/validateDevice

修改服务端文件

这一步就是把官方的 mb3admin.com 换成自己的地址 emby.user.workers.dev

前面说的的文件「emby伪站搭建与去更新」中有步骤图解,使用到的工具是 dnSpy。打开软件,清空已打开的文件,将要修改的 dll 文件拖进去,按步骤图修改内容,主要就是修改域名。其中有一步需要提取保存 js 文件,修改后放回去,删除原来的 js 再保存,注意删除的 js 不要删错了,可以搜索内容确认一下。

验证成功

大神的网盘里提供了修改后的 dll 文件,按不同的 Emby 版本提供的。但里面的 dll 文件都是替换成了服务器 crackemby.mb6.top,这个服务只能试用 15 天 😓。

我们只是用这些文件查漏补缺,跟前面自己替换出来的 dll 文件合并,然后放到 NAS 中开始运行。

我是 Window 服务端,发现替换后服务无法启动没反应。排查发现是 Emby.Server.Implementations.dll 文件导致的,用大神懒人包里的 dll 就能启动。于是,将大神网盘里的懒人包解压出来的 Emby.Server.Implementations.dll 放到 dnSpy 再次去修改替换服务器地址。最后再将 dll 替换到 NAS 中,成功启动了。打开浏览器控制台,查看网络请求,确认 validateDevice 接口都是指向自建的服务器,则改造成功了。进入设置-Emby Premiere,随便输入一串密钥保存便能看到提示:

1
您拥有一个 Lifetime Emby Premiere 计划且您的设备数未达到最大限制数量。

Emby Premiere

Emby 优化

  1. 在 Emby 网页中打开本地播放器

详情直接查看:Emby网页提供调用外部播放器按钮

这个脚本最新的代码已经迁移到了这个地址 greasyfork

效果如下:

Emby Plugin
  1. 解决削刮网络问题

通过修改 hosts 解决 api.themoviedb.org 无法访问的问题,它的可用 IP 可以通过 ipip 查询。

Total Views:
开始使用 Obsidian 管理个人知识库 Vue CLI 升级到 v5 以及 Webpack5 缓存配置

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×