用于 Emby Server 的修改认证站点&搭建认证站点

发布于 2024-08-07  1 次阅读


一、前置准备

1、工具:dnSpy

2、需要修改的文件:

├─Emby.Server.Implementations.dll
├─Emby.Web.dll
├─MediaBrowser.Model.dll
└─dashboard-ui
    ├─embypremiere
    │  └─embypremiere.js
    └─modules
        └─emby-apiclient
            └─connectionmanager.js

二、修改文件

1. Emby.Server.Implementations.dll

打开dnSpy -> 文件 ->全部关闭。将Emby.Server.Implementations.dll 拖拽进去开始编辑。

1.1 修改第一处链接:

右键 ->编辑字段

改为 "https://yourdomain.com/4670/registration/validate.php"

1.2 修改第二处链接:

此处链接有些莫名其妙的要求,经测试:改为"https://yourdomain.com/admin/service/registration/validate.php" 时 服务器启动报错(只测试了windows平台),所以此处改为:"https://yourdomain.com/4670/registration/validate.php",测试可用。

修改完成后点击:文件 -> 保存模块

2. Emby.Web.dll

此文件负责 crack网页客户端

打开刚才保存的Emby.Web.dashboard_ui.modules.emby_apiclient.connectionmanager.js文件。
查找位置,并将认证域名改为自己的,然后保存。

返回dnSpy,将原来的Emby.Web.dashboard_ui.modules.emby_apiclient.connectionmanager.js删掉

右键 ->创建文件资源,将刚才修改过的Emby.Web.dashboard_ui.modules.emby_apiclient.connectionmanager.js 放进来。然后保存模块。

3. MediaBrowser.Model.dll

此文件负责显示激活页面,不做这步也能使用。

将dnSpy 从IL恢复到C#

然后保存模块。

4. embypremiere.js

找到如下链接并替换

5. connectionmanager.js

找到如下链接并替换

三、替换文件

关闭服务器,将上述文件全部替换到原文件位置。

四、搭建伪认证站点

4.1

即保证访问如下认证链接时返回对应的json字符串即可,并且注意跨域问题:

https://yourdomain.com/4670/registration/validate.php

{
  "featId": "MBSupporter",
  "registered": "true",
  "expDate": "2099-01-01",
  "key": ""
}

https://yourdomain.com/admin/service/registration/validateDevice.php

{
  "cacheExpirationDays": "365",
  "resultCode": "GOOD",
  "message": "Device Valid",
  "isPremiere": "true"
}

https://yourdomain.com/admin/service/registration/getStatus.php

{
  "deviceStatus": "1",
  "planType": "Lifetime",
  "subscriptions": {
    "isValid": "1",
    "accessDevice": "100"
  }
}


4.2 nginx.conf 参考(nginx_v1.24.0):

在 /etc/nginx/conf.d/yourdomain.com 目录下,按照URL对应路径放置php文件。

server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$server_name$request_uri;
}

server {
    gzip on;
    listen 443 ssl http2;
    server_name yourdomain.com;

    ssl_certificate /SSL/yourdomain.com/yourdomain.com.crt; # Specify the certificate location
    ssl_certificate_key /SSL/yourdomain.com/yourdomain.com.key; # Absolute path to the certificate key

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # SSL protocols to use
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # SSL ciphers to use
    ssl_prefer_server_ciphers  on;

    root /etc/nginx/conf.d/yourdomain.com; # Specify the root directory of your PHP files

    location ~ \.php$ {
	    #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
	    include fastcgi_params;
	    fastcgi_intercept_errors on;
	    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
	    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    }

    location /admin/service/registration/validateDevice.php {
        default_type application/json;
        try_files $uri =404;
    }

    location /admin/service/registration/getStatus.php {
        default_type application/json;
        try_files $uri =404;
    }

    location /4670/registration/validate.php{
        default_type application/json;
        try_files $uri =404;
    }


    location /admin/service/appstore/register.php {
        default_type application/json;
        try_files $uri =404;
    }

    location /emby/Plugins/SecurityInfo.php {
        default_type application/json;
        try_files $uri =404;
    }

    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Headers *;
    add_header Access-Control-Allow-Methods *;
    # add_header Access-Control-Allow-Credentials true;

    access_log /var/log/nginx/mysite/yourdomain.com.log;
    error_log /var/log/nginx/mysite/yourdomain.com.error.log error;
}