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, 云资产清单, 内存取证, 内存操作, 内网渗透, 动态加载, 动态库注入, 后门, 嗅探欺骗, 技术调研, 无后门, 无文件注入, 权限维持, 注入器, 私有化部署, 系统编程, 网络安全工具, 进程注入, 进程调试, 逆向工具, 逆向工程, 防御规避, 高交互蜜罐