substitute:被严重低估的免费运行时修改库,一篇看懂它的核心能力

📅 2026/8/22 15:02:55
substitute:被严重低估的免费运行时修改库,一篇看懂它的核心能力
substitute被严重低估的免费运行时修改库一篇看懂它的核心能力【免费下载链接】substituteA free runtime modification library.项目地址: https://gitcode.com/gh_mirrors/su/substitute如果你听说过给正在运行的程序打补丁这件事那一定得认识substitute——这是一款完全免费的运行时修改库Runtime Modification Library专门在 macOS / Darwin 系统上对运行中的进程做函数 Hook、符号查找和动态注入。它最大的杀手锏是既能改写机器码也能在不触碰可执行内存的前提下修改导入表还能安全地 Hook Objective-C 消息。下面用一篇短文带你快速看懂它的核心能力。一分钟认识 substitutesubstitute 的定位很简单让你在程序运行过程中修改它的行为而不必重新编译或重启目标进程。它提供三大类核心 API全部集中定义在 substitute.h 这个公共头文件里函数 Hook把目标函数的入口劫持到你的替身函数导入拦截直接改写符号解析表从根源上替换依赖Objective-C Hook拦截 ObjC 消息分发改写方法实现 对新手来说把它理解成给活着的进程动手术的工具就好——手术刀精准而且不拆掉整个身体。能力一函数 Hook改写机器码这是最经典的能力对应函数substitute_hook_functions。它做的事情是读取目标函数开头的机器码生成一段跳板trampoline保存被覆盖的原始指令把原函数入口改写成跳转到你的替身通过old_ptr让你随时能调回原始实现最关键的一点是线程安全它会在改写瞬间暂停其他线程避免别的线程正好处在被改写的代码里。实现细节可见 hook-functions.c配合内存操作模块 execmem.c 完成跨页面写入。能力二导入拦截不碰可执行内存对应函数substitute_interpose_imports实现在 interpose.c。它走的是另一条路——不修改代码而是改写GOT/PLT 导入表让某个库在查找符号时拿到你指定的地址。这带来几个独特优势✅ 不需要可执行内存写入权限沙盒环境如 iOS / PaX MPROTECT也能用✅ 用原子指令完成天然是线程安全的✅ 不需要为每种 CPU 架构单独写代码✅ 只影响单个库的世界观不波及整个程序能力三Objective-C 方法 Hook对应函数substitute_hook_objc_message实现在 objc.c。它基于系统原生的class_replaceMethod做原子替换并且贴心地自动生成调用父类的跳板——哪怕原方法根本没有实现你也能拿到一个可调用的 IMP。对做 iOS/macOS 逆向和插件开发的工程师来说这是最顺手的一把刀。隐藏大招动态注入 跨架构反汇编除了 Hooksubstitute 还能做到两件很多人不知道的事1. 跨进程动态注入通过 Mach 任务级接口把代码注入到另一个正在运行的进程里实现见 inject.c 与配套的 darwin-inject-asm.S。2. 跨架构指令重写内置了 ARM、ARM64、x86、x86_64 四套反汇编器能在跳板里忠实重放原始指令。相关实现分布在arm/ 、 arm64/ 、 x86/指令重写核心 transform-dis.c 与跳转分析 jump-dis.c此外项目还带一层Substrate 兼容层substrate-compat.c让老插件代码能平滑迁移。项目结构速览substitute/ ├── lib/ # 核心库 │ ├── darwin/ # macOS 专属注入、拦截、ObjC │ ├── arm/ arm64/ # ARM 架构反汇编 │ ├── x86/ # x86 架构反汇编 │ └── cbit/ # 内部队列/向量工具 ├── darwin-bootstrap/ # macOS 引导注入包deb ├── substrate/ # Substrate 兼容头文件 ├── test/ # 各能力单元测试 └── script/ # 构建/生成脚本如何获取与开始获取仓库如需克隆git clone https://gitcode.com/gh_mirrors/su/substitute建议的阅读路径先读 substitute.h三大 API 一目了然看 test-inject.c 和 test-hook-functions.c 理解用法需要引导注入时参考 darwin-bootstrap/ 下的 launchd 注入与 posixspawn-hook.c许可证说明免费可商用substitute 采用LGPL 2.1附带静态链接例外部分文件甚至处于公有领域public domain。也就是说学习和商业使用基本没有门槛详见 LICENSE.txt。总结为什么它被低估substitute 把运行时修改最容易踩的坑——线程安全、跳板生成、跨架构、沙盒兼容——全部封装成了干净的 C 接口。它没有铺天盖地的宣传却是逆向、插件、调试工具圈里真正能打的底层基建。想 Hook 函数→substitute_hook_functions沙盒里改符号→substitute_interpose_importsHook ObjC 方法→substitute_hook_objc_message下一篇如果你想深入了解跳板机制和指令重写的细节建议直接从 transform-dis.h 开始读源码。【免费下载链接】substituteA free runtime modification library.项目地址: https://gitcode.com/gh_mirrors/su/substitute创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考