Compare commits

...

3 Commits

6 changed files with 554 additions and 171 deletions

View File

@@ -1443,7 +1443,8 @@
"co.podzim.PDFPals-setapp", "co.podzim.PDFPals-setapp",
"com.lowtechguys.Clop-setapp", "com.lowtechguys.Clop-setapp",
"com.dreamer.habits-setapp", "com.dreamer.habits-setapp",
"com.smallwhite-media.SwiftyLaunch-setapp" "com.smallwhite-media.SwiftyLaunch-setapp",
"com.imobie.FocuSee-setapp"
] ]
}, },
{ {

View File

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

View File

@@ -24,15 +24,20 @@ if [ ! -f "$SCRIPT_DIR/../InjectLib" ]; then
exit 1 exit 1
fi fi
# 软连接tool和config.json到二进制同级目录 # 创建目录
ln -fs "$SCRIPT_DIR/../tool" "/usr/local/bin/tool" mkdir -p "/usr/local/bin/QiuChenly"
ln -fs "$SCRIPT_DIR/../config.json" "/usr/local/bin/config.json" cp -r "$SCRIPT_DIR/../tool" "/usr/local/bin/QiuChenly/tool"
ln -fs "$SCRIPT_DIR/../frontend" "/usr/local/bin/frontend" 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/" echo "复制二进制文件到 /usr/local/bin/QiuChenly/"
cp "$SCRIPT_DIR/../InjectLib" "/usr/local/bin/" cp "$SCRIPT_DIR/../InjectLib" "/usr/local/bin/QiuChenly/"
chmod +x "/usr/local/bin/$BINARY_NAME" 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目录 # 复制plist文件到LaunchDaemons目录
echo "安装LaunchDaemon配置..." echo "安装LaunchDaemon配置..."

View File

@@ -21,10 +21,11 @@ launchctl unload "/Library/LaunchDaemons/$PLIST_NAME" 2>/dev/null || true
# 删除文件 # 删除文件
echo "删除文件..." echo "删除文件..."
rm -f "/usr/local/bin/InjectLib" rm -f "/usr/local/bin/QiuChenly/InjectLib"
rm -f "/usr/local/bin/tool" rm -rf "/usr/local/bin/QiuChenly/tool"
rm -f "/usr/local/bin/config.json" rm -f "/usr/local/bin/QiuChenly/config.json"
rm -f "/usr/local/bin/frontend" rm -rf "/usr/local/bin/QiuChenly/frontend"
rm -rf "/usr/local/bin/QiuChenly"
rm -f "/Library/LaunchDaemons/$PLIST_NAME" rm -f "/Library/LaunchDaemons/$PLIST_NAME"
rm -f "/var/log/hayaku_daemon.log" rm -f "/var/log/hayaku_daemon.log"
rm -f "/var/log/hayaku_daemon_error.log" rm -f "/var/log/hayaku_daemon_error.log"

View File

@@ -4,6 +4,8 @@
QiuChenly 应用商店是一个基于 HTTP 服务的 macOS 应用注入工具商店,以系统守护进程方式运行,提供 Web 界面管理和使用各种 macOS 应用注入脚本。 QiuChenly 应用商店是一个基于 HTTP 服务的 macOS 应用注入工具商店,以系统守护进程方式运行,提供 Web 界面管理和使用各种 macOS 应用注入脚本。
文档篇幅较长,很详细,善用搜索,记得看完。
## 预览 ## 预览
![main](imgs/浅色模式.png) ![main](imgs/浅色模式.png)
@@ -16,6 +18,12 @@ QiuChenly 应用商店是一个基于 HTTP 服务的 macOS 应用注入工具商
- 系统守护进程方式运行,开机自动启动 - 系统守护进程方式运行,开机自动启动
- Web 界面访问,方便直观 - Web 界面访问,方便直观
- 支持数百款 macOS 应用的注入和破解 - 支持数百款 macOS 应用的注入和破解
- **支持临时运行**:无需安装系统服务,可直接命令行启动测试
**使用方式:**
- **临时运行**:适合测试,无需安装,命令行启动即可
- **安装服务**:推荐长期使用,开机自启,自动重启
--- ---
@@ -42,7 +50,7 @@ QiuChenly 应用商店是一个基于 HTTP 服务的 macOS 应用注入工具商
在安装前,请确保项目目录包含以下关键文件: 在安装前,请确保项目目录包含以下关键文件:
``` ```
InjectShell/ InjectLib/
├── InjectLib # 主程序(编译生成) ├── InjectLib # 主程序(编译生成)
├── config.json # 配置文件 ├── config.json # 配置文件
├── tool/ # 工具目录 ├── tool/ # 工具目录
@@ -55,7 +63,69 @@ InjectShell/
--- ---
## 详细安装步骤 ## 临时运行(无需安装)
如果您只是想测试或临时使用,可以不必安装系统服务,直接使用命令行临时启动:
### 如何临时运行
1. **打开终端**
- 按下快捷键 **Command ⌘ + 空格**
- 输入 **终端** 并打开
2. **进入项目目录**
```bash
cd /Volumes/MySSD/InjectLib
# 或者你的项目实际路径
```
3. **直接运行程序**
```bash
sudo ./InjectLib --daemon config.json
```
4. **保持终端窗口打开**
- 服务会在当前终端窗口中运行
- 不要关闭终端窗口
- 按 **Ctrl + C** 可以停止服务
5. **访问 Web 界面**
- 打开浏览器访问:`http://localhost:15200`
### 临时运行的优缺点
**优点:**
- 无需安装,快速测试
- 不修改系统配置
- 停止后不留任何痕迹
- 适合临时使用或测试
**缺点:**
- 关闭终端窗口后服务会停止
- 不会开机自动启动
- 进程异常退出后不会自动重启
- 需要手动管理进程
- 仍然需要配置系统权限(完全磁盘访问 + App管理
### 重要提示
**即使临时运行,也必须授予系统权限:**
1. **配置完全磁盘访问权限**
- 系统设置 → 隐私与安全性 → 完全磁盘访问权限
- 添加项目路径下的 `InjectLib` 程序
2. **配置 App 管理权限**
- 系统设置 → 隐私与安全性 → App管理
- 添加项目路径下的 `InjectLib` 程序
详细的权限配置方法请参考后面的"安装后配置"章节。
---
## 详细安装步骤(推荐:开机自启)
如果您希望服务开机自动启动、异常退出后自动重启,建议按照以下步骤安装系统服务。
### 步骤 1进入项目目录 ### 步骤 1进入项目目录
@@ -87,8 +157,12 @@ sudo bash install_daemon.sh
安装过程会自动执行以下操作: 安装过程会自动执行以下操作:
1. 创建软链接:`tool``config.json``frontend``/usr/local/bin/` 1. 创建安装目录:`/usr/local/bin/QiuChenly/`
2. 复制二进制:`InjectLib``/usr/local/bin/InjectLib` 2. 复制所有文件到系统目录:
- `tool/` → `/usr/local/bin/QiuChenly/tool/`
- `config.json` → `/usr/local/bin/QiuChenly/config.json`
- `frontend/` → `/usr/local/bin/QiuChenly/frontend/`
- `InjectLib` → `/usr/local/bin/QiuChenly/InjectLib`
3. 安装守护进程配置:`com.qiuchenly.hayaku.daemon.plist` → `/Library/LaunchDaemons/` 3. 安装守护进程配置:`com.qiuchenly.hayaku.daemon.plist` → `/Library/LaunchDaemons/`
4. 加载并启动服务 4. 加载并启动服务
@@ -96,7 +170,7 @@ sudo bash install_daemon.sh
``` ```
安装Hayaku HTTP守护进程... 安装Hayaku HTTP守护进程...
复制二进制文件到 /usr/local/bin/ 复制二进制文件到 /usr/local/bin/QiuChenly/
安装LaunchDaemon配置... 安装LaunchDaemon配置...
启动服务... 启动服务...
安装完成! 安装完成!
@@ -109,108 +183,255 @@ xxxxx 0 com.qiuchenly.hayaku.daemon
--- ---
## 重要警告 - 请务必仔细阅读 ## 安装后配置(必须执行)
### 安装后绝对不能删除项目源文件夹! ### ⚠️ 授予程序必要的系统权限
**这是最重要的注意事项!** **这是最重要的步骤!如果不授权,服务将无法正常工作!**
#### 为什么不能删除 #### 为什么需要这些权限
安装脚本使用了**软链接Symbolic Link**机制,而不是复制文件 QiuChenly 应用商店的主程序 `InjectLib` 需要以下权限才能正常运行
| 文件/目录 | 源路径 | 目标路径 | 链接方式 | - **完全磁盘访问权限**:用于读取和修改应用程序包内的文件
| ---------------- | ---------------------- | ---------------------------- | ---------- | - **App管理权限**:用于管理和注入目标应用程序
| tool 工具目录 | `项目目录/tool/` | `/usr/local/bin/tool` | **软链接** |
| config.json 配置 | `项目目录/config.json` | `/usr/local/bin/config.json` | **软链接** |
| frontend 前端 | `项目目录/frontend/` | `/usr/local/bin/frontend` | **软链接** |
| InjectLib 程序 | `项目目录/InjectLib` | `/usr/local/bin/InjectLib` | 复制 |
#### 什么是软链接? #### 如何授予权限
软链接类似于 Windows 的"快捷方式",它只是一个指向原始文件的指针,**不是真实的文件拷贝**。 **注意:必须授权给安装后的程序路径 `/usr/local/bin/QiuChenly/InjectLib`**
``` ---
系统中的软链接 → 指向 → 项目源文件夹中的实际文件
```
如果您删除了项目源文件夹: **步骤 1配置完全磁盘访问权限**
- 软链接会失效(变成"死链接" ##### 方法 A图形界面操作推荐
- 服务启动时找不到 `tool``config.json``frontend` 目录
- 应用商店无法正常工作
- 所有功能完全失效
#### 示例说明 1. **打开系统设置**
- 点击屏幕左上角的 **苹果图标**
- 选择 **系统设置**(或 **系统偏好设置**,取决于 macOS 版本)
**正常情况:** 2. **进入隐私与安全性**
- 在左侧边栏中找到并点击 **隐私与安全性**
- 在右侧向下滚动,找到 **完全磁盘访问权限**
- 点击进入
3. **解锁设置**
- 点击左下角的 **锁图标**
- 输入您的 **管理员密码**
- 点击 **解锁**
4. **添加 InjectLib 程序**
- 点击应用列表下方的 **+** 按钮
- 在弹出的文件选择窗口中,按下键盘快捷键 **Command ⌘ + Shift ⇧ + G**
- 在弹出的"前往文件夹"输入框中输入:`/usr/local/bin/QiuChenly/`
- 点击 **前往**
- 选中 **InjectLib** 文件
- 点击 **打开**
5. **确认开关状态**
- 在应用列表中找到 **InjectLib**
- 确保它旁边的开关是 **✓ 蓝色/绿色开启状态**
- 如果是关闭状态,点击开关将其打开
6. **锁定设置**
- 点击左下角的 **锁图标** 锁定设置
##### 方法 B使用终端命令快速打开
如果您熟悉终端,可以直接执行以下命令打开对应设置页面:
```bash ```bash
/usr/local/bin/tool → InjectShell/tool/ open "x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles"
# 软链接指向源文件夹,一切正常
``` ```
**删除源文件夹后:** 然后按照方法 A 的步骤 3-6 操作即可。
---
**步骤 2配置 App 管理权限**
##### 方法 A图形界面操作推荐
1. **打开系统设置**
- 点击屏幕左上角的 **苹果图标**
- 选择 **系统设置**(或 **系统偏好设置**
2. **进入隐私与安全性**
- 在左侧边栏中找到并点击 **隐私与安全性**
- 在右侧向下滚动,找到 **App管理**(或 **自动化**,取决于 macOS 版本)
- 点击进入
3. **解锁设置**
- 点击左下角的 **锁图标**
- 输入您的 **管理员密码**
- 点击 **解锁**
4. **添加 InjectLib 程序**
- 点击应用列表下方的 **+** 按钮
- 在弹出的文件选择窗口中,按下键盘快捷键 **Command ⌘ + Shift ⇧ + G**
- 在弹出的"前往文件夹"输入框中输入:`/usr/local/bin/QiuChenly/`
- 点击 **前往**
- 选中 **InjectLib** 文件
- 点击 **打开**
5. **确认开关状态**
- 在应用列表中找到 **InjectLib**
- 确保它旁边的开关是 **✓ 蓝色/绿色开启状态**
- 如果是关闭状态,点击开关将其打开
6. **锁定设置**
- 点击左下角的 **锁图标** 锁定设置
##### 方法 B使用终端命令快速打开
如果您熟悉终端,可以直接执行以下命令打开对应设置页面:
```bash ```bash
/usr/local/bin/tool → InjectShell/tool/ open "x-apple.systempreferences:com.apple.preference.security?Privacy_AppManagement"
# 源文件夹已被删除,软链接失效
# 服务启动报错No such file or directory
``` ```
### 推荐做法 然后按照方法 A 的步骤 3-6 操作即可。
#### 1. 选择永久存放位置 ---
在安装**之前**,将项目文件夹移动到一个不会被删除的位置,例如: **步骤 3重启服务使权限生效**
配置完权限后,需要重启服务才能使权限生效。
##### 方法 A图形界面操作推荐
1. **打开"活动监视器"**
- 按下键盘快捷键 **Command ⌘ + 空格** 打开聚焦搜索
- 输入 **活动监视器**
- 按下 **回车键** 打开
2. **查找并结束 InjectLib 进程**
- 在右上角的搜索框中输入:**InjectLib**
- 找到 **InjectLib** 进程
- 双击该进程(或选中后点击上方的关闭按钮)
- 点击 **退出** 或 **强制退出**
3. **等待服务自动重启**
- LaunchDaemon 会自动重启服务(大约 1-2 秒)
- 您可以在活动监视器中看到 InjectLib 进程再次出现
##### 方法 B使用终端命令
如果您熟悉终端,可以执行以下命令:
```bash ```bash
# 推荐位置1用户主目录 sudo launchctl stop com.qiuchenly.hayaku.daemon
~/InjectShell sudo launchctl start com.qiuchenly.hayaku.daemon
# 推荐位置2当前位置如果您确定不会删除
/Volumes/MySSD/InjectShell/
``` ```
#### 2. 移动项目文件夹 #### 验证权限和服务
如果需要移动,请**先卸载,再移动,然后重新安装** ##### 方法 A图形界面验证推荐
**1. 检查服务是否运行**
- 打开 **活动监视器**Command ⌘ + 空格,输入"活动监视器"
- 在右上角搜索框输入:**InjectLib**
- 如果能看到 **InjectLib** 进程在运行,说明服务已启动
**2. 访问 Web 界面**
- 打开您的浏览器Safari、Chrome 等)
- 在地址栏输入:`http://localhost:15200`
- 如果能看到应用商店界面,说明服务正常运行
**3. 检查日志文件(可选)**
方法一:使用控制台应用
- 按下快捷键 **Command ⌘ + 空格**,输入 **控制台** 并打开
- 在左侧边栏选择 **系统日志**
- 在右上角搜索框输入:**hayaku_daemon**
- 查看日志中是否有 `Operation not permitted` 或 `Permission denied` 等权限错误
- 如果没有权限错误,说明配置成功
方法二:使用终端查看
```bash
# 查看错误日志
sudo tail -n 20 /var/log/hayaku_daemon_error.log
# 实时查看日志(按 Ctrl+C 停止)
sudo tail -f /var/log/hayaku_daemon_error.log
```
##### 方法 B使用终端验证
如果您熟悉终端,可以执行以下命令:
```bash ```bash
# 1. 卸载当前安装 # 查看服务状态
cd /当前项目路径/res sudo launchctl list | grep com.qiuchenly.hayaku.daemon
sudo bash uninstall_daemon.sh
# 2. 移动项目到新位置 # 测试运行主程序
mv /当前项目路径 /新的永久路径 sudo /usr/local/bin/QiuChenly/InjectLib --daemon /usr/local/bin/QiuChenly/config.json
# 如果能正常启动说明权限配置正确,按 Ctrl+C 停止
# 3. 在新位置重新安装 # 检查日志是否有权限错误
cd /新的永久路径/res tail -n 20 /var/log/hayaku_daemon_error.log
sudo bash install_daemon.sh
# 在浏览器中打开 Web 界面
open http://localhost:15200
``` ```
### 如何验证软链接是否正常 ##### 验证成功的标志
安装完成后,可以执行以下命令验证软链接 如果一切正常,您应该能够
- 在活动监视器中看到 InjectLib 进程运行
- 访问 `http://localhost:15200` 看到 Web 界面
- 日志文件中没有权限相关的错误
- 成功注入应用程序
#### 重要提示
- **必须授权给 `/usr/local/bin/QiuChenly/InjectLib`(安装后的路径)**
- **两个权限都必须配置**:完全磁盘访问 + App管理
- **每次更新程序后都需要重新授权**
- 授权后必须重启服务才能生效
- 权限授予后会永久生效,除非手动撤销
---
## 重要说明
### 安装后可以安全删除项目源文件夹
**安装采用文件复制方式**,所有必要的文件都会复制到 `/usr/local/bin/QiuChenly/` 目录中:
| 文件/目录 | 源路径 | 目标路径 | 方式 |
| ---------------- | ---------------------- | ----------------------------------------- | ------ |
| tool 工具目录 | `项目目录/tool/` | `/usr/local/bin/QiuChenly/tool/` | 复制 |
| config.json 配置 | `项目目录/config.json` | `/usr/local/bin/QiuChenly/config.json` | 复制 |
| frontend 前端 | `项目目录/frontend/` | `/usr/local/bin/QiuChenly/frontend/` | 复制 |
| InjectLib 程序 | `项目目录/InjectLib` | `/usr/local/bin/QiuChenly/InjectLib` | 复制 |
安装完成后,**服务完全独立运行**,不再依赖项目源文件夹。您可以:
- 安全地删除项目源文件夹
- 移动项目文件夹到其他位置
- 重命名项目文件夹
### 如何验证安装
安装完成后,可以执行以下命令验证文件:
```bash ```bash
ls -la /usr/local/bin/ | grep -E 'tool|config.json|frontend|InjectLib' ls -la /usr/local/bin/QiuChenly/
``` ```
正常输出应该类似 正常输出应该包含
``` ```
lrwxr-xr-x tool -> /Volumes/data/macOS_HookWorkSpace/InjectShell/tool drwxr-xr-x tool/
lrwxr-xr-x config.json -> /Volumes/data/macOS_HookWorkSpace/InjectShell/config.json -rw-r--r-- config.json
lrwxr-xr-x frontend -> /Volumes/data/macOS_HookWorkSpace/InjectShell/frontend drwxr-xr-x frontend/
-rwxr-xr-x InjectLib -rwxr-xr-x InjectLib
``` ```
**说明:** 所有文件都是实际复制的文件,不是符号链接
- `l` 开头表示软链接link
- `->` 后面是指向的源文件路径
- `InjectLib` 是实际复制的文件,不是链接
--- ---
@@ -283,28 +504,47 @@ http://localhost:15200
### 查看运行日志 ### 查看运行日志
系统会自动记录服务的运行日志和错误日志 系统会自动记录服务的运行日志和错误日志
#### 方法 A使用控制台应用推荐
1. **打开控制台应用**
- 按下快捷键 **Command ⌘ + 空格**
- 输入 **控制台** 并打开
2. **查看系统日志**
- 在左侧边栏选择 **系统日志**
- 在右上角搜索框输入:**hayaku_daemon**
- 可以实时查看日志更新
3. **筛选日志**
- 点击搜索框旁边的筛选按钮
- 可以按照时间、级别(错误、警告、信息)筛选
#### 方法 B使用终端命令
```bash ```bash
# 实时查看标准输出日志 # 实时查看标准输出日志
tail -f /var/log/hayaku_daemon.log sudo tail -f /var/log/hayaku_daemon.log
# 实时查看错误日志 # 实时查看错误日志
tail -f /var/log/hayaku_daemon_error.log sudo tail -f /var/log/hayaku_daemon_error.log
# 查看最近100行日志 # 查看最近100行日志
tail -n 100 /var/log/hayaku_daemon.log sudo tail -n 100 /var/log/hayaku_daemon.log
# 查看所有日志 # 查看所有日志
cat /var/log/hayaku_daemon.log sudo cat /var/log/hayaku_daemon.log
``` ```
**注意:** 查看 `/var/log/` 目录下的文件需要使用 `sudo` 管理员权限。
### 日志文件说明 ### 日志文件说明
| 日志文件 | 路径 | 内容 | | 日志文件 | 路径 | 内容 | 查看方式 |
| -------- | ---------------------------------- | ---------------------- | | -------- | ---------------------------------- | ---------------------- | --------------------- |
| 标准输出 | `/var/log/hayaku_daemon.log` | 正常运行信息、调试信息 | | 标准输出 | `/var/log/hayaku_daemon.log` | 正常运行信息、调试信息 | 控制台应用或终端+sudo |
| 错误输出 | `/var/log/hayaku_daemon_error.log` | 错误信息、异常堆栈 | | 错误输出 | `/var/log/hayaku_daemon_error.log` | 错误信息、异常堆栈 | 控制台应用或终端+sudo |
--- ---
@@ -398,17 +638,24 @@ sudo launchctl list | grep com.qiuchenly.hayaku.daemon
# 应该没有任何输出 # 应该没有任何输出
# 检查系统文件是否已删除 # 检查系统文件是否已删除
ls -la /usr/local/bin/ | grep -E 'InjectLib|tool|config.json|frontend' ls -la /usr/local/bin/QiuChenly/
# 应该提示目录不存在
# 或者检查整个安装路径
ls -d /usr/local/bin/QiuChenly 2>/dev/null
# 应该没有任何输出 # 应该没有任何输出
``` ```
### 卸载后可以做什么 ### 卸载说明
卸载完成后,项目源文件夹**不会被删除**,您可以 卸载操作会
- 安全地删除项目源文件 - 删除 `/usr/local/bin/QiuChenly/` 目录及所有文件
- 移动项目到其他位置后重新安装 - 删除 LaunchDaemon 配置文件
- 保留项目供以后使用 - 删除日志文件
- 项目源文件夹**不会被删除**(如果您还保留着的话)
卸载完成后,项目源文件夹可以保留供以后重新安装使用
--- ---
@@ -422,7 +669,120 @@ ls -la /usr/local/bin/ | grep -E 'InjectLib|tool|config.json|frontend'
## 故障排查 ## 故障排查
### 问题 1执行安装脚本提示权限不足 ### 问题 1服务无法正常工作或注入失败
**症状:**
- 服务启动了,但无法注入应用
- 日志中显示权限错误
- 提示"Operation not permitted"
- 无法访问应用程序包
**原因:** 主程序 `InjectLib` 没有必要的系统权限
**解决方案:**
#### 步骤 1检查当前权限状态
```bash
# 检查服务状态
sudo launchctl list | grep com.qiuchenly.hayaku.daemon
# 查看错误日志
tail -n 50 /var/log/hayaku_daemon_error.log
```
如果日志中出现以下关键词,说明是权限问题:
- `Operation not permitted`
- `Permission denied`
- `sandbox`
- `TCC`
#### 步骤 2为安装后的程序授权
**重要:安装后程序位于 `/usr/local/bin/QiuChenly/InjectLib`,需要给这个位置的程序授权!**
**A. 配置完全磁盘访问权限**
图形界面操作:
1. 点击屏幕左上角的 **苹果图标** → **系统设置**
2. 点击 **隐私与安全性** → **完全磁盘访问权限**
3. 点击左下角 **🔒** 输入密码解锁
4. 点击 **+** 按钮
5. 按 **Command ⌘ + Shift ⇧ + G**,输入:`/usr/local/bin/QiuChenly/`
6. 选择 **InjectLib** 并添加
7. 确保开关是 **✓ 开启状态**
终端快捷方式(可选):
```bash
# 打开系统设置(然后按照上面的步骤操作)
open "x-apple.systempreferences:com.apple.preference.security?Privacy_AllFiles"
```
**B. 配置 App 管理权限**
图形界面操作:
1. 点击屏幕左上角的 **苹果图标** → **系统设置**
2. 点击 **隐私与安全性** → **App管理**
3. 点击左下角 **🔒** 输入密码解锁
4. 点击 **+** 按钮
5. 按 **Command ⌘ + Shift ⇧ + G**,输入:`/usr/local/bin/QiuChenly/`
6. 选择 **InjectLib** 并添加
7. 确保开关是 **✓ 开启状态**
终端快捷方式(可选):
```bash
# 打开系统设置(然后按照上面的步骤操作)
open "x-apple.systempreferences:com.apple.preference.security?Privacy_AppManagement"
```
#### 步骤 3重启服务
图形界面操作:
1. 打开 **活动监视器**Command ⌘ + 空格,输入"活动监视器"
2. 搜索 **InjectLib**
3. 选中进程,点击 **退出**
4. 等待服务自动重启1-2秒
终端命令(可选):
```bash
sudo launchctl stop com.qiuchenly.hayaku.daemon
sudo launchctl start com.qiuchenly.hayaku.daemon
```
#### 步骤 4验证权限
图形界面验证:
1. 打开浏览器访问 `http://localhost:15200`
2. 在活动监视器中确认 InjectLib 进程运行正常
3. 打开"控制台"应用Command ⌘ + 空格,输入"控制台"),搜索 **hayaku_daemon** 检查是否有权限错误
终端验证(可选):
```bash
# 测试运行
sudo /usr/local/bin/QiuChenly/InjectLib --daemon /usr/local/bin/QiuChenly/config.json
# 按 Ctrl+C 停止
# 如果能正常启动且没有权限错误,说明配置成功
```
#### 常见权限错误示例
```
# 错误1没有完全磁盘访问权限
Error: Failed to access application bundle
Operation not permitted
# 错误2没有 App 管理权限
Error: Failed to inject into process
sandbox: denied(1) process-exec
# 解决方法:按照上面的步骤授权即可
```
---
### 问题 2执行安装脚本提示权限不足
**错误信息:** **错误信息:**
@@ -439,7 +799,7 @@ sudo bash install_daemon.sh
--- ---
### 问题 2:找不到 InjectLib 文件 ### 问题 3:找不到 InjectLib 文件
**错误信息:** **错误信息:**
@@ -459,7 +819,7 @@ sudo bash install_daemon.sh
--- ---
### 问题 3:服务无法启动 ### 问题 4:服务无法启动
**检查方法:** **检查方法:**
@@ -482,26 +842,24 @@ lsof -i :15200
# 如果是其他程序,关闭该程序或修改配置使用其他端口 # 如果是其他程序,关闭该程序或修改配置使用其他端口
``` ```
#### 原因 2软链接失效(删除了源文件夹) #### 原因 2文件缺失或损坏
```bash ```bash
# 检查软链接状态 # 检查安装文件是否完整
ls -la /usr/local/bin/tool ls -la /usr/local/bin/QiuChenly/
ls -la /usr/local/bin/config.json
ls -la /usr/local/bin/frontend
# 如果显示红色或"No such file or directory",说明源文件夹被删除了 # 应该包含InjectLib, tool/, config.json, frontend/
# 解决方案:恢复源文件夹,或重新安装 # 如果文件缺失,需要重新安装
``` ```
#### 原因 3权限问题 #### 原因 3权限问题
```bash ```bash
# 检查文件权限 # 检查文件权限
ls -la /usr/local/bin/InjectLib ls -la /usr/local/bin/QiuChenly/InjectLib
# 确保InjectLib有执行权限 # 确保InjectLib有执行权限
sudo chmod +x /usr/local/bin/InjectLib sudo chmod +x /usr/local/bin/QiuChenly/InjectLib
# 重启服务 # 重启服务
sudo launchctl stop com.qiuchenly.hayaku.daemon sudo launchctl stop com.qiuchenly.hayaku.daemon
@@ -510,7 +868,7 @@ sudo launchctl start com.qiuchenly.hayaku.daemon
--- ---
### 问题 4:无法访问 http://localhost:15200 ### 问题 5:无法访问 http://localhost:15200
**检查清单:** **检查清单:**
@@ -543,50 +901,44 @@ lsof -i :15200
--- ---
### 问题 5意外删除了项目源文件夹 ### 问题 6修改配置文件或工具后不生效
**症状:** **症状:**
- 服务无法启动 - 修改了项目源文件夹中的 `config.json` 或 `tool/` 目录,但服务没有变化
- 访问 Web 界面显示 404 或无法连接
- 日志中显示"No such file or directory" **原因:**
安装时使用的是文件复制,服务运行的是 `/usr/local/bin/QiuChenly/` 中的文件,不是源文件夹中的文件。
**解决方案:** **解决方案:**
#### 方案 1从备份恢复 修改配置后需要重新安装:
如果您有备份,恢复到原位置即可
#### 方案 2重新下载项目
```bash ```bash
# 1. 先卸载残留的配置(如果卸载脚本也丢失,手动清理) # 1. 停止服务
sudo launchctl unload /Library/LaunchDaemons/com.qiuchenly.hayaku.daemon.plist sudo launchctl stop com.qiuchenly.hayaku.daemon
sudo rm -f /Library/LaunchDaemons/com.qiuchenly.hayaku.daemon.plist
sudo rm -f /usr/local/bin/InjectLib
sudo rm -f /usr/local/bin/tool
sudo rm -f /usr/local/bin/config.json
sudo rm -f /usr/local/bin/frontend
# 2. 重新克隆或下载项目 # 2. 手动更新文件
cd /path/to/install sudo cp /path/to/InjectShell/config.json /usr/local/bin/QiuChenly/config.json
git clone <项目地址> # 或者更新工具目录
# 或解压下载的zip文件 sudo cp -r /path/to/InjectShell/tool /usr/local/bin/QiuChenly/
# 3. 编译项目 # 3. 启动服务
cd InjectShell sudo launchctl start com.qiuchenly.hayaku.daemon
mkdir build && cd build ```
cmake ..
make
# 4. 重新安装 或者完全重新安装
cd ../res
```bash
cd /path/to/InjectShell/res
sudo bash uninstall_daemon.sh
sudo bash install_daemon.sh sudo bash install_daemon.sh
``` ```
--- ---
### 问题 6:卸载后仍能访问 Web 界面 ### 问题 7:卸载后仍能访问 Web 界面
**原因:** 服务可能还在运行,或浏览器缓存 **原因:** 服务可能还在运行,或浏览器缓存
@@ -605,14 +957,14 @@ sudo kill -9 <PID>
--- ---
### 问题 7:更新项目后功能异常 ### 问题 8:更新项目后功能异常
**原因:** 服务仍在使用旧的二进制文件 **原因:** 服务使用的是安装时复制的文件,不会自动更新
**解决方案:** **解决方案:**
```bash ```bash
# 1. 重新编译项目 # 1. 重新编译项目(如果修改了源代码)
cd /path/to/InjectShell/build cd /path/to/InjectShell/build
make clean make clean
cmake .. cmake ..
@@ -621,15 +973,26 @@ make
# 2. 停止服务 # 2. 停止服务
sudo launchctl stop com.qiuchenly.hayaku.daemon sudo launchctl stop com.qiuchenly.hayaku.daemon
# 3. 更新系统中的二进制文件 # 3. 更新系统中的文件
sudo cp ../InjectLib /usr/local/bin/InjectLib sudo cp /path/to/InjectShell/InjectLib /usr/local/bin/QiuChenly/InjectLib
sudo chmod +x /usr/local/bin/InjectLib sudo chmod +x /usr/local/bin/QiuChenly/InjectLib
# 如果修改了配置或工具,也需要更新
sudo cp /path/to/InjectShell/config.json /usr/local/bin/QiuChenly/config.json
sudo cp -r /path/to/InjectShell/tool /usr/local/bin/QiuChenly/
sudo cp -r /path/to/InjectShell/frontend /usr/local/bin/QiuChenly/
# 4. 启动服务 # 4. 启动服务
sudo launchctl start com.qiuchenly.hayaku.daemon sudo launchctl start com.qiuchenly.hayaku.daemon
``` ```
**注意:** `tool``config.json``frontend` 是软链接,修改源文件会自动生效,无需手动更新 **或者更简单的方法:重新安装**
```bash
cd /path/to/InjectShell/res
sudo bash uninstall_daemon.sh
sudo bash install_daemon.sh
```
--- ---
@@ -653,17 +1016,28 @@ sudo launchctl start com.qiuchenly.hayaku.daemon
### 当前版本功能 ### 当前版本功能
- LaunchDaemon 守护进程安装 - LaunchDaemon 守护进程安装
- 软链接管理tool、config.json、frontend - 文件复制安装(所有文件独立运行
- 安装后可安全删除源文件夹
- 系统级服务运行 - 系统级服务运行
- Web 界面访问(端口 15200 - Web 界面访问(端口 15200
- 自动启动和崩溃重启 - 自动启动和崩溃重启
- 日志记录功能 - 日志记录功能
- 完整的卸载功能 - 完整的卸载功能
### 最近更新v2.0
**安装机制重大变更:**
- 从软链接改为文件复制方式
- 统一安装目录到 `/usr/local/bin/QiuChenly/`
- 安装后完全独立运行,不再依赖源文件夹
- 简化了部署和维护流程
### 待开发功能 ### 待开发功能
- 一键重新安装功能 - 一键重新安装功能
- 配置文件热更新 - 配置文件热更新
- 在线更新功能
--- ---
@@ -685,8 +1059,9 @@ sudo launchctl start com.qiuchenly.hayaku.daemon
--- ---
**文档版本:** v1.0 **文档版本:** v2.0
**最后更新:** 2025-10-14 **最后更新:** 2025-10-14
**适用项目版本:** InjectShell 4.0 **适用项目版本:** InjectShell 4.0+
**主要变更:** 安装机制从软链接改为文件复制
--- ---

Binary file not shown.