This commit is contained in:
秋城落叶
2025-11-11 16:32:26 +08:00
parent 1e049cc16e
commit 8657a95658
73 changed files with 10 additions and 4946 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

View File

@@ -1,94 +0,0 @@
name: 🐞 报告Bug点我
description: 报告问题的模板
labels: [pending triage]
body:
- type: checkboxes
id: checkboxes_validations
attributes:
label: 检查事项
description: 请检查以下事项
options:
- label: 已确保 InjectLib 更新到最新版本
required: true
- label: 已确保软件版本为 InjectLib 支持范围
required: true
- type: textarea
id: bug-description
attributes:
label: 描述问题
description: |
对错误内容的清晰简洁的描述,如:“测试发现 xxx 无法激活(版本为 vx.x.x”。
placeholder: Bug description
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: 最小复现
description: 需要[**最小复现**](https://stackoverflow.com/help/minimal-reproducible-example),否则问题可能会被关闭,恕不另行通知。 [**为什么以及如何?**](https://antfu.me/posts/why-reproductives-are-required)
placeholder: |
打开上述软件输入xxxx后点击xxxx软件发生闪退/崩溃。
许可证信息示例如下:
```
xxx
```
validations:
required: true
- type: checkboxes
id: checkboxes
attributes:
label: 系统情况
description: 根据实际情况勾选以下内容
options:
- label: SIP 开着还是关着?
- label: 是否为黑苹果(如果是黑苹果,请回答在下方标注为黑苹果的问题)
- label: 黑苹果是否amfi_getout_of_my_way开了或者操作过amfi相关属性和amfi相关quirk
- type: textarea
id: system-info
attributes:
label: 系统信息
description: 描述你的系统信息
render: Shell
placeholder: |
OS: macOS xxx
CPU: xxx
Memory: xx GB
validations:
required: true
- type: textarea
id: if-modify-nvram
attributes:
label: 是否修改了nvram的内核启动参数黑苹果
description: 如果你修改了nvram请提供更多信息
placeholder: |
我使用了xxxx -v alc-layout-id=xx等
- type: textarea
id: if-use-oc-patcher
attributes:
label: 是否使用了需要修改系统文件的工具(黑苹果)
description: 如果你使用了OpenCore LegecyPatcher等需要修改系统文件的工具请提供更多信息
placeholder: |
我用了xxx且关闭了xxx
- type: textarea
id: expected-behavior
attributes:
label: 期望行为
description: 你期望的正确行为是什么?
placeholder: Expected behavior
validations:
required: true
- type: textarea
id: additional-info
attributes:
label: 额外信息
description: 有什么额外的信息需要提供吗?
placeholder: |
我已经尝试了xxx但是没有效果
我还发现了xxx
- type: textarea
id: log
attributes:
label: Crash Log
description: 上传你的崩溃日志
placeholder: |
把文件拖拉进来即可上传

22
.gitignore vendored
View File

@@ -1,22 +0,0 @@
.DS_Store
*.iml
.idea
.vscode
.ruby-lsp
IACPLHttpTransferClient
Diff*.py
tool/GiftGot.py
config_pd.json
tool/pd*.sh
tool/没脑子和不高兴
tool/Parallels_原始人_起洞.command
tool/Gift*
__pycache__
*.pyc
*.pyo
*.pyd
*.pyw
*.pyz
*.bak
*.db
cache

Binary file not shown.

View File

@@ -1,312 +0,0 @@
define([
"exports",
"./../modules/viewmanager/baseview.js",
"./../modules/emby-elements/emby-input/emby-input.js",
"./../modules/emby-elements/emby-button/emby-button.js",
"./../modules/emby-elements/emby-collapse/emby-collapse.js",
"./../modules/common/globalize.js",
"./../modules/loading/loading.js",
"./../modules/registrationservices/registrationservices.js",
"./../modules/common/dialogs/confirm.js",
"./../modules/emby-apiclient/connectionmanager.js",
], function (
_exports,
_baseview,
_embyInput,
_embyButton,
_embyCollapse,
_globalize,
_loading,
_registrationservices,
_confirm,
_connectionmanager
) {
function load(page) {
var apiClient;
_loading.default.show(),
(apiClient = ApiClient)
.getJSON(apiClient.getUrl("Plugins/SecurityInfo"))
.then(function (info) {
info.IsMBSupporter = true;
(page.querySelector(".txtSupporterKey").value =
info.SupporterKey || ""),
info.SupporterKey && !info.IsMBSupporter
? (page
.querySelector(".txtSupporterKey")
.classList.add("invalidEntry"),
page.querySelector(".notSupporter").classList.remove("hide"))
: (page
.querySelector(".txtSupporterKey")
.classList.remove("invalidEntry"),
page.querySelector(".notSupporter").classList.add("hide")),
info.IsMBSupporter
? (page
.querySelector(".supporterContainer")
.classList.add("hide"),
(function (key) {
key = "key=" + key + "&serverId=" + ApiClient.serverId();
return new Promise((resolve) =>
resolve({
deviceStatus: 0,
planType: "超级会员",
subscriptions: [
{
autoRenew: true,
store: "秋城落叶",
feature: "all",
planType: "超级会员",
expDate: "且会员资格永远不会失效",
},
],
})
);
})(info.SupporterKey).then(function (statusInfo) {
if (statusInfo) {
var statusLine,
indicator = page.querySelector(
".status-indicator .listItemIcon"
),
extendedPlans = page.querySelector(".extended-plans");
switch (
((extendedPlans.innerHTML = _globalize.default.translate(
"MessagePremiereExtendedPlans",
'<a is="emby-linkbutton" class="button-link" href="https://emby.media/premiere-ext.html" target="_blank">',
"</a>"
)),
statusInfo.deviceStatus)
) {
case 2:
(statusLine = _globalize.default.translate(
"MessagePremiereStatusOver",
statusInfo.planType
)),
indicator.classList.add("expiredBackground"),
indicator.classList.remove("nearExpiredBackground"),
(indicator.innerHTML = "&#xE000;"),
indicator.classList.add("autortl"),
extendedPlans.classList.remove("hide");
break;
case 1:
(statusLine = _globalize.default.translate(
"MessagePremiereStatusClose",
statusInfo.planType
)),
indicator.classList.remove("expiredBackground"),
indicator.classList.add("nearExpiredBackground"),
(indicator.innerHTML = "&#xE000;"),
indicator.classList.add("autortl"),
extendedPlans.classList.remove("hide");
break;
default:
(statusLine = _globalize.default.translate(
"MessagePremiereStatusGood",
statusInfo.planType
)),
indicator.classList.remove("expiredBackground"),
indicator.classList.remove("nearExpiredBackground"),
(indicator.innerHTML = "&#xE5CA;"),
indicator.classList.remove("autortl"),
extendedPlans.classList.add("hide");
}
page.querySelector(".premiere-status").innerHTML =
statusLine;
var subsElement = page.querySelector(".premiere-subs");
statusInfo.subscriptions &&
0 < statusInfo.subscriptions.length
? ((page.querySelector(
".premiere-subs-content"
).innerHTML =
((subs = statusInfo.subscriptions),
(key = info.SupporterKey),
subs.map(function (item) {
var itemHtml = "",
makeLink =
item.autoRenew && "Stripe" === item.store,
tagName = makeLink ? "button" : "div";
return (
itemHtml +
(("button" == tagName
? '<button type="button"'
: "<div") +
' class="listItem listItem-button listItem-border' +
(makeLink ? " lnkSubscription" : "") +
'" data-feature="' +
item.feature +
'" data-key="' +
key +
'">') +
'<i class="listItemIcon md-icon autortl">&#xe1b2;</i>' +
'<div class="listItemBody two-line">' +
'<div class="listItemBodyText">' +
_globalize.default.translate(
"ListItemPremiereSub",
item.planType,
item.expDate,
item.store
) +
"</div>" +
'<div class="listItemBodyText listItemBodyText-secondary">' +
_globalize.default.translate(
"Stripe" === item.store
? item.autoRenew
? "LabelClickToCancel"
: "LabelAlreadyCancelled"
: "LabelCancelInfo",
item.store
) +
"</div>" +
"</div>" +
("</" + tagName + ">")
);
}))),
(subs = page.querySelector(".lnkSubscription")) &&
subs.addEventListener("click", cancelSub),
subsElement.classList.remove("hide"))
: subsElement.classList.add("hide"),
page
.querySelector(".isSupporter")
.classList.remove("hide");
}
var subs, key;
}))
: (page
.querySelector(".supporterContainer")
.classList.remove("hide"),
page.querySelector(".isSupporter").classList.add("hide")),
_loading.default.hide();
});
}
function cancelSub(e) {
console.log("Cancel ");
var feature = this.getAttribute("data-feature"),
key = this.getAttribute("data-key");
(0, _confirm.default)({
title: _globalize.default.translate("HeaderCancelSub"),
text: _globalize.default.translate("MessageConfirmSubCancel"),
confirmText: _globalize.default.translate("ButtonCancelSub"),
cancelText: _globalize.default.translate("ButtonDontCancelSub"),
primary: "cancel",
}).then(function () {
console.log("after confirm"),
fetch("http://127.0.0.1:3000/admin/service/stripe/requestSubCancel", {
method: "POST",
body: "key=" + key + "&feature=" + feature,
headers: { "Content-Type": "application/x-www-form-urlencoded" },
}).then(
function (response) {
alertText({
text: _globalize.default.translate("MessageSubCancelReqSent"),
title: _globalize.default.translate("HeaderConfirmation"),
});
},
function (response) {
alertText({
text: _globalize.default.translate(
"MessageSubCancelError",
"cancel@emby.media"
),
});
}
);
});
}
function retrieveSupporterKey(e) {
_loading.default.show();
var email = this.querySelector(".txtEmail").value,
url =
"http://127.0.0.1:3000/admin/service/supporter/retrievekey?email=" +
email;
return (
console.log(url),
fetch(url, { method: "POST" })
.then(function (response) {
return response.json();
})
.then(function (result) {
_loading.default.hide(),
result.Success
? require(["toast"], function (toast) {
toast(
_globalize.default
.translate("MessageKeyEmailedTo")
.replace("{0}", email)
);
})
: require(["toast"], function (toast) {
toast(result.ErrorMessage);
}),
console.log(result);
}),
e.preventDefault(),
!1
);
}
function alertText(options) {
require(["alert"], function (alert) {
alert(options);
});
}
function updateSupporterKey(e) {
_loading.default.show();
var form = this,
key = form.querySelector(".txtSupporterKey").value;
return (
ApiClient.updatePluginSecurityInfo({ SupporterKey: key }).then(
function () {
_loading.default.hide(),
alertText(
key
? {
text: _globalize.default.translate("MessageKeyUpdated"),
title: _globalize.default.translate("HeaderConfirmation"),
}
: {
text: _globalize.default.translate("MessageKeyRemoved"),
title: _globalize.default.translate("HeaderConfirmation"),
}
),
_connectionmanager.default.resetRegistrationInfo(ApiClient),
load(form.closest(".page"));
},
function () {
_loading.default.hide(),
_connectionmanager.default.resetRegistrationInfo(ApiClient),
load(form.closest(".page"));
}
),
e.preventDefault(),
!1
);
}
function onSupporterLinkClick(e) {
_registrationservices.default.showPremiereInfo(),
e.preventDefault(),
e.stopPropagation();
}
function View(view, params) {
_baseview.default.apply(this, arguments),
view
.querySelector(".supporterKeyForm")
.addEventListener("submit", updateSupporterKey),
view
.querySelector(".lostKeyForm")
.addEventListener("submit", retrieveSupporterKey),
(view.querySelector(".benefits").innerHTML = _globalize.default.translate(
"HeaderSupporterBenefit",
'<a is="emby-linkbutton" class="lnkPremiere button-link" href="https://emby.media/premiere" target="_blank">',
"</a>"
)),
view
.querySelector(".lnkPremiere")
.addEventListener("click", onSupporterLinkClick);
}
Object.defineProperty(_exports, "__esModule", { value: !0 }),
(_exports.default = void 0),
require(["listViewStyle"]),
Object.assign(View.prototype, _baseview.default.prototype),
(View.prototype.onResume = function (options) {
_baseview.default.prototype.onResume.apply(this, arguments),
load(this.view);
}),
(_exports.default = View);
});

View File

@@ -1,76 +0,0 @@
# 本教程旨在破解Emby Server for macOS
## 支持版本: 4.7.14.0
下载地址: https://github.com/MediaBrowser/Emby.Releases/releases/download/4.7.14.0/embyserver-osx-x64-4.7.14.0.zip
## 使用方法
Emby.Web.dll 替换到 /Applications/EmbyServer.app/Contents/MacOS/Emby.Web.dll
embypremiere.js 替换到 /Applications/EmbyServer.app/Contents/Resources/dashboard-ui/embypremiere/embypremiere.js
## 最后
我再说一遍网上那些破解Emby Linux/Windows Server版本要替换四五个文件的人都是傻狗。
不就是修改个b前端js和改一下.Net资源文件的事情被你们搞这么复杂老子一直以为这东西很难都懒得弄没想到就他妈这么点b大点难度。一群饭桶
## 利用全局hook来伪造激活信息
```js
2024.03.08 全平台通杀代码无需反编译 by QiuChenly
就你们这b水平还搞Emby的破解纯纯的一群饭桶一个个只会盲目替换修改dll资源文件一知半解在这装破解大神问点问题没一个人回真他妈的纯纯的饭桶
/Applications/EmbyServer.app/Contents/Resources/dashboard-ui/apploader.js
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 {
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);
});
```

BIN
InjectLib

Binary file not shown.

View File

@@ -1,35 +0,0 @@
import os
import subprocess
subprocess.run(
"sudo chmod -R 777 '/Applications/Utilities/Adobe Creative Cloud/Components/Apps/Apps1_0.js'",
shell=True,
)
# 检查是否存在/Applications/Utilities/Adobe Creative Cloud/Components/Apps/Apps1_0.js
if os.path.isfile(
"/Applications/Utilities/Adobe Creative Cloud/Components/Apps/Apps1_0.js"
):
# 替换文件中的key:"getEntitlementStatus",value:function(e){为key:"getEntitlementStatus",value:function(e){return "Entitled Installed"
with open(
"/Applications/Utilities/Adobe Creative Cloud/Components/Apps/Apps1_0.js",
"r",
encoding="utf-8",
) as f:
content = f.read()
# 判断是否写过了
if (
'key:"getEntitlementStatus",value:function(e){return "Entitled Installed"'
not in content
):
# sed -i "s#key:\"getEntitlementStatus\",value:function(e){#key:\"getEntitlementStatus\",value:function(e){return \"Entitled Installed\"#g" /Applications/Utilities/Adobe\ Creative\ Cloud/Components/Apps/Apps1_0.js
content = content.replace(
'key:"getEntitlementStatus",value:function(e){',
'key:"getEntitlementStatus",value:function(e){return "Entitled Installed";',
)
with open(
"/Applications/Utilities/Adobe Creative Cloud/Components/Apps/Apps1_0.js",
"w",
encoding="utf-8",
) as f:
f.write(content)

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,14 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>QiuChenly 应用商店</title>
<script type="module" crossorigin src="/assets/index-DJCNZJwH.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Ywwf_4Ql.css">
</head>
<body>
<div id="app"></div>
</body>
</html>

Binary file not shown.

View File

@@ -1,47 +0,0 @@
# 注入 IPA
## 先决条件
1. brew 需要安装 unzip 包
## iOS 设备支持
iOS 12.0+
支持自签与巨魔。
## 准备砸壳包
自行寻找。
## 自动注入
使用原神,启动!二进制即可:
```bash
./InjectLib genshine packipa /Users/qiuchenly/Downloads/媒体三幻神/SenPlayer5.7.2.ipa ./CoreInject.dylib
```
最终在"ipa 文件路径"处找到一个 "ipa 文件路径"\_inject.ipa 文件即为最终产物。
## 目前支持状态:
| 模式 | 状态 | 说明 |
| ---- | ---- | --------------------------------------------------- |
| 自签 | 支持 | 无法使用 iCloud 同步 |
| 巨魔 | 支持 | 暂未编译 但支持 可用 iCloud 同步 有需要自己到频道找 |
| App | 状态 | 说明 |
| --------- | --------------------------- | ------------------------------------------------------ |
| Infuse | 支持 8.1.9 以及后续所有版本 | 自签无法使用 iCloud 同步 https://t.me/qiuchenlymac/738 |
| SenPlayer | 当前支持所有版本 | 自签无法使用 iCloud 同步 |
部分 ipa 提供了注入好的 ipa 包下载即可安装。请访问https://t.me/qiuchenlymac 查看更多细节。
## 开发者
QiuChenly
20250708
美国东部时间下午 16:18 分于洛杉矶

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 543 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 628 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 813 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

View File

@@ -1,79 +1,22 @@
# 通知
传奇永不落幕。
我们将迈入到更大的胜利!
此镜像仓库已经转移并不再使用, 请访问位于中国·香港的临时境外中转自建GitLab服务器。
<a href="https://github.com/QiuChenly/InjectLib"> <a href="https://github.com/QiuChenly/InjectLib">
<img src="./style.svg" width="800" height="590"> <img src="./style.svg" width="800" height="590">
</a> </a>
## 荣誉贡献榜 # 原神,启动!
![GitHub contributors](https://img.shields.io/github/contributors/QiuChenly/InjectLib.svg?style=flat-square)
<a href="https://github.com/QiuChenly/InjectLib/graphs/contributors">
<img src="https://contrib.rocks/image?repo=QiuChenly/InjectLib" />
</a>
<br />
<br />
<p align="center">🔞全球各❤️地❤️服❤️务🔞<br/>
🔞①线至①⑧线城市齐全🔞<br/>
🔞汇❤️编 🚗与🤤ASM约❤会🔞<br/>
🔞 一❤️个❤️人独自在家❤️火❤️热❤️难❤️耐 玩🔞逆🔞向 🔞<br/>
🔞找Qiu❤Chen❤l❤y❤Open❤Source🔞<br/></p>
# 你这玩意我怎么使用?
下载仓库 zip解压后终端 cd 到这个目录,执行"python3 main.py" 选择你中意的程序注入即可。
仍然遇到问题?你有两种选择。
1. 加群询问获取帮助: **https://t.me/+VvqTr-2EFaZhYzA1**
拒绝翻墙从我做起, QQ 群也可反馈问题:
二群 1049674046
2. 继续向下阅读并访问文档说明使用:
点下面的链接进入在线文档,有操作指南。
目前还没有写完,如果有没有的、看不懂的内容可以提 Issues。
点我查看 ➡️[使用文档](https://qiuchenlyopensource.github.io/Documentaions/)
# 加入小团体
关注我的频道,进群获取最新的推送资讯。
頻道: **<https://t.me/qiuchenlymac>**
群組: **https://t.me/+VvqTr-2EFaZhYzA1**
Twitter: https://twitter.com/QiuChenly
QQ 群:
仅为方便国内用户反馈问题与交流。
加群者请在遵守当地法律法规的前提下进行交流。
<br>
關注QiuChenly喵關注落葉的Twitter喵。謝謝大家喵。
# 原神!
點擊圖片進入新世界. 點擊圖片進入新世界.
[![启动](https://i2.hdslb.com/bfs/archive/966fe6fe2c1329919bb8972d69fb8c09d17047cc.jpg@100w_100h_1c.png)](imgs/bengbuzhule.mp4) [![启动](https://i2.hdslb.com/bfs/archive/966fe6fe2c1329919bb8972d69fb8c09d17047cc.jpg@100w_100h_1c.png)](imgs/bengbuzhule.mp4)
# 现已支持 IPA 注入
查看[文档](./iOSHijack/readme.md)了解更多细节。
# 操作系统要求 & 代码编译环境要求
- 最低运行 macOS High Sierra 10.13
- 编译 SDK macOS 14.0
- 目标部署平台 macOS 10.13
- CMakeLists 环境变量
- set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13")
- 检查二进制文件的最低 macOS 版本兼容性
- `find . -name "*.*" | xargs otool -l | grep -E "(minos|sdk)"`
--- ---
# 项目存在的目的 # 项目存在的目的

View File

@@ -1,32 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTDPLIST1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.qiuchenly.hayaku.daemon</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/QiuChenly/InjectLib</string>
<string>--daemon</string>
<string>/usr/local/bin/QiuChenly/config.json</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/var/log/hayaku_daemon.log</string>
<key>StandardErrorPath</key>
<string>/var/log/hayaku_daemon_error.log</string>
<key>UserName</key>
<string>root</string>
<key>GroupName</key>
<string>wheel</string>
<key>WorkingDirectory</key>
<string>/usr/local/bin/QiuChenly</string>
<key>ProcessType</key>
<string>Background</string>
<key>ThrottleInterval</key>
<integer>1</integer>
</dict>
</plist>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 439 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 661 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 KiB

View File

@@ -1,58 +0,0 @@
#!/bin/bash
# Hayaku HTTP守护进程安装脚本
set -e
echo "安装Hayaku HTTP守护进程..."
# 检查是否以root权限运行
if [ "$EUID" -ne 0 ]; then
echo "请使用sudo运行此脚本"
exit 1
fi
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BINARY_NAME="InjectLib"
PLIST_NAME="com.qiuchenly.hayaku.daemon.plist"
# 检查二进制文件是否存在(在脚本同级目录)
if [ ! -f "$SCRIPT_DIR/../InjectLib" ]; then
echo "错误: 找不到 $BINARY_NAME 文件"
echo "请先编译项目"
exit 1
fi
# 创建目录
mkdir -p "/usr/local/bin/QiuChenly"
cp -r "$SCRIPT_DIR/../tool" "/usr/local/bin/QiuChenly/tool"
cp -r "$SCRIPT_DIR/../config.json" "/usr/local/bin/QiuChenly/config.json"
cp -r "$SCRIPT_DIR/../frontend" "/usr/local/bin/QiuChenly/frontend"
# 复制二进制文件到系统目录
echo "复制二进制文件到 /usr/local/bin/QiuChenly/"
cp "$SCRIPT_DIR/../InjectLib" "/usr/local/bin/QiuChenly/"
chmod +x "/usr/local/bin/QiuChenly/$BINARY_NAME"
xattr -cr "/usr/local/bin/QiuChenly/InjectLib"
xattr -cr "/usr/local/bin/QiuChenly/tool"
codesign -fs - --all-architectures "/usr/local/bin/QiuChenly/tool/CoreInject.dylib"
# 复制plist文件到LaunchDaemons目录
echo "安装LaunchDaemon配置..."
cp "$SCRIPT_DIR/$PLIST_NAME" "/Library/LaunchDaemons/"
chmod 644 "/Library/LaunchDaemons/$PLIST_NAME"
# 加载并启动服务
echo "启动服务..."
launchctl load "/Library/LaunchDaemons/$PLIST_NAME"
launchctl start "com.qiuchenly.hayaku.daemon"
echo "安装完成!"
echo "服务状态:"
launchctl list | grep com.qiuchenly.hayaku.daemon || echo "服务未运行"
echo ""
echo "访问 http://localhost:15200 查看应用商店"
echo "查看日志: tail -f /var/log/hayaku_daemon*"

View File

@@ -1,33 +0,0 @@
#!/bin/bash
# Hayaku HTTP守护进程卸载脚本
set -e
echo "卸载Hayaku HTTP守护进程..."
# 检查是否以root权限运行
if [ "$EUID" -ne 0 ]; then
echo "请使用sudo运行此脚本"
exit 1
fi
PLIST_NAME="com.qiuchenly.hayaku.daemon.plist"
# 停止并卸载服务
echo "停止服务..."
launchctl stop "com.qiuchenly.hayaku.daemon" 2>/dev/null || true
launchctl unload "/Library/LaunchDaemons/$PLIST_NAME" 2>/dev/null || true
# 删除文件
echo "删除文件..."
rm -f "/usr/local/bin/QiuChenly/InjectLib"
rm -rf "/usr/local/bin/QiuChenly/tool"
rm -f "/usr/local/bin/QiuChenly/config.json"
rm -rf "/usr/local/bin/QiuChenly/frontend"
rm -rf "/usr/local/bin/QiuChenly"
rm -f "/Library/LaunchDaemons/$PLIST_NAME"
rm -f "/var/log/hayaku_daemon.log"
rm -f "/var/log/hayaku_daemon_error.log"
echo "卸载完成!"

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

View File

@@ -1,17 +0,0 @@
#!/bin/zsh
clear
cd ~/Library/Preferences/
echo -e "\e[36mGenerating Licence.....\e[0m"
openssl genrsa -out temp.pem 2048 >> /dev/null 2>&1
openssl rsa -in temp.pem -outform PEM -pubout -out public.pem >> /dev/null 2>&1
mv public.pem /Applications/CrossOver.app/Contents/SharedSupport/CrossOver/share/crossover/data/tie.pub
echo "[crossmac]\ncustomer=iAnon\nemail=iAnon@ianon.com\nexpires=2999/10/26\n[license]\nid=iAnonIsVeryNice" > com.codeweavers.CrossOver.license
openssl dgst -sha1 -sign temp.pem -out com.codeweavers.CrossOver.sig com.codeweavers.CrossOver.license
rm temp.pem
echo -e "\e[32mSuccessfully activated, enjoy!\e[0m"
exit 0

View File

@@ -1,177 +0,0 @@
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);
})();

View File

@@ -1,50 +0,0 @@
services:
docker_emby_system:
image: emby/embyserver:4.9.0.23
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:

View File

@@ -1,26 +0,0 @@
# 自用EmbyServer破解
## 使用
1. 修改映射目录
2. docker compose up -d
## 对应版本
emby/embyserver:4.9.0.23
## 注意事项
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把网上不少贵物小学生得瑟的那样发个版本到处装大神你装你吗呢菜鸟。

Binary file not shown.

Binary file not shown.

View File

@@ -1,291 +0,0 @@
#!/bin/zsh
/usr/bin/logger "Starting Office for Mac License Removal 2.7"
## CONSTANTS
PERPLICENSE="/Library/Preferences/com.microsoft.office.licensingV2.plist"
PERPLICENSEBACKUP="/Library/Preferences/com.microsoft.office.licensingV2.Backup"
## FUNCTIONS
GetLoggedInUser() {
LOGGEDIN=$(/bin/echo "show State:/Users/ConsoleUser" | /usr/sbin/scutil | /usr/bin/awk '/Name :/&&!/loginwindow/{print $3}')
if [ "$LOGGEDIN" = "" ]; then
echo "$USER"
else
echo "$LOGGEDIN"
fi
}
SetHomeFolder() {
HOME=$(dscl . read /Users/"$1" NFSHomeDirectory | cut -d ':' -f2 | cut -d ' ' -f2)
if [ "$HOME" = "" ]; then
if [ -d "/Users/$1" ]; then
HOME="/Users/$1"
else
HOME=$(eval echo "~$1")
fi
fi
}
GetNodeId() {
# Get node_id value from Registry
local NAME="$1"
local PARENT="$2"
local NODEVALUE=$(sqlite3 "$REGISTRY" "SELECT node_id from HKEY_CURRENT_USER WHERE name='$NAME' AND parent_id=$PARENT;")
if [ "$NODEVALUE" == '' ]; then
echo "0"
else
echo "$NODEVALUE"
fi
}
GetNodeVal() {
# Get node value from Registry
local NAME="$1"
local NODEID="$2"
local NODEVALUE=$(sqlite3 "$REGISTRY" "SELECT node_id from HKEY_CURRENT_USER_values WHERE name='$NAME' AND parent_id=$NODEID;")
if [ "$NODEVALUE" == '' ]; then
echo "0"
else
echo "$NODEVALUE"
fi
}
DeleteValue() {
# Delete value from Registry
local NAME="$1"
local NODEID="$2"
sqlite3 "$REGISTRY" "DELETE FROM HKEY_CURRENT_USER_values WHERE name='$NAME' and node_id=$NODEID;"
}
NukeValue() {
# Delete value from Registry with just the node name
local NAME="$1"
sqlite3 "$REGISTRY" "DELETE FROM HKEY_CURRENT_USER_values WHERE name='$NAME';"
}
DeleteNode() {
# Delete node and all contained values from Registry
local NODEID="$1"
sqlite3 "$REGISTRY" "DELETE FROM HKEY_CURRENT_USER_values WHERE node_id=$NODEID;"
}
RemoveFlightData() {
# Remove all flighting keys from the specified app
local KEY_APP="$1"
# If the flight keys are set, remove the existing values
KEY_ETAG=($GetNodeVal "ETag" "$KEY_APP")
if [ "$KEY_ETAG" != "0" ]; then
DeleteValue "ETag" "$KEY_APP"
fi
KEY_EXPIRES=($GetNodeVal "Expires" "$KEY_APP")
if [ "$KEY_EXPIRES" != "0" ]; then
DeleteValue "Expires" "$KEY_APP"
fi
KEY_DEFERRED=($GetNodeVal "DeferredConfigs" "$KEY_APP")
if [ "$KEY_DEFERRED" != "0" ]; then
DeleteValue "DeferredConfigs" "$KEY_APP"
fi
KEY_CONFIGID=($GetNodeVal "ConfigIds" "$KEY_APP")
if [ "$KEY_CONFIGID" != "0" ]; then
DeleteValue "ConfigIds" "$KEY_APP"
fi
}
## MAIN
LoggedInUser=$(GetLoggedInUser)
SetHomeFolder "$LoggedInUser"
echo "Running as: $LoggedInUser; Home Folder: $HOME"
REGISTRY="$HOME/Library/Group Containers/UBF8T346G9.Office/MicrosoftRegistrationDB.reg"
O365SUBMAIN="$HOME/Library/Group Containers/UBF8T346G9.Office/com.microsoft.Office365.plist"
O365SUBBAK1="$HOME/Library/Group Containers/UBF8T346G9.Office/com.microsoft.e0E2OUQxNUY1LTAxOUQtNDQwNS04QkJELTAxQTI5M0JBOTk4O.plist"
O365SUBBAK2="$HOME/Library/Group Containers/UBF8T346G9.Office/e0E2OUQxNUY1LTAxOUQtNDQwNS04QkJELTAxQTI5M0JBOTk4O"
O365SUBMAINB="$HOME/Library/Group Containers/UBF8T346G9.Office/com.microsoft.Office365V2.plist"
O365SUBBAK1B="$HOME/Library/Group Containers/UBF8T346G9.Office/com.microsoft.O4kTOBJ0M5ITQxATLEJkQ40SNwQDNtQUOxATL1YUNxQUO2E0e.plist"
O365SUBBAK2B="$HOME/Library/Group Containers/UBF8T346G9.Office/O4kTOBJ0M5ITQxATLEJkQ40SNwQDNtQUOxATL1YUNxQUO2E0e"
O365PRODUCT="$HOME/Library/Group Containers/UBF8T346G9.Office"
VNEXTLICENSEPATH="$O365PRODUCT/Licenses"
VNEXTPERPETUALLICENSEPATH="/Library/Microsoft/Office/Licenses"
# Forcibly close Office apps if they are running
/usr/bin/pkill -HUP "Microsoft Word"
/usr/bin/pkill -HUP "Microsoft Excel"
/usr/bin/pkill -HUP "Microsoft PowerPoint"
/usr/bin/pkill -HUP "Microsoft Outlook"
/usr/bin/pkill -HUP "Microsoft OneNote"
# Remove the Perpetual/Volume License from the computer
if [ -f "$PERPLICENSE" ]
then
/usr/bin/logger "Detected $PERPLICENSE file"
/usr/bin/sudo mv -f "$PERPLICENSE" "$PERPLICENSEBACKUP"
/usr/bin/logger "Removed $PERPLICENSE file"
else
/usr/bin/logger "Did NOT detect $PERPLICENSE file"
fi
# Remove the 2021 Consumer Perpetual Licence from the computer
if [ -e "$VNEXTPERPETUALLICENSEPATH" ]
then
/usr/bin/logger "Detected $VNEXTPERPETUALLICENSEPATH folder"
/usr/bin/sudo rm -rf "$VNEXTPERPETUALLICENSEPATH"
/usr/bin/logger "Removed $VNEXTPERPETUALLICENSEPATH folder"
else
/usr/bin/logger "Did NOT detect $VNEXTPERPETUALLICENSEPATH folder"
fi
# Remove the Office 365 Subscription License
if [ -f "$O365SUBMAIN" ] || [ -f "$O365SUBBAK1" ] || [ -f "$O365SUBBAK2" ] || [ -f "$O365SUBMAINB" ] || [ -f "$O365SUBBAK1B" ] || [ -f "$O365SUBBAK2B" ] || [ -e "$VNEXTLICENSEPATH" ]
then
/bin/logger "Detected Office 365 Subscription License file"
/bin/rm -f "$O365SUBMAIN"
/bin/rm -f "$O365SUBBAK1"
/bin/rm -f "$O365SUBBAK2"
/bin/rm -f "$O365SUBMAINB"
/bin/rm -f "$O365SUBBAK1B"
/bin/rm -f "$O365SUBBAK2B"
/bin/rm -rf "$VNEXTLICENSEPATH"
/usr/bin/logger "Removed all Office 365 Subscription License files"
else
/usr/bin/logger "Did NOT detect Office 365 Subscription License file"
fi
KeychainHasLogin=$(/usr/bin/security list-keychains | grep 'login.keychain')
if [ "$KeychainHasLogin" = "" ]; then
echo "Adding user login keychain to list"
/usr/bin/security list-keychains -s "$HOME/Library/Keychains/login.keychain-db"
fi
echo "Display list-keychains for logged-in user"
/usr/bin/security list-keychains
# Remove any keychain entries for Office
/usr/bin/security delete-generic-password -s 'OneAuthAccount'
/usr/bin/security delete-internet-password -s 'msoCredentialSchemeADAL'
/usr/bin/security delete-internet-password -s 'msoCredentialSchemeLiveId'
/usr/bin/security delete-generic-password -l 'Microsoft Office Identities Settings 2'
/usr/bin/security delete-generic-password -l 'Microsoft Office Identities Settings 3'
/usr/bin/security delete-generic-password -l 'Microsoft Office Identities Cache 2'
/usr/bin/security delete-generic-password -l 'Microsoft Office Identities Cache 3'
/usr/bin/security delete-generic-password -l 'Microsoft Office Ticket Cache'
/usr/bin/security delete-generic-password -l 'com.microsoft.adalcache'
/usr/bin/security delete-generic-password -l 'com.microsoft.OutlookCore.Secret'
/usr/bin/security delete-generic-password -l 'MicrosoftOfficeRMSCredential'
/usr/bin/security delete-generic-password -l 'MSProtection.framework.service'
/usr/bin/security delete-generic-password -G 'MSOpenTech.ADAL.1'
/usr/bin/security delete-generic-password -G 'MSOpenTech.ADAL.1'
/usr/bin/security delete-generic-password -G 'Microsoft Office Data'
/usr/bin/security delete-generic-password -G 'Microsoft Office Data'
/usr/bin/security delete-generic-password -G 'Microsoft Office Data'
/usr/bin/security delete-generic-password -l 'com.microsoft.OutlookCore.Secret'
/usr/bin/security delete-generic-password -l 'com.helpshift.data_com.microsoft.Outlook'
/usr/bin/security delete-generic-password -l 'com.helpshift.data_com.microsoft.Outlook'
/usr/bin/security delete-generic-password -l 'com.helpshift.data_com.microsoft.Outlook'
/usr/bin/security delete-generic-password -l 'com.helpshift.data_com.microsoft.Outlook'
/usr/bin/security delete-generic-password -l 'MicrosoftOfficeRMSCredential'
/usr/bin/security delete-generic-password -l 'MicrosoftOfficeRMSCredential'
/usr/bin/security delete-generic-password -l 'MSProtection.framework.service'
/usr/bin/security delete-generic-password -l 'MSProtection.framework.service'
/usr/bin/logger "Removed all Office keychain entries"
# Remove the Belongs To information
if [ -e "$HOME/Library/Preferences/com.microsoft.office.plist" ]; then
/usr/bin/sudo -u $LoggedInUser /usr/bin/defaults delete $HOME/Library/Preferences/com.microsoft.office OfficeActivationEmailAddress
/usr/bin/sudo -u $LoggedInUser /usr/bin/defaults write $HOME/Library/Preferences/com.microsoft.office OfficeAutoSignIn -bool TRUE
/usr/bin/sudo -u $LoggedInUser /usr/bin/defaults write $HOME/Library/Preferences/com.microsoft.office HasUserSeenFREDialog -bool TRUE
/usr/bin/sudo -u $LoggedInUser /usr/bin/defaults write $HOME/Library/Preferences/com.microsoft.office HasUserSeenEnterpriseFREDialog -bool TRUE
fi
# Reset the first run experience for each licensed app
if [ -e "$HOME/Library/Containers/com.microsoft.Word/Data/Library/Preferences/com.microsoft.Word.plist" ]; then
/usr/bin/sudo -u $LoggedInUser /usr/bin/defaults write $HOME/Library/Containers/com.microsoft.Word/Data/Library/Preferences/com.microsoft.Word kSubUIAppCompletedFirstRunSetup1507 -bool FALSE
fi
if [ -e "$HOME/Library/Containers/com.microsoft.Excel/Data/Library/Preferences/com.microsoft.Excel.plist" ]; then
/usr/bin/sudo -u $LoggedInUser /usr/bin/defaults write $HOME/Library/Containers/com.microsoft.Excel/Data/Library/Preferences/com.microsoft.Excel kSubUIAppCompletedFirstRunSetup1507 -bool FALSE
fi
if [ -e "$HOME/Library/Containers/com.microsoft.Powerpoint/Data/Library/Preferences/com.microsoft.Powerpoint.plist" ]; then
/usr/bin/sudo -u $LoggedInUser /usr/bin/defaults write $HOME/Library/Containers/com.microsoft.Powerpoint/Data/Library/Preferences/com.microsoft.Powerpoint kSubUIAppCompletedFirstRunSetup1507 -bool FALSE
fi
if [ -e "$HOME/Library/Containers/com.microsoft.Outlook/Data/Library/Preferences/com.microsoft.Outlook.plist" ]; then
/usr/bin/sudo -u $LoggedInUser /usr/bin/defaults write $HOME/Library/Containers/com.microsoft.Outlook/Data/Library/Preferences/com.microsoft.Outlook kSubUIAppCompletedFirstRunSetup1507 -bool FALSE
fi
if [ -e "$HOME/Library/Containers/com.microsoft.onenote.mac/Data/Library/Preferences/com.microsoft.onenote.mac.plist" ]; then
/usr/bin/sudo -u $LoggedInUser /usr/bin/defaults write $HOME/Library/Containers/com.microsoft.onenote.mac/Data/Library/Preferences/com.microsoft.onenote.mac kSubUIAppCompletedFirstRunSetup1507 -bool FALSE
fi
/usr/bin/logger "Set apps back to first run state"
# Remove the current flights from the registry
KEY_SOFTWARE=$(GetNodeId "Software" '-1')
KEY_MICROSOFT=$(GetNodeId "Microsoft" "$KEY_SOFTWARE")
KEY_OFFICE=$(GetNodeId "Office" "$KEY_MICROSOFT")
KEY_VERSION=$(GetNodeId "16.0" "$KEY_OFFICE")
KEY_COMMON=$(GetNodeId "Common" "$KEY_VERSION")
KEY_ECS=$(GetNodeId "ExperimentEcs" "$KEY_COMMON")
KEY_WORD=$(GetNodeId "word" "$KEY_ECS")
KEY_WORD_FLIGHTS=$(GetNodeId "Flights" "$KEY_WORD")
KEY_EXCEL=$(GetNodeId "excel" "$KEY_ECS")
KEY_EXCEL_FLIGHTS=$(GetNodeId "Flights" "$KEY_EXCEL")
KEY_POWERPOINT=$(GetNodeId "powerpoint" "$KEY_ECS")
KEY_POWERPOINT_FLIGHTS=$(GetNodeId "Flights" "$KEY_POWERPOINT")
KEY_OUTLOOK=$(GetNodeId "outlook" "$KEY_ECS")
KEY_OUTLOOK_FLIGHTS=$(GetNodeId "Flights" "$KEY_OUTLOOK")
KEY_ONENOTE=$(GetNodeId "onenote" "$KEY_ECS")
KEY_ONENOTE_FLIGHTS=$(GetNodeId "Flights" "$KEY_ONENOTE")
KEY_LICENSING=$(GetNodeId "licensingdaemon" "$KEY_ECS")
KEY_LICENSING_FLIGHTS=$(GetNodeId "Flights" "$KEY_LICENSING")
KEY_EX_CONFIGS=$(GetNodeId "ExperimentConfigs" "$KEY_COMMON")
KEY_EX_ECS=$(GetNodeId "Ecs" "$KEY_EX_CONFIGS")
KEY_EX_ECS_WORD=$(GetNodeId "word" "$KEY_EX_ECS")
KEY_EX_ECS_WORD_CCD=$(GetNodeId "ConfigContextData" "$KEY_EX_ECS_WORD")
KEY_EX_ECS_EXCEL=$(GetNodeId "excel" "$KEY_EX_ECS")
KEY_EX_ECS_EXCEL_CCD=$(GetNodeId "ConfigContextData" "$KEY_EX_ECS_EXCEL")
KEY_EX_ECS_POWERPOINT=$(GetNodeId "powerpoint" "$KEY_EX_ECS")
KEY_EX_ECS_POWERPOINT_CCD=$(GetNodeId "ConfigContextData" "$KEY_EX_ECS_POWERPOINT")
KEY_EX_ECS_OUTLOOK=$(GetNodeId "outlook" "$KEY_EX_ECS")
KEY_EX_ECS_OUTLOOK_CCD=$(GetNodeId "ConfigContextData" "$KEY_EX_ECS_OUTLOOK")
KEY_EX_ECS_ONENOTE=$(GetNodeId "onenote" "$KEY_EX_ECS")
KEY_EX_ECS_ONENOTE_CCD=$(GetNodeId "ConfigContextData" "$KEY_EX_ECS_ONENOTE")
KEY_EX_ECS_LICENSING=$(GetNodeId "licensingdaemon" "$KEY_EX_ECS")
KEY_EX_ECS_LICENSING_CCD=$(GetNodeId "ConfigContextData" "$KEY_EX_ECS_LICENSING")
RemoveFlightData "$KEY_WORD"
RemoveFlightData "$KEY_EX_ECS_WORD"
DeleteNode "$KEY_WORD_FLIGHTS"
DeleteNode "$KEY_EX_ECS_WORD_CCD"
RemoveFlightData "$KEY_EXCEL"
RemoveFlightData "$KEY_EX_ECS_EXCEL"
DeleteNode "$KEY_EXCEL_FLIGHTS"
DeleteNode "$KEY_EX_ECS_EXCEL_CCD"
RemoveFlightData "$KEY_POWERPOINT"
RemoveFlightData "$KEY_EX_ECS_POWERPOINT"
DeleteNode "$KEY_POWERPOINT_FLIGHTS"
DeleteNode "$KEY_EX_ECS_POWERPOINT_CCD"
RemoveFlightData "$KEY_OUTLOOK"
RemoveFlightData "$KEY_EX_ECS_OUTLOOK"
DeleteNode "$KEY_OUTLOOK_FLIGHTS"
DeleteNode "$KEY_EX_ECS_OUTLOOK_CCD"
RemoveFlightData "$KEY_ONENOTE"
RemoveFlightData "$KEY_EX_ECS_ONENOTE"
DeleteNode "$KEY_ONENOTE_FLIGHTS"
DeleteNode "$KEY_EX_ECS_ONENOTE_CCD"
RemoveFlightData "$KEY_LICENSING"
RemoveFlightData "$KEY_EX_ECS_LICENSING"
DeleteNode "$KEY_LICENSING_FLIGHTS"
DeleteNode "$KEY_EX_ECS_LICENSING_CCD"
/usr/bin/logger "Removed all Office flighting data"
# Forcibly remove any Config Service Caching
NukeValue "AuthorityUrl"
NukeValue "FilePath"
NukeValue "Url"
# Restart the CFPreferences daemon to ensure that all caches are flushed
/usr/bin/sudo /usr/bin/killall cfprefsd
/usr/bin/logger "Terminated all instances of CFPrefsd"
/usr/bin/logger "Completed Office for Mac License Removal 2.7"
exit 0

View File

@@ -1,138 +0,0 @@
import os, datetime, shutil
def extract(base):
os.system(f"cd {base} && asar extract obsidian.asar obsidian")
def pack(base):
os.system(f"cd {base} && asar pack obsidian obsidian.asar")
def log(msg):
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f"{now}{msg}")
def is_obsidian_running():
if os.system("pgrep -x Obsidian > /dev/null 2>&1") == 0:
log("检测到 Obsidian 进程正在运行,请先关闭 Obsidian 进程")
# os.system("killall -9 Obsidian")
exit(0)
def crack_app(base):
destination_path = f"{base}/obsidian"
app_js_file_path = os.path.join(destination_path, "app.js")
with open(app_js_file_path, "r", encoding="utf-8") as file:
old_content = """var iY=new(function(){function e(){this.keyValidation="",this.company="",this.expiry=0,this.seats=0;try{var e=JSON.parse(localStorage.getItem(zK));this.email=e.email,this.name=e.name,this.token=e.token,this.license=e.license,this.key=e.key}catch(e){}}return e.prototype.save=function(){var e={email:this.email,name:this.name,token:this.token,license:this.license,key:this.key};localStorage.setItem(zK,JSON.stringify(e))},e.prototype.setKey=function(e){this.key=e,this.save()},e}());"""
new_content = """
var iY = new ((function () {
function e() {
(this.keyValidation = "valid"),
(this.company = "QiuChenlyTeam"),
(this.expiry = 8640000000000),
(this.seats = Infinity);
(this.email = "QiuChenlyTeam@Cracked.com"),
(this.name = "Cracked by QiuChenlyTeam"),
(this.token = "e.token"),
(this.license = "vip"),
(this.key = "Cracked by QiuChenlyTeam");
}
return (
(e.prototype.save = function () {
(this.keyValidation = "valid"),
(this.company = "QiuChenlyTeam"),
(this.expiry = 8640000000000),
(this.seats = Infinity);
(this.email = "QiuChenlyTeam@Cracked.com"),
(this.name = "Cracked by QiuChenlyTeam"),
(this.token = "e.token"),
(this.license = "vip"),
(this.key = "Cracked by QiuChenlyTeam");
var e = {
email: this.email,
name: this.name,
token: this.token,
license: this.license,
key: this.key,
};
localStorage.setItem(zK, JSON.stringify(e));
}), (e.prototype.setKey = function (e) { (this.key = e), this.save(); }), e
);
})())();"""
app_content = file.read()
if old_content in app_content:
log("激活信息写入中...")
new_app_content = app_content.replace(old_content, new_content)
with open(app_js_file_path, "w", encoding="utf-8") as file2:
file2.write(new_app_content)
log("激活信息写入完毕")
else:
log("Obsidian文件已被修改过请重新下载")
def crack_asar(base):
if not os.path.exists(f"{base}/obsidian_backup.asar"):
log("备份 obsidian.asar -> obsidian_backup.asar")
shutil.copyfile(f"{base}/obsidian.asar", f"{base}/obsidian_backup.asar")
log("解包 obsidian.asar")
extract(base)
crack_app(base)
log("打包 obsidian.asar")
pack(base)
log("删除 obsidian 文件夹")
shutil.rmtree(f"{base}/obsidian")
log("正在修复已损坏")
os.system("sudo xattr -cr /Applications/Obsidian.app")
log("修复完毕")
def crack(base):
log("正在进行 Obsidian 破解操作...")
if os.system("command -v asar > /dev/null 2>&1") == 1:
log("未检测到asar请先安装asar")
exit(0)
# 如果存在obsidian_backup证明已经用脚本处理过那就用obsidian_backup重新破解免得有傻逼瞎几把搞
if os.path.exists(rf"{base}/obsidian_backup.asar"):
log("obsidian_backup.asar 已存在,将使用 obsidian_backup 重新激活")
os.remove(f"{base}/obsidian.asar")
shutil.copyfile(f"{base}/obsidian_backup.asar", f"{base}/obsidian.asar")
os.remove(f"{base}/obsidian_backup.asar")
if os.path.exists(rf"{base}/obsidian.asar"):
crack_asar(base)
log("Obsidian 破解处理完毕")
def main():
try:
print(" ___ _ ____ _ _ _____")
print(" / _ \\(_)_ _ / ___| |__ ___ _ __ | |_ |_ _|__ __ _ _ __ ___")
print("| | | | | | | | | | '_ \\ / _ \\ '_ \\| | | | || |/ _ \\/ _` | '_ ` _ \\")
print("| |_| | | |_| | |___| | | | __/ | | | | |_| || | __/ (_| | | | | | |")
print(" \\__\\_\\_|\\__,_|\\____|_| |_|\\___|_| |_|_|\\__, ||_|\\___|\\__,_|_| |_| |_|")
print(" |___/")
print("\nQiuChenlyTeam Obsidian「Mac」一键破解脚本 By X1a0He\n")
is_obsidian_running()
# 你他妈的,要修改文件都是要权限的,不用 sudo 你修改nm呢
if not os.geteuid() == 0:
log("请以「sudo」运行此脚本")
exit(0)
if not os.path.exists("/Applications/Obsidian.app"):
log("未检测到 Obsidian.app结束执行")
exit(0)
base = "/Applications/Obsidian.app/Contents/Resources"
crack(base)
os.system("open -a Obsidian")
except KeyboardInterrupt:
print("\n用户中断了程序执行")
if __name__ == '__main__':
main()

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.assets.pictures.read-only</key>
<true/>
<key>com.apple.security.files.downloads.read-write</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>

View File

@@ -1,3 +0,0 @@
cp /Applications/Setapp.app/Contents/Library/LaunchServices/Setapp.app/Contents/MacOS/SetappAgent /Applications/Setapp.app/Contents/Library/LaunchServices/Setapp.app/Contents/MacOS/SetappAgent_backup
tool/insert_dylib /Applications/Setapp.app/Contents/Frameworks/CoreInject.dylib /Applications/Setapp.app/Contents/Library/LaunchServices/Setapp.app/Contents/MacOS/SetappAgent_backup /Applications/Setapp.app/Contents/Library/LaunchServices/Setapp.app/Contents/MacOS/SetappAgent
codesign -fs - /Applications/Setapp.app/Contents/Library/LaunchServices/Setapp.app

View File

@@ -1,175 +0,0 @@
/*
* Copyright (c) 2013-2014 Minkyu Lee. All rights reserved.
*
* NOTICE: All information contained herein is, and remains the
* property of Minkyu Lee. The intellectual and technical concepts
* contained herein are proprietary to Minkyu Lee and may be covered
* by Republic of Korea and Foreign Patents, patents in process,
* and are protected by trade secret or copyright law.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Minkyu Lee (niklaus.lee@gmail.com).
*
*/
const { EventEmitter } = require("events");
const fs = require("fs");
const path = require("path");
const crypto = require("crypto");
const UnregisteredDialog = require("../dialogs/unregistered-dialog");
const SK = "DF9B72CC966FBE3A46F99858C5AEE";
const packageJSON = require("../../package.json");
// Check License When File Save
const LICENSE_CHECK_PROBABILITY = 0.3;
const PRO_DIAGRAM_TYPES = [
"SysMLRequirementDiagram",
"SysMLBlockDefinitionDiagram",
"SysMLInternalBlockDiagram",
"SysMLParametricDiagram",
"BPMNDiagram",
"WFWireframeDiagram",
"AWSDiagram",
"GCPDiagram",
];
var status = false;
var licenseInfo = null;
/**
* Set Registration Status
* This function is out of LicenseManager class for the security reason
* (To disable changing License status by API)
* @private
* @param {boolean} newStat
* @return {string}
*/
function setStatus(licenseManager, newStat) {
if (status !== newStat) {
status = newStat;
licenseManager.emit("statusChanged", status);
}
}
/**
* @private
*/
class LicenseManager extends EventEmitter {
constructor() {
super();
this.projectManager = null;
}
isProDiagram(diagramType) {
return true;
}
/**
* Get Registration Status
* @return {string}
*/
getStatus() {
return status;
}
/**
* Get License Infomation
* @return {Object}
*/
getLicenseInfo() {
return licenseInfo;
}
findLicense() {
var licensePath = path.join(app.getUserPath(), "/license.key");
if (!fs.existsSync(licensePath)) {
licensePath = path.join(app.getAppPath(), "../license.key");
}
if (fs.existsSync(licensePath)) {
return licensePath;
} else {
return null;
}
}
/**
* Check license validity
*
* @return {Promise}
*/
validate() {
return new Promise((resolve, reject) => {
try {
// Local check
var file = this.findLicense();
if (!file) {
reject("License key not found");
} else {
var data = fs.readFileSync(file, "utf8");
licenseInfo = JSON.parse(data);
resolve(licenseInfo);
}
} catch (err) {
reject(err);
}
});
}
checkLicenseValidity() {
if (packageJSON.config.setappBuild) {
setStatus(this, true);
} else {
this.validate().then(
() => {
setStatus(this, true);
},
() => {
setStatus(this, false);
UnregisteredDialog.showDialog();
},
);
}
}
/**
* Check the license key in server and store it as license.key file in local
*
* @param {string} licenseKey
*/
register(licenseKey) {
return new Promise((resolve, reject) => {
var data = {
name: "QiuChenlyTeam",
product: "STARUML.V6",
licenseType: "PRO",
quantity: "99999",
timestamp: "1575275098",
licenseKey: "88888888888888",
crackedAuthor: "BilZzard"
}
if (data.product === packageJSON.config.product_id) {
var file = path.join(app.getUserPath(), "/license.key");
fs.writeFileSync(file, JSON.stringify(data, 2));
licenseInfo = data;
setStatus(this, true);
resolve(data);
}
});
}
htmlReady() {
this.projectManager.on("projectSaved", (filename, project) => {
var val = Math.floor(Math.random() * (1.0 / LICENSE_CHECK_PROBABILITY));
if (val === 0) {
this.checkLicenseValidity();
}
});
}
appReady() {
this.checkLicenseValidity();
}
}
module.exports = LicenseManager;

View File

@@ -1,43 +0,0 @@
import os
# 检查是否安装了 asar 命令
def check_asar_command():
return os.system("command -v asar > /dev/null 2>&1") == 0
if not check_asar_command():
print("草泥马先安装asar。")
exit(1)
# 获取用户输入的用户名
username = input("请输入用户名: ")
# 执行bash命令
bash_extract = """
cd /Applications/StarUML.app/Contents/Resources && asar extract app.asar app
"""
os.system(bash_extract)
# 复制license-manager.js文件到目标位置
destination_path = "/Applications/StarUML.app/Contents/Resources/app/src/engine/"
os.system("cp -f license-manager.js {}".format(destination_path))
# 将字符串中的"BilZzard"替换为用户输入的文本
with open(destination_path + "license-manager.js", 'r') as file:
js_content = file.read()
new_js_content = js_content.replace('QiuChenlyTeam', username)
# 将替换后的内容写回到js文件
with open(destination_path + "license-manager.js", 'w') as file:
file.write(new_js_content)
# 执行bash命令
print("需要修复app,看到提示后输入root密码。")
bash_pack = """
cd /Applications/StarUML.app/Contents/Resources &&
asar pack app app.asar &&
rm -rf app && sudo xattr -r -d com.apple.quarantine /Applications/StarUML.app
"""
os.system(bash_pack)
print("脚本执行完成。请打开后从设置-隐私与安全中打开!之后随便输入激活码即可激活!")

View File

@@ -1,25 +0,0 @@
# ./tool/GenShineImpactStarter /Applications/AirBuddy.app/Contents/Library/LaunchServices/codes.rambo.AirBuddy.Installer codes.rambo.AirBuddy
# 检查文件是否存在
if [ ! -f "/Applications/AirBuddy.app/Contents/Library/LaunchServices/codes.rambo.AirBuddy.Installer_backup" ]; then
cp "/Applications/AirBuddy.app/Contents/Library/LaunchServices/codes.rambo.AirBuddy.Installer" "/Applications/AirBuddy.app/Contents/Library/LaunchServices/codes.rambo.AirBuddy.Installer_backup"
fi
# 检查文件是否存在
if [ ! -f "/Applications/AirBuddy.app/Contents/MacOS/AirBuddy_backup" ]; then
cp "/Applications/AirBuddy.app/Contents/MacOS/AirBuddy" "/Applications/AirBuddy.app/Contents/MacOS/AirBuddy_backup"
fi
cp tool/91QiuChenly.dylib /Applications/AirBuddy.app/Contents/MacOS/91QiuChenly.dylib
tool/insert_dylib @executable_path/91QiuChenly.dylib /Applications/AirBuddy.app/Contents/MacOS/AirBuddy_backup /Applications/AirBuddy.app/Contents/MacOS/AirBuddy
codesign -f -s - /Applications/AirBuddy.app/Contents/Library/LaunchServices/codes.rambo.AirBuddy.Installer
codesign -f -s - /Applications/AirBuddy.app/Contents/Library/LoginItems/AirBuddyHelper.app
/usr/libexec/PlistBuddy -c 'Set :SMPrivilegedExecutables:codes.rambo.AirBuddy.Installer identifier \"codes.rambo.AirBuddy.Installer\"' '/Applications/AirBuddy.app/Contents/Info.plist'
codesign -f -s - /Applications/AirBuddy.app
xattr -cr /Applications/AirBuddy.app

View File

@@ -1,2 +0,0 @@
/usr/bin/codesign -f -s - /Applications/Camtasia\ 2023.app/Contents/Resources/CLExporter
/usr/bin/codesign -f -s - /Applications/Camtasia\ 2023.app/Contents/Resources/CLThumbnailer

View File

@@ -1 +0,0 @@
codesign -fs - "/Applications/Adobe Acrobat DC/Adobe Acrobat.app"

View File

@@ -1,5 +0,0 @@
codesign -fs - tool/CoreInject.dylib
cp tool/CoreInject.dylib '/Applications/IDA Professional 9.1.app/Contents/MacOS/91QiuChenly.dylib'
cp "/Applications/IDA Professional 9.1.app/Contents/MacOS/ida" /tmp/ida
codesign -fs - /tmp/ida
cp /tmp/ida "/Applications/IDA Professional 9.1.app/Contents/MacOS/ida"

View File

@@ -1,7 +0,0 @@
cp "/Applications/iStat Menus.app/Contents/Resources/Components.bundle/Contents/MacOS/Components" "/Applications/iStat Menus.app/Contents/Resources/Components.bundle/Contents/MacOS/Components_backup"
sudo tool/insert_dylib '/Applications/iStat Menus.app/Contents/Frameworks/91QiuChenly.dylib' "/Applications/iStat Menus.app/Contents/Resources/Components.bundle/Contents/MacOS/Components_backup" "/Applications/iStat Menus.app/Contents/Resources/Components.bundle/Contents/MacOS/Components"
/usr/libexec/PlistBuddy -c "Set :SMPrivilegedExecutables:com.bjango.istatmenus.installer 'identifier \\\"com.bjango.istatmenus.installer\\\"'" "/Applications/iStat Menus.app/Contents/Resources/Components.bundle/Contents/Resources/iStat Menus Helper.app/Contents/Info.plist"
/usr/bin/codesign -f -s - --timestamp=none --all-architectures --deep "/Applications/iStat Menus.app/Contents/Resources/Components.bundle/Contents/Resources/com.bjango.istatmenus.daemon"
/usr/bin/codesign -f -s - --timestamp=none --all-architectures --deep "/Applications/iStat Menus.app/Contents/Resources/Components.bundle/Contents/Resources/iStat Menus Helper.app"
/usr/bin/codesign -f -s - --timestamp=none --all-architectures --deep "/Applications/iStat Menus.app/Contents/Resources/Components.bundle"
xattr -cr "/Applications/iStat Menus.app/Contents/Resources/Components.bundle"

Binary file not shown.

Binary file not shown.

View File

@@ -1,4 +0,0 @@
cp '/Applications/Adobe Lightroom Classic/Adobe Lightroom Classic.app/Contents/MacOS/Adobe Lightroom Classic' /tmp/lrc
sudo codesign -fs - /tmp/lrc
cp /tmp/lrc '/Applications/Adobe Lightroom Classic/Adobe Lightroom Classic.app/Contents/MacOS/Adobe Lightroom Classic'
rm -rf /tmp/lrc

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.get-task-allow</key>
<true/>
<key>com.apple.security.cs.allow-jits</key>
<true/>
<key>com.apple.security.cs.debugger</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
</dict>
</plist>

View File

@@ -1,34 +0,0 @@
#!/bin/bash
# 获取当前目录
CURRENT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
sudo pkill -f "sublime_text"
/usr/bin/codesign -f -s - --timestamp=none --all-architectures --deep "$CURRENT_DIR/CoreInject.dylib"
sudo mkdir -p /usr/local/lib
sudo cp "$CURRENT_DIR/CoreInject.dylib" /usr/local/lib/qcly
cp '/Applications/Sublime Text.app/Contents/MacOS/sublime_text' '/Applications/Sublime Text.app/Contents/MacOS/sublime_text_backup'
sudo $CURRENT_DIR/insert_dylib "qcly" '/Applications/Sublime Text.app/Contents/MacOS/sublime_text_backup' '/Applications/Sublime Text.app/Contents/MacOS/sublime_text'
sudo xattr -cr "/Applications/Sublime Text.app"
if [[ $(arch) == "arm64" ]]; then
echo "当前是 arm64 架构"
sudo codesign -fs - --deep /Applications/Sublime\ Text.app
else
echo "当前不是 arm64 架构"
fi
echo "注册码:\n----- BEGIN LICENSE -----
秋城落叶@outlook.com
Unlimited User License
EA7E-8888888
88888888888888888888888888888888
88888888888888888888888888888888
88888888888888888888888888888888
88888888888888888888888888888888
88888888888888888888888888888888
88888888888888888888888888888888
88888888888888888888888888888888
88888888888888888888888888888888
------ END LICENSE ------"

View File

@@ -1,28 +0,0 @@
#!/bin/bash
/usr/bin/codesign -f -s - --timestamp=none --all-architectures --deep "tool/CoreInject.dylib"
sudo mkdir -p /usr/local/lib
sudo cp "tool/CoreInject.dylib" /usr/local/lib/qcly
cp '/Applications/Sublime Merge.app/Contents/MacOS/sublime_merge' '/Applications/Sublime Merge.app/Contents/MacOS/sublime_merge_backup'
sudo tool/insert_dylib qcly '/Applications/Sublime Merge.app/Contents/MacOS/sublime_merge_backup' '/Applications/Sublime Merge.app/Contents/MacOS/sublime_merge'
sudo xattr -cr "/Applications/Sublime Merge.app"
if [[ $(arch) == "arm64" ]]; then
echo "当前是 arm64 架构"
sudo codesign -fs - --deep /Applications/Sublime\ Merge.app
else
echo "当前不是 arm64 架构"
fi
echo "注册码:\n-----BEGIN LICENSE-----
qiuchenly@outlook.com
Unlimited User License
E52D-73WX6E7KFW
3WSY28516XZBBBUAKIE3K62SPQ9TDRHV
TDLUO8M6ADKRAA888FEXKAPAF0HJE60W
92AVK103WAW1294SMQI9QJBEL4OT646C
DT5KM9OO0JWVCAKZV2SKTVQ395W9CM74
CY24F9VXU6AHJ2ZD41UW6MXEBBGBMVJT
MDWWA666OTZL1UHLULMPLYKIKRK7CLFJ
VASMFT7HHGHZK2LLO09R2ECMV9SEEWMK
E64V59PRUXKBKZBA9404KXIXDJRK4TOC
-----END LICENSE-----"

View File

@@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.qiuchenly.macos.god</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/macOSGod</string>
<string>/usr/local/lib/CoreInject.dylib</string>
<string>Surge</string>
<string>com.nssurge.surge-mac.ne</string>
</array>
<key>UnSupported</key>
<array>
<string>Navicat Premium</string>
<string>Proxyman</string>
<string>Infuse</string>
<string>App Cleaner 8</string>
<string>prl_client_app</string>
<string>prl_vm_app</string>
<string>prl_disp_service</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/var/log/macos_god.log</string>
<key>StandardErrorPath</key>
<string>/var/log/macos_god_error.log</string>
<key>UserName</key>
<string>root</string>
<key>GroupName</key>
<string>wheel</string>
<key>WorkingDirectory</key>
<string>/usr/local/bin</string>
<key>ProcessType</key>
<string>Background</string>
<key>ThrottleInterval</key>
<integer>1</integer>
</dict>
</plist>

View File

@@ -1,124 +0,0 @@
#!/bin/bash
set -euo pipefail
cd "$(dirname "$0")" || exit 1
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${BLUE}[*] $1${NC}"
}
log_success() {
echo -e "${GREEN}[+] $1${NC}"
}
log_warning() {
echo -e "${YELLOW}[!] $1${NC}"
}
log_error() {
echo -e "${RED}[×] $1${NC}"
}
# 检查是否以root权限运行
check_root() {
if [[ $EUID -ne 0 ]]; then
log_error "必须以root权限运行"
exit 1
fi
}
qiuchenly=../tool/CoreInject.dylib
# 安装文件
install_files() {
log_info "正在安装文件..."
xattr -cr ./macOSGod
xattr -cr $qiuchenly
codesign -fs - --all-architectures --deep $qiuchenly
# 检查目录是否存在
if [ ! -d "/usr/local/bin" ]; then
mkdir -p /usr/local/bin
fi
if [ ! -d "/usr/local/lib" ]; then
mkdir -p /usr/local/lib
fi
# 复制可执行文件
cp ./macOSGod /usr/local/bin/
cp $qiuchenly /usr/local/lib/
chmod +x /usr/local/bin/macOSGod
# 复制LaunchDaemon配置
cp com.qiuchenly.macos.god.plist /Library/LaunchDaemons/
chmod 644 /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
# 创建日志文件
touch /var/log/macos_god.log
touch /var/log/macos_god_error.log
chmod 644 /var/log/macos_god.log
chmod 644 /var/log/macos_god_error.log
log_success "文件安装成功"
}
# 启动服务
start_service() {
log_info "正在启动服务..."
# 加载LaunchDaemon
launchctl load /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
# 启动服务
launchctl start com.qiuchenly.macos.god
log_success "服务启动成功"
}
# 显示状态
show_status() {
log_info "服务状态:"
if launchctl list | grep -q com.qiuchenly.macos.god; then
log_success "服务正在运行"
else
log_warning "服务未运行"
fi
echo ""
log_info "查看日志:"
echo " tail -f /var/log/macos_god*.log"
echo ""
log_info "停止服务:"
echo " sudo launchctl unload /Library/LaunchDaemons/com.qiuchenly.macos.god.plist"
echo ""
log_info "重启服务:"
echo " sudo launchctl unload /Library/LaunchDaemons/com.qiuchenly.macos.god.plist"
echo " sudo launchctl load /Library/LaunchDaemons/com.qiuchenly.macos.god.plist"
}
# 主函数
main() {
log_info "正在安装上帝之眼..."
check_root
install_files
start_service
show_status
log_success "安装上帝之眼完成!"
}
# 运行主函数
main "$@"

Binary file not shown.

View File

@@ -1,258 +0,0 @@
<div align="center">
# 上帝之眼 (God's Eye)
> **一个强大的macOS系统级监控与注入工具**
> 提供深度进程监控、动态库注入和应用程序劫持等功能
[![macOS](https://img.shields.io/badge/macOS-10.15+-000000?style=for-the-badge&logo=apple&logoColor=white)](https://www.apple.com/macos/)
[![Architecture](https://img.shields.io/badge/Architecture-x86__64%20%7C%20arm64-007ACC?style=for-the-badge&logo=apple&logoColor=white)](https://developer.apple.com/silicon/)
[![License](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)
**作者**: [QiuChenly](https://github.com/qiuchenly)
**版本**: v1.0.0
**更新日期**: 2025年8月
---
</div>
## <img src="https://img.shields.io/badge/-Core-FF6B6B?style=flat&logo=eye"> 核心功能
上帝之眼能够在系统级别实现应用程序的无感知劫持和激活。通过关闭SIP系统完整性保护实现对应用程序内存的深度访问和修改让您无需手动修改应用程序文件即可获得完整的使用体验。
### 典型应用场景
- **Surge 6.x 自动激活**: 安装官方版本后,服务自动劫持并激活,重启后依然有效
### <img src="https://img.shields.io/badge/-Apps-4ECDC4?style=flat&logo=app-store"> 支持的应用程序
| 应用程序 | 版本 | 状态 | 功能描述 | 测试状态 |
|---------|------|------|----------|----------|
| **Surge** | 6.x | <img src="https://img.shields.io/badge/-Supported-00D4AA?style=flat"> | 网络代理工具自动激活 | 已适配 |
| **App Cleaner & Uninstaller** | 8.6.x | <img src="https://img.shields.io/badge/-Supported-00D4AA?style=flat"> | App卸载清理工具 | 已适配 |
**状态说明**:
- <img src="https://img.shields.io/badge/-Supported-00D4AA?style=flat"> **已支持**: 功能完整,可正常使用
- <img src="https://img.shields.io/badge/-Developing-FFA500?style=flat"> **开发中**: 正在适配,即将支持
- <img src="https://img.shields.io/badge/-Planned-9B59B6?style=flat"> **计划中**: 已列入开发计划
- <img src="https://img.shields.io/badge/-Not_Supported-E74C3C?style=flat"> **不支持**: 暂不支持或无法支持
本项目将持续扩展以下功能:
- 增强的安全监控能力
- 更精细的进程控制
- 自定义劫持规则配置
- 图形化配置界面
## <img src="https://img.shields.io/badge/-Features-3498DB?style=flat&logo=star"> 特性
- **系统级监控**: 以root权限运行提供深度系统监控能力
- **动态库注入**: 支持CoreInject.dylib动态库注入
- **后台服务**: 作为LaunchDaemon后台服务运行开机自启动
- **日志记录**: 完整的日志记录系统,便于调试和监控
- **多架构支持**: 支持Intel (x86_64) 和 Apple Silicon (arm64) 架构
- **自动化部署**: 提供一键安装和卸载脚本
## <img src="https://img.shields.io/badge/-System-E67E22?style=flat&logo=macos"> 系统要求
- **操作系统**: macOS 10.15 (Catalina) 或更高版本
- **处理器**: 支持 Intel (x86_64) 和 Apple Silicon (arm64) 架构
- **权限要求**: Root 权限(用于安装和运行)
- **SIP状态**: 系统完整性保护必须关闭
- **特殊要求**: 黑苹果用户需要安装amfi相关kext
## <img src="https://img.shields.io/badge/-Setup-2ECC71?style=flat&logo=terminal"> 安装说明
### 方法一:使用安装脚本(推荐)
1. **下载项目文件**
```bash
# 确保所有文件在同一目录下
ls -la
```
2. **运行安装脚本**
```bash
sudo ./install_service.sh
```
3. **验证安装**
```bash
# 检查服务状态需要sudo权限
sudo launchctl list | grep com.qiuchenly.macos.god
# 查看日志
tail -f /var/log/macos_god.log
```
### 方法二:手动安装
1. **复制文件到系统目录**
```bash
sudo cp ./macOSGod /usr/local/bin/
sudo cp ../tool/CoreInject.dylib /usr/local/lib/
sudo chmod +x /usr/local/bin/macOSGod
```
2. **安装LaunchDaemon配置**
```bash
sudo cp com.qiuchenly.macos.god.plist /Library/LaunchDaemons/
sudo chmod 644 /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
```
3. **启动服务**
```bash
sudo launchctl load /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
sudo launchctl start com.qiuchenly.macos.god
```
## <img src="https://img.shields.io/badge/-Files-9B59B6?style=flat&logo=file-code"> 项目结构
```
上帝之眼/
├── macOSGod # 主程序支持x86_64/arm64
├── com.qiuchenly.macos.god.plist # LaunchDaemon配置文件
├── install_service.sh # 安装脚本
├── uninstall_service.sh # 卸载脚本
└── readme.md # 项目说明文档
```
## <img src="https://img.shields.io/badge/-Service-34495E?style=flat&logo=server"> 服务管理
### 查看服务状态
```bash
# 使用sudo权限查看系统级服务
sudo launchctl list | grep com.qiuchenly.macos.god
# 或者查看所有系统服务
sudo launchctl list | grep qiuchenly
```
### 启动服务
```bash
sudo launchctl load /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
sudo launchctl start com.qiuchenly.macos.god
```
### 停止服务
```bash
sudo launchctl stop com.qiuchenly.macos.god
sudo launchctl unload /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
```
### 重启服务
```bash
sudo launchctl unload /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
sudo launchctl load /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
```
## <img src="https://img.shields.io/badge/-Logs-1ABC9C?style=flat&logo=file-text"> 日志监控
### 查看运行日志
```bash
tail -f /var/log/macos_god*.log
```
## <img src="https://img.shields.io/badge/-Remove-E74C3C?style=flat&logo=trash-2"> 卸载说明
### 使用卸载脚本(推荐)
```bash
sudo ./uninstall_service.sh
```
### 手动卸载
```bash
# 停止服务
sudo launchctl stop com.qiuchenly.macos.god
sudo launchctl unload /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
# 删除文件
sudo rm -f /usr/local/bin/macOSGod
sudo rm -f /usr/local/lib/CoreInject.dylib
sudo rm -f /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
sudo rm -f /var/log/macos_god*.log
```
## <img src="https://img.shields.io/badge/-Important-F39C12?style=flat&logo=alert-triangle"> 重要注意事项
### 系统要求
1. **权限要求**: 安装和运行需要root权限
2. **系统兼容性**: 支持macOS 10.15及以上版本
3. **架构支持**: 同时支持Intel和Apple Silicon处理器
### SIP设置要求
4. **关闭SIP**: 必须关闭系统完整性保护才能正常工作
```bash
# 检查SIP状态
csrutil status
# 应该显示: System Integrity Protection status: disabled.
```
### 黑苹果用户特殊要求
5. **OpenCore用户**: 如果使用OpenCore Legacy Patcher修改系统需要
- 安装amfi相关kext到OpenCore中如amfigetoutofmyway或amfibypass
- 确保SIP状态为disabled
- 否则程序将无法正常工作
### 安全提醒
6. **使用风险**: 本工具涉及系统级操作,请确保从可信来源获取
7. **备份重要**: 使用前建议备份重要数据
## <img src="https://img.shields.io/badge/-Help-95A5A6?style=flat&logo=help-circle"> 故障排除
### 服务无法启动
1. 检查文件权限
```bash
ls -la /usr/local/bin/macOSGod
ls -la /usr/local/lib/CoreInject.dylib
```
2. 检查LaunchDaemon配置
```bash
cat /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
```
3. 查看错误日志
```bash
tail -20 /var/log/macos_god_error.log
```
4. 检查服务状态需要sudo权限
```bash
sudo launchctl list | grep com.qiuchenly.macos.god
```
5. 如果服务加载失败,尝试重新加载
```bash
sudo launchctl unload /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
sudo launchctl load /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
```
### 权限问题
```bash
# 重置文件权限
sudo chmod +x /usr/local/bin/macOSGod
sudo chmod 644 /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
```
### 代码签名问题
```bash
# 移除代码签名限制
sudo xattr -cr /usr/local/bin/macOSGod
sudo xattr -cr /usr/local/lib/CoreInject.dylib
```
## <img src="https://img.shields.io/badge/-Legal-7F8C8D?style=flat&logo=shield"> 许可证与声明
本项目仅供学习和研究使用,请遵守相关法律法规。使用者需自行承担使用风险。
### 免责声明
- 本工具仅用于合法的学习和研究目的
- 使用者应确保在合法环境下使用
- 开发者不承担因使用本工具而产生的任何责任
---
小知识: 秋城落叶是一个重生之人大脑意外觉醒绑定了全球最强程序员系统所以破解App不在话下因为都是系统做的。 然后在梦中被慈溪托遗,让我夺回八国联军抢走本属于大清的一切,洗刷历史耻辱,所以破的大多都是外国软件,目前居住在华盛顿州 户籍是香港华裔。

View File

@@ -1,96 +0,0 @@
#!/bin/bash
set -euo pipefail
cd "$(dirname "$0")" || exit 1
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${BLUE}[*] $1${NC}"
}
log_success() {
echo -e "${GREEN}[+] $1${NC}"
}
log_warning() {
echo -e "${YELLOW}[!] $1${NC}"
}
log_error() {
echo -e "${RED}[×] $1${NC}"
}
# 检查是否以root权限运行
check_root() {
if [[ $EUID -ne 0 ]]; then
log_error "必须以root权限运行"
exit 1
fi
}
# 停止服务
stop_service() {
log_info "正在停止服务..."
# 停止并卸载LaunchDaemon
if launchctl list | grep -q com.qiuchenly.macos.god; then
launchctl stop com.qiuchenly.macos.god
launchctl unload /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
log_success "服务已停止"
else
log_warning "服务未运行"
fi
}
# 删除文件
remove_files() {
log_info "正在删除文件..."
# 删除可执行文件
if [[ -f /usr/local/bin/macOSGod ]]; then
rm -f /usr/local/bin/macOSGod
log_success "已删除 /usr/local/bin/macOSGod"
fi
if [[ -f /usr/local/lib/CoreInject.dylib ]]; then
rm -f /usr/local/lib/CoreInject.dylib
log_success "已删除 /usr/local/lib/CoreInject.dylib"
fi
# 删除LaunchDaemon配置
if [[ -f /Library/LaunchDaemons/com.qiuchenly.macos.god.plist ]]; then
rm -f /Library/LaunchDaemons/com.qiuchenly.macos.god.plist
log_success "已删除 /Library/LaunchDaemons/com.qiuchenly.macos.god.plist"
fi
# 删除日志文件
if [[ -f /var/log/macos_god.log ]]; then
rm -f /var/log/macos_god.log
log_success "已删除 /var/log/macos_god.log"
fi
if [[ -f /var/log/macos_god_error.log ]]; then
rm -f /var/log/macos_god_error.log
log_success "已删除 /var/log/macos_god_error.log"
fi
}
# 主函数
main() {
log_info "正在卸载上帝之眼..."
check_root
stop_service
remove_files
log_success "卸载上帝之眼完成!"
}
# 运行主函数
main "$@"

View File

@@ -1,7 +0,0 @@
set -euo pipefail
cd "$(dirname "$0")" || exit 1
chmod +x ./InjectLib
xattr -cr ./InjectLib
codesign -fs - ./InjectLib
sudo ./InjectLib $(pwd)