nkhmelni/opainject_macos
GitHub: nkhmelni/opainject_macos
基于 ROP 链技术的 macOS ARM64/ARM64e 动态库注入工具,无需可执行内存即可向运行中进程注入 dylib。
Stars: 17 | Forks: 0
# opainject_macos
一款用于 macOS 的动态库注入工具,利用面向返回编程 (ROP) 技术将 dylib 注入到正在运行的进程中。
## 致谢
本项目是 Lars Fröder (opa334) 开发的 [opainject](https://github.com/opa334/opainject) 的 macOS 移植版,原项目专为 iOS 开发。核心的 ROP 注入方法和架构处理均源自原始实现。
**macOS 移植者:** [@nkhmelni](https://github.com/nkhmelni)
**主要改进:**
- `get_task_by_pid()` 函数实现了 Jonathan Levin 在 [PST2: Doing It Again](https://newosxbook.com/articles/PST2.html) 中文档化的处理器集枚举技术,从而在 macOS 上无需 `task_for_pid()` 或私有权限即可获取任务端口。
- 构建系统从 Makefile 迁移至 CMake,以便于使用。
- 移除了 Shellcode 注入方法;此实现仅使用 ROP 注入。
## 概述
opainject_macos 利用 ROP 链在目标进程的地址空间内执行 `dlopen()`,从而实现向任意进程的运行时 dylib 注入。该工具在目标进程中创建一个受控的 pthread,通过操纵线程状态来执行任意函数调用,并在必要时处理沙箱限制。
**支持的架构:** ARM64, ARM64e
## 功能特性
- **基于 ROP 的注入:** 无需分配可执行内存;利用现有的代码片段 (gadgets)
- **通用二进制支持:** 自动检测并匹配目标进程架构 (arm64/arm64e)
- **ARM64e PAC 处理:** 正确对函数指针进行签名,以兼容指针认证 (Pointer Authentication)
- **沙箱绕过:** 在需要时自动签发并使用沙箱扩展
## 系统要求
- macOS 11.0 或更高版本
- ARM64 或 ARM64e 处理器
- Root 权限 (sudo)
- 目标可执行文件的架构必须与被注入 dylib 的架构相匹配。两者必须同为 arm64 或 arm64e。
**注意:** 处理器集枚举技术若要成功执行,可能需要关闭系统完整性保护 (SIP),特别是在针对具有强化运行时 (Hardened Runtime) 的二进制文件时。或者,可以将实现修改为使用 `task_for_pid()`,但这需要 `com.apple.security.cs.debugger` 权限,且仅适用于用户二进制文件(不适用于系统或 App Store 二进制文件)。
## 构建
本项目使用 CMake 并生成包含 arm64 和 arm64e 切片的通用二进制文件。
```
mkdir build
cd build
cmake ..
make
```
编译后的二进制文件将位于 `build/opainject`,并将使用包含的权限自动进行代码签名 (ad-hoc)。
## 用法
```
sudo ./opainject /path/to/dylib
```
**参数:**
- `` — 目标进程的进程标识符
- `/path/to/dylib` — 要注入的动态库的绝对路径或相对路径
## 技术细节
**注入方法:** 仅 ROP (Return-Oriented Programming)
注入过程使用一个无限循环片段(`b .` 指令,操作码 `0x00000014`)作为同步原语。在目标进程中创建一个新的 pthread,使其在该片段处执行,从而允许通过受控的线程状态操纵来执行任意函数调用,包括 `dlopen()`、`sandbox_extension_consume()` 等。
**任务端口获取:** 处理器集枚举技术 (PST2)
该工具不直接使用 `task_for_pid()`,而是通过处理器集控制端口枚举所有任务,并按 PID 进行匹配。此方法无需私有权限即可运行,但根据目标进程的加固配置,可能需要关闭 SIP。
## 许可证
MIT License
Copyright (c) 2022 Lars Fröder (original iOS implementation)
Copyright (c) 2025 Nikita Hmelnitkii (macOS port)
有关完整的许可证文本,请参阅 [LICENSE](LICENSE)。
此衍生作品保持与原始 [opainject](https://github.com/opa334/opainject) 项目相同的宽松 MIT 许可证条款。
标签:0day挖掘, ARM64, ARM64e, Bash脚本, CMake, CTF工具, dlopen, dylib注入, iOS移植, PAC, ROP, shellcode, SSH蜜罐, task_for_pid, 二进制利用, 云资产清单, 内存操作, 内核安全, 动态库注入, 协议分析, 子域名枚举, 指针认证, 权限提升, 沙箱绕过, 漏洞搜索, 系统安全, 越狱技术, 进程注入, 逆向工程, 面向返回编程