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, 二进制利用, 云资产清单, 内存操作, 内核安全, 动态库注入, 协议分析, 子域名枚举, 指针认证, 权限提升, 沙箱绕过, 漏洞搜索, 系统安全, 越狱技术, 进程注入, 逆向工程, 面向返回编程