RustyJackie/RustyInjector
GitHub: RustyJackie/RustyInjector
一款基于 ptrace 的 Linux 共享库注入工具,无需 GDB 和临时文件即可将 .so 库隐蔽注入运行中的进程。
Stars: 0 | Forks: 0
# Rusty Injector
一个用于将 `.so` 共享库注入正在运行的 Linux 进程的 Python 工具。
主要方法是直接通过 ctypes 使用 **ptrace(2)** —— 无需 GDB 子进程,无需临时文件,在 `ps` 中没有任何额外可见内容。GDB 作为非 x86_64 目标的后备方案。
## 工作原理
注入器附加到目标进程,通过 `mmap` 分配一个小的临时页,将 `dlopen()` shellcode 存根写入其中,执行它,然后进行清理 —— 将临时页归零,取消映射,恢复原始寄存器并分离。进程继续运行,就像什么都没发生一样,而你的库已加载到其内存空间中。
```
attach → mmap scratch page → write dlopen stub → execute → zero + munmap → restore → detach
```
## 系统要求
- Linux x86_64(ptrace 方法)/ 任意架构(gdb 方法)
- Python 3
- `sudo` 或 root 权限
- `gdb` —— 仅在使用 `--method gdb` 时需要
## 安装
```
git clone https://github.com/RustyJackie/RustyInjector.git
cd RustyInjector
chmod +x injector.py
```
## 用法
```
sudo python3 injector.py
sudo python3 injector.py --pid
```
### 示例
```
# 通过名称注入进程
sudo python3 injector.py nginx /tmp/hook.so
# 注入到特定 PID
sudo python3 injector.py --pid 1337 /tmp/hook.so
# 通过 memfd 在 /proc/pid/maps 中隐藏库路径
sudo python3 injector.py nginx /tmp/hook.so --memfd
# 通过检查 /proc/pid/maps 验证注入是否成功
sudo python3 injector.py nginx /tmp/hook.so --verify
# 使用 GDB fallback (适用于任何架构)
sudo python3 injector.py nginx /tmp/hook.so --method gdb
# Dry run — 显示将会发生的操作而无需实际注入
sudo python3 injector.py nginx /tmp/hook.so --dry-run
# 静默运行并将日志写入文件
sudo python3 injector.py nginx /tmp/hook.so --silent --log /tmp/inject.log
```
### 所有选项
| 标志 | 描述 |
|------|-------------|
| `--pid ` | 通过 PID 而非进程名指定目标 |
| `--method ptrace\|gdb` | 注入后端(默认:ptrace) |
| `--memfd` | 在 memfd 中暂存库 —— 向目标的 `/proc/pid/maps` 隐藏真实路径 |
| `--mask-comm [NAME]` | 在 `ps`/`top` 中伪装注入器进程名(默认:`kworker/0:0`) |
| `--verify` | 注入后检查 `/proc/pid/maps` 以确认库已加载 |
| `--dry-run` | 显示将发生的操作而不进行注入 |
| `--silent` | 抑制所有输出 |
| `--log PATH` | 将日志条目写入文件 |
| `--abort-on-monitors` | 如果检测到监控工具(strace、auditd 等)则退出 |
| `--no-root-check` | 跳过 root 权限检查 |
## 构建要注入的 .so
```
// payload.c
#include
__attribute__((constructor))
void on_load() {
printf("[+] injected!\n");
}
```
```
gcc -shared -fPIC -o payload.so payload.c
```
`constructor` 属性使 `on_load()` 在库加载到目标进程后立即自动运行。
## 项目结构
```
RustyInjector/
├── injector.py # CLI entry point
├── core/
│ ├── ptrace.py # Primary injection engine (ptrace + shellcode)
│ ├── shellcode.py # mmap / dlopen / munmap / zero stubs (x86_64)
│ ├── gdb.py # GDB fallback
│ └── stealth.py # jitter, memfd staging, monitor detection, comm masking
└── utils/
├── log.py # Output helpers, colours, spinner, in-memory log
├── signals.py # SIGINT/SIGTERM handlers with guaranteed detach
└── preflight.py # Preflight checks, PID resolution, library validation
```
## 免责声明
仅供教育目的和授权测试使用。请勿在你不拥有的系统或进程上使用此工具。
## 许可证
MIT —— 详见 [LICENSE](LICENSE)。
标签:CTF学习, Ctypes, Dlopen, DNS枚举, EDR绕过, GDB, Hakrawler, Hook, Memfd, Ptrace, Python, Rootkit, SecList, Shellcode, SO注入, SSH蜜罐, Web路径扫描, x86_64, Zeek, 云资产清单, 内存取证, 内存操作, 内网渗透, 动态加载, 动态库注入, 后门, 嗅探欺骗, 技术调研, 无后门, 无文件注入, 权限维持, 注入器, 私有化部署, 系统编程, 网络安全工具, 进程注入, 进程调试, 逆向工具, 逆向工程, 防御规避, 高交互蜜罐