mirror of
https://git-qiuchenly.yltfspace.com/QiuChenly/corepatch
synced 2025-11-25 16:57:32 +08:00
add emby server;
This commit is contained in:
Binary file not shown.
BIN
tool/EmbyServerUbuntuCrack/Emby.Server.Implementations.dll
Normal file
BIN
tool/EmbyServerUbuntuCrack/Emby.Server.Implementations.dll
Normal file
Binary file not shown.
177
tool/EmbyServerUbuntuCrack/apploader.js
Normal file
177
tool/EmbyServerUbuntuCrack/apploader.js
Normal file
@@ -0,0 +1,177 @@
|
||||
var globalThis;
|
||||
void 0 === globalThis && (globalThis = self),
|
||||
(function () {
|
||||
"use strict";
|
||||
globalThis.Emby = {};
|
||||
var docElem,
|
||||
appMode,
|
||||
supportsModules = "noModule" in document.createElement("script"),
|
||||
usesModules = !1;
|
||||
function loadScript(src) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
var doc = document,
|
||||
script = doc.createElement("script");
|
||||
globalThis.urlCacheParam && (src += "?" + globalThis.urlCacheParam),
|
||||
usesModules && supportsModules && (script.type = "module"),
|
||||
(script.onload = resolve),
|
||||
(script.onerror = reject),
|
||||
(script.src = src),
|
||||
doc.head.appendChild(script);
|
||||
});
|
||||
}
|
||||
function catchAndResolve(err) {
|
||||
return (
|
||||
console.log("error registering service worker: " + err),
|
||||
Promise.resolve()
|
||||
);
|
||||
}
|
||||
function loadRequire() {
|
||||
return loadScript("./modules/alameda/alameda.js");
|
||||
}
|
||||
function loadApp() {
|
||||
var baseRoute,
|
||||
config = {
|
||||
urlArgs: globalThis.urlCacheParam,
|
||||
renameJsExtension: globalThis.Emby.jsExtension,
|
||||
};
|
||||
return (
|
||||
"android" !== globalThis.appMode &&
|
||||
((baseRoute = (baseRoute = globalThis.location.href
|
||||
.split("?")[0]
|
||||
.replace("/index.html", "")).split("#")[0]).lastIndexOf("/") ===
|
||||
baseRoute.length - 1 &&
|
||||
(baseRoute = baseRoute.substring(0, baseRoute.length - 1)),
|
||||
console.log("Setting require baseUrl to " + baseRoute),
|
||||
(config.baseUrl = baseRoute)),
|
||||
require.config(config),
|
||||
loadScript("./app.js")
|
||||
);
|
||||
}
|
||||
function onPromiseLoaded() {
|
||||
!(function () {
|
||||
switch (globalThis.appMode) {
|
||||
case "ios":
|
||||
case "android":
|
||||
case "windows":
|
||||
case "winjs":
|
||||
case "tizen":
|
||||
case "webos":
|
||||
case "chromecast":
|
||||
return Promise.resolve();
|
||||
}
|
||||
return "undefined" != typeof caches && navigator.serviceWorker
|
||||
? caches.open("embyappinfo").then(function (cache) {
|
||||
return cache
|
||||
.put(
|
||||
"appversion",
|
||||
new Response(globalThis.dashboardVersion || "")
|
||||
)
|
||||
.then(function () {
|
||||
try {
|
||||
var serviceWorkerOptions = {};
|
||||
return (
|
||||
usesModules &&
|
||||
supportsModules &&
|
||||
(serviceWorkerOptions.type = "module"),
|
||||
navigator.serviceWorker
|
||||
.register("serviceworker.js", serviceWorkerOptions)
|
||||
.then(function () {
|
||||
return navigator.serviceWorker.ready.then(
|
||||
function () {
|
||||
"standalone" === globalThis.appMode &&
|
||||
(globalThis.urlCacheParam = null),
|
||||
(Emby.serviceWorkerEnabled = !0);
|
||||
}
|
||||
);
|
||||
}, catchAndResolve)
|
||||
.then(function (reg) {
|
||||
return reg && reg.sync
|
||||
? reg.sync.register("emby-sync")
|
||||
: Promise.resolve();
|
||||
})
|
||||
);
|
||||
} catch (err) {
|
||||
console.log("Error registering serviceWorker: " + err);
|
||||
}
|
||||
}, catchAndResolve);
|
||||
}, catchAndResolve)
|
||||
: Promise.resolve();
|
||||
})()
|
||||
.then(loadRequire, loadRequire)
|
||||
.then(loadApp, loadApp);
|
||||
}
|
||||
(globalThis.Emby.requiresClassesPolyfill = !!1),
|
||||
(docElem = document.documentElement),
|
||||
(appMode = docElem.getAttribute("data-appmode")) &&
|
||||
(globalThis.appMode = appMode),
|
||||
(docElem = docElem.getAttribute("data-appversion")) &&
|
||||
(globalThis.dashboardVersion = docElem),
|
||||
docElem
|
||||
? (globalThis.urlCacheParam = "v=" + docElem)
|
||||
: appMode || (globalThis.urlCacheParam = "v=" + Date.now()),
|
||||
(function (onDone) {
|
||||
// 重写全局的 fetch 函数
|
||||
//powered by QiuChenly use node module hook
|
||||
(window.fetch1 = window.fetch),
|
||||
(window.fetch = (url, options) => {
|
||||
console.log("加载的URL是:", url);
|
||||
//如果url 包含 https://mb3admin.com/admin/service/registration/validateDevice 则直接返回
|
||||
/**
|
||||
* {
|
||||
status: 200,
|
||||
headers: $response.headers,
|
||||
body: '{"cacheExpirationDays":999,"resultCode":"GOOD","message":"Device Valid"}'
|
||||
}
|
||||
*/
|
||||
if (
|
||||
url ===
|
||||
"https://mb3admin.com/admin/service/registration/getStatus" ||
|
||||
url.includes(
|
||||
"https://mb3admin.com/admin/service/registration/validateDevice"
|
||||
)
|
||||
) {
|
||||
return new Promise((resolve, reject) => {
|
||||
resolve({
|
||||
status: 200,
|
||||
headers: {
|
||||
get: () => "application/json",
|
||||
},
|
||||
json: () => {
|
||||
return {
|
||||
SupporterKey: "1234",
|
||||
IsMBSupporter: true,
|
||||
// =======================
|
||||
cacheExpirationDays: 999,
|
||||
resultCode: "GOOD",
|
||||
message: "Device Valid",
|
||||
// 上半部分是分开的
|
||||
deviceStatus: 0,
|
||||
planType: "超级会员",
|
||||
subscriptions: [
|
||||
{
|
||||
autoRenew: true,
|
||||
store: "秋城落叶",
|
||||
feature: "all",
|
||||
planType: "超级会员",
|
||||
expDate: "直到2099年12月31日以后",
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return window.fetch1(url, options);
|
||||
});
|
||||
var doc, script, src;
|
||||
globalThis.Promise && globalThis.Promise.all
|
||||
? onDone()
|
||||
: ((script = (doc = document).createElement("script")),
|
||||
(src = "./modules/polyfills/native-promise-only.js"),
|
||||
globalThis.urlCacheParam && (src += "?" + globalThis.urlCacheParam),
|
||||
(script.onload = onDone),
|
||||
(script.src = src),
|
||||
doc.head.appendChild(script));
|
||||
})(onPromiseLoaded);
|
||||
})();
|
||||
50
tool/EmbyServerUbuntuCrack/docker-compose.yml
Normal file
50
tool/EmbyServerUbuntuCrack/docker-compose.yml
Normal file
@@ -0,0 +1,50 @@
|
||||
services:
|
||||
docker_emby_system:
|
||||
image: emby/embyserver:4.9.0.18
|
||||
privileged: true
|
||||
container_name: docker_emby_system
|
||||
hostname: "MediaServerCenter"
|
||||
# network_mode: host # Enable DLNA and Wake-on-Lan
|
||||
environment:
|
||||
# 你的用户id是多少就是多少uid=1000(qiuchenly) gid=1000(qiuchenly) groups=1000(qiuchenly) 直接写就是了
|
||||
- TZ=Asia/Shanghai
|
||||
- UID=1000 # The UID to run emby as (default: 2)
|
||||
- GID=100 # The GID to run emby as (default 2)
|
||||
- PUID=1000
|
||||
- PGID=100
|
||||
- GIDLIST=1000 # A comma-separated list of additional GIDs to run emby as (default: 2)
|
||||
extra_hosts:
|
||||
- "thetvdb.com:65.8.170.107"
|
||||
- 'api4.thetvdb.com:65.8.161.129'
|
||||
- 'api4.thetvdb.com:65.8.161.105'
|
||||
- 'api4.thetvdb.com:65.8.161.49'
|
||||
- 'api4.thetvdb.com:65.8.161.38'
|
||||
- 'api.themoviedb.org:65.8.161.111'
|
||||
- 'api.themoviedb.org:65.8.161.126'
|
||||
- 'api.themoviedb.org:65.8.161.83'
|
||||
- 'api.themoviedb.org:65.8.161.37'
|
||||
- 'image.tmdb.org:143.244.50.87'
|
||||
- 'artworks.thetvdb.com:99.84.234.115'
|
||||
- 'musicbrainz.emby.tv:23.239.10.174'
|
||||
- 'www.theaudiodb.com:104.21.57.210'
|
||||
- 'www.theaudiodb.com:172.67.149.243'
|
||||
- 'webservice.fanart.tv:51.89.210.79'
|
||||
- 'www.theaudiodb.com:172.67.149.243'
|
||||
- 'www.theaudiodb.com:104.21.57.210'
|
||||
volumes:
|
||||
- emby-config:/config # Configuration directory
|
||||
- /Volumes/data:/ExternalDisk
|
||||
- ./apploader.js:/system/dashboard-ui/apploader.js
|
||||
- ./Emby.Server.Implementations.dll:/system/Emby.Server.Implementations.dll
|
||||
devices:
|
||||
# 让宿主机显卡可以被调用 否则没有硬件解码器 chmod -R 777 /dev/dri
|
||||
- /dev/dri:/dev/dri # VAAPI/NVDEC/NVENC render nodes
|
||||
ports:
|
||||
- "8096:8096"
|
||||
# HTTP port
|
||||
#- "8920:8920" # HTTPS port
|
||||
restart: always
|
||||
|
||||
volumes:
|
||||
emby-config:
|
||||
|
||||
26
tool/EmbyServerUbuntuCrack/readme.md
Normal file
26
tool/EmbyServerUbuntuCrack/readme.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# 自用EmbyServer破解
|
||||
|
||||
## 使用
|
||||
1. 修改映射目录
|
||||
2. docker compose up -d
|
||||
|
||||
## 对应版本
|
||||
emby/embyserver:4.9.0.18
|
||||
|
||||
## 注意事项
|
||||
1. emby config自动存在于一个独立的镜像。如果需要docker compose down的时候也删掉这个配置保存内容,带上-v。
|
||||
2. 如果不带-v,那么docker compose down是不会删除配置信息的,包括你的数据缓存。下次更新只需要docker compose down && docker compose up -d即可。
|
||||
|
||||
## 破解原理
|
||||
1. 硬件解码
|
||||
找到Security类,修改一个字节:
|
||||
```c#
|
||||
bool Emby.Server.Implementations.Security.RegRecord::get_registered()
|
||||
return true;
|
||||
```
|
||||
2. 服务器验证
|
||||
拦截hook http页面请求。这里涉及到前端js层hook,技术理解比较深入,不建议新手研究。
|
||||
|
||||
## 备注
|
||||
|
||||
破解个毫无安全意识的app,把网上不少贵物小学生得瑟的那样,发个版本到处装大神,你装你吗呢?菜鸟。
|
||||
Reference in New Issue
Block a user