以下记录仅是参照下面大佬文章的解锁过程,属于个人尝试性描述,可能存在疏漏或偏差,仅供参考。对于记录内容的准确性或可能导致的后果,不承担任何责任。
参考文章:
主要分为两个部分,一是认证伪站的搭建,二是替换 emby 中认证服务器的域名。
伪站搭建
在 web 服务器中,让以下路径返回对应的数据:
/admin/service/registration/validateDevice
返回{"cacheExpirationDays":365,"message":"Device Valid","resultCode":"GOOD"}
。/admin/service/registration/validate
返回{"featId":"","registered":true,"expDate":"2099-01-01","key":""}
。/admin/service/registration/getStatus
返回{"deviceStatus":"0","planType":"Lifetime","subscriptions":{}}
。/admin/service/appstore/register
返回{"featId":"","registered":true,"expDate":"2099-01-01","key":""}
。/emby/Plugins/SecurityInfo
返回{"SupporterKey":"","IsMBSupporter":true}
。
也可以用 cloudflare workers 搭建:
const commonHeaders = {
"content-type": "application/json; charset=utf-8",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "*",
"Access-Control-Allow-Method": "*",
"Access-Control-Allow-Credentials": "true"
};
const createResponse = (data) => {
return new Response(JSON.stringify(data), {
headers: commonHeaders
});
};
const routes = {
"/admin/service/registration/validateDevice": () => ({
cacheExpirationDays: 365,
message: "Device Valid",
resultCode: "GOOD"
}),
"/admin/service/registration/validate": () => ({
featId: "",
registered: true,
expDate: "2099-01-01",
key: ""
}),
"/admin/service/registration/getStatus": () => ({
deviceStatus: "0",
planType: "Lifetime",
subscriptions: {}
}),
"/admin/service/appstore/register": () => ({
featId: "",
registered: true,
expDate: "2099-01-01",
key: ""
}),
"/emby/Plugins/SecurityInfo": () => ({
SupporterKey: "",
IsMBSupporter: true
})
};
addEventListener("fetch", (event) => {
const { pathname } = new URL(event.request.url);
for (const [path, handler] of Object.entries(routes)) {
if (pathname.endsWith(path)) {
event.respondWith(createResponse(handler()));
return;
}
}
});
替换 emby server 中的认证域名
总共修改五个文件:
system/Emby.Server.Implementations.dll
system/MediaBrowser.Model.dll
system/Emby.Web.dll
system/dashboard-ui/embypremiere/embypremiere.js
system/dashboard-ui/modules/emby-apiclient/connectionmanager.js
dll 文件使用 dnSpy 进行修改,js 文件使用文本编辑器修改就可以了。我这里使用的是 4.7.14.0 的版本,不同版本在代码中替换的位置会有不同。
- 修改
system/Emby.Server.Implementations.dll
使用 dnSpy 打开,如图找到PluginSecurityManager
,把C#
换为IL
。
在右边搜索 mb3admin.com
,替换为上面搭建认证伪站的域名。
替换完后保存。
注意,有的是右键后编辑 IL 指令,有的是编辑字段。
- 修改
system/MediaBrowser.Model.dll
使用 dnSpy 打开,如图找到get_isMBSupporter()
,把IL
换为C#
。
在右边代码在 this
位置右键,点编辑方法
。
将 this.<IsMBSupporter>k__BackingField
改为 true
。
然后和上面一样保存。
- 修改
system/Emby.Web.dll
使用 dnSpy 打开,如图找到Emby.Web.dashboard_ui.modules.emby_apiclient.connectionmanager.js
,右键保存。
使用文本编辑器打开 Emby.Web.dashboard_ui.modules.emby_apiclient.connectionmanager.js
,查找替换 mb3admin.com
。
保存后替换到 Emby.Web.dll
里,先删除再创建资源,找到刚才修改保存的文件替换进去。
- 修改
system/dashboard-ui/embypremiere/embypremiere.js
和/system/dashboard-ui/modules/emby-apiclient/connectionmanager.js
使用文本编辑器搜索 mb3admin.com
替换为自己搭建的认证域名即可。
使用
如果是安装到系统里的,直接替换文件即可。如果是 docker 安装,可以映射进去,如 linuxserver/emby 镜像:
docker run -d \
--name emby \
--hostname=media \
--restart=always \
-e TZ=Asia/Shanghai \
-e PUID=0 \
-e PGID=0 \
-p 8096:8096 \
-v /media:/media \
-v /opt/emby_config:/config \
-v /path/to/system/dashboard-ui/embypremiere/embypremiere.js:/app/emby/system/dashboard-ui/embypremiere/embypremiere.js \
-v /path/to/system/connectionmanager.js:/app/emby/system/connectionmanager.js \
-v /path/to/system/Emby.Server.Implementations.dll:/app/emby/system/Emby.Server.Implementations.dll \
-v /path/to/system/MediaBrowser.Model.dll:/app/emby/system/MediaBrowser.Model.dll \
-v /path/to/system/Emby.Web.dll:/app/emby/system/Emby.Web.dll \
linuxserver/emby:4.7.14
效果