学习 Emby Server 解锁及优化

前言

网上很多 Emby 的资源都失效了,不过教程还是挺多,本文主要参考文章「重新学习并解锁emby」,总结在折腾 Emby 过程中的一些心得。本文不提供任何破解文件下载,仅作分享交流,请支持正版。


准备工具

下载dnSpy备用,下载地址:https://github.com/dnSpy/dnSpy


修改服务端文件的详细步骤

1、这几个 dll 直接使用网盘里改好的文件,因为它们不涉及域名修改可以直接用。

2、打开 dnSpy 并关闭默认文件。

3、把 Emby.web.dll 拖入软件然后找到资源。

4、导出 JS 文件进行。

5、修改 JS 内容后替换回去。

  • 先把原来的 connectionmanager.js 删除

6、Emby.Server.Implementations.dll文件修改(这个文件要改 2 处)

  • 切换 IL 修改, 可以搜索域名找到对应行

  • 再弹窗中修改即可。

7、剩余 2 个前端 JS 文件。可以把网盘里提供的两个 JS 文件下载后替换域名链接即可。


总结

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

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

起初可以白嫖的伪认证服务现在要么下线要么仅提供短期试用。好在有人提供了伪服务器的搭建方法,这里就不搬运原文了,访问 crackemby.mb6.top 即可查看。

因为改服务端的方式可以一劳永逸,本文也是主要介绍这种方式的折腾过程。测试使用的是 Window 服务端,其他端比如 Linux 或者群晖应该也是一样的步骤。


搭建伪认证服务

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


// 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