HanSoBored/Zygisk-Loader
GitHub: HanSoBored/Zygisk-Loader
一个基于 Zygisk 的轻量级热插拔动态库注入模块,用于在 Android 上免重启注入并执行自定义逻辑。
Stars: 65 | Forks: 13
# ⚡ Zygisk-Loader


[](https://t.me/UnixPhoriaD)
**Zygisk-Loader** 是一个用 **纯 C** 编写的隐蔽、超轻量级 Zygisk 模块。它作为一个通用桥接器,动态地将外部共享库(`.so`)注入到特定的 Android 应用进程中。
该模块由 Rust 重写为 C,现在体积极小(**< 20KB**)且零运行时依赖。与需要重建和重启的传统模块不同,**Zygisk-Loader** 实现了 **“热插拔”** 工作流。你可以重新编译你的仪器库,推送到设备,然后只需重启目标应用即可立即应用更改。
## 关键特性
* **支持热插拔**:更新你的载荷(`.so`)并通过重启目标应用即可即时部署。无需设备重启。
* **超轻量级**:使用 **纯 C** 和标准 Android NDK 库构建。模块二进制文件体积微小(<20KB),确保内存占用最小且性能最高。
* **多应用支持**:基于 JSON 的配置允许同时为目标应用配置不同的载荷。
* **强健注入**:采用 **RAM 缓冲策略**。载荷在特权模式下读入内存,然后在后期专门化阶段写入应用缓存。这确保了与严格 SELinux 策略和隔离进程的兼容性。
* **隐蔽(自删除)**:载荷被写入磁盘、加载,然后**立即取消链接**。文件会立即从文件系统中消失,为文件扫描器留下极少的痕迹。
* **Zygisk API v5**:利用最新的 Zygisk API,确保与 Magisk、KernelSU 和 APatch 的最大兼容性。
* **配置驱动**:简单的基于 JSON 的配置。无硬编码包名。
* **零依赖**:原生轻量级 JSON 解析器,无任何外部库依赖。
## 架构
Zygisk-Loader 将 **注入器**(模块)与 **载荷**(你的逻辑)分离。它桥接了 Zygote 进程(Root)与应用进程(不可信)之间的权限差距。
```
flowchart TD
subgraph Storage [" /data/adb/modules/zygisk-loader/config/ "]
Config[("target.json")]
PayloadBin[("payload_*.so")]
end
subgraph Zygote [" Zygote Process (Root) "]
Step1[Parse JSON Config]
Step2[Match App Package]
Step3[Buffer Payload to RAM]
end
subgraph App [" Target App Process (User UID) "]
Fork((Fork))
Step4[Write RAM to App Cache]
Step5[dlopen Cache File]
Step6[unlink Cache File]
Logic[Payload Active]
end
Config --> Step1
Step1 --> Step2
Step2 --> PayloadBin
PayloadBin --> Step3
Step3 --> Fork
Fork --> Step4
Step4 --> Step5
Step5 --> Step6
Step5 -.-> Logic
Step6 -.->|Artifact Removed| App
```
## 目录结构
安装后,模块会创建一个配置目录:
```
/data/adb/modules/zygisk-loader/
├── module.prop
├── zygisk/
│ └── ...
└── config/ <-- WORKSPACE
├── target.json (JSON configuration with app-package to payload mapping)
└── payload_*.so (Your compiled libraries for each target)
```
## 用法
### 1. 安装
1. 下载最新的发布版 `.zip`。
2. 通过 Magisk / KernelSU / APatch 刷入。
3. 重启设备。
### 2. 配置(多应用支持)
创建或编辑 JSON 配置文件 `/data/adb/modules/zygisk-loader/config/target.json`:
```
# 为多个应用目标创建配置文件
cat > /data/adb/modules/zygisk-loader/config/target.json << 'EOF'
[
{
"app": "com.instagram",
"lib": "/data/adb/modules/zygisk-loader/config/payload_ssl.so"
},
{
"app": "com.facebook",
"lib": "/data/adb/modules/zygisk-loader/config/payload_custom.so"
},
{
"app": "com.threads",
"lib": "/data/adb/modules/zygisk-loader/config/payload_research.so"
}
]
EOF
```
**特性:**
- **多目标**:每个应用可拥有其专属的载荷
- **子进程覆盖**:基础包名匹配会自动处理类似 `com.app:remote` 或 `com.app:bg` 的进程
- **格式灵活**:JSON 解析器对空白字符不敏感
### 3. 部署载荷
将编译好的库文件复制到配置文件夹:
```
# 为每个目标复制有效载荷库
cp libpayload_ssl.so /data/adb/modules/zygisk-loader/config/payload_ssl.so
cp libpayload_custom.so /data/adb/modules/zygisk-loader/config/payload_custom.so
# 设置权限(Zygote 读取它们非常重要)
chmod 644 /data/adb/modules/zygisk-loader/config/*.so
```
### 4. 应用(热插拔)
强制停止目标应用。下次启动时,加载器将注入对应的载荷:
```
am force-stop com.instagram
am force-stop com.facebook
```
## 开发载荷
你的载荷无需了解 Zygisk。它作为一个标准共享库工作。你可以用 **C、C++ 或 Rust** 编写载荷。
### 选项 A:使用 C/C++(构造函数属性)
```
#include
#include
#define LOG_TAG "GhostPayload"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
// This function runs automatically when dlopen() is called
__attribute__((constructor))
void init() {
LOGI("Hello from inside the target application!");
LOGI("I have been loaded and my file on disk is likely already gone.");
// Your hooking logic (e.g., Dobby, And64InlineHook) goes here
}
```
### 选项 B:使用 Rust(ctor crate)
`Cargo.toml`:
```
[lib]
crate-type = ["cdylib"]
[dependencies]
ctor = "0.2"
android_logger = "0.13"
log = "0.4"
```
`src/lib.rs`:
```
use ctor::ctor;
use log::LevelFilter;
use android_logger::Config;
#[ctor]
fn init() {
android_logger::init_once(
Config::default().with_max_level(LevelFilter::Info).with_tag("GhostPayload")
);
// logic hooking start here
log::info!("Hello from inside the target application!");
}
```
## 技术约束
* **SELinux 兼容性**:该模块使用磁盘注入(写入-加载-取消链接)而非 `memfd`,以确保在所有 Android 版本和 SELinux 上下文中的最大兼容性。由于 `execmem` 限制,`memfd` 在 `untrusted_app` 域中常会失败。
* **隔离进程**:加载器会自动处理隔离进程(例如 `:remote` 服务),通过智能解析正确的数据目录路径。
## 免责声明
本工具仅供 **教育目的和安全研究** 使用。作者不对该软件的任何滥用负责。
## 许可证
本项目根据 MIT 许可证授权 - 详情见 [LICENSE](LICENSE) 文件。
标签:Android 免root, APatch, C语言开发, JSON配置, KernelSU, LangChain, Magisk兼容, Native 库热加载, NDK, RAM缓冲, Root权限, SELinux绕过, .so 热替换, Zygisk, Zygisk API v5, 动态注入, 即时生效, 可视化界面, 多应用注入, 安卓安全, 安卓工具, 安卓性能优化, 安卓逆向, 客户端加密, 文件无痕, 文件无痕注入, 模块开发, 自删除, 设备重启, 跨应用兼容, 轻量级, 零依赖