substitute vs Substrate vs fishhook:iOS/Mac Hook工具终极选型指南 substitute vs Substrate vs fishhookiOS/Mac Hook工具终极选型指南【免费下载链接】substituteA free runtime modification library.项目地址: https://gitcode.com/gh_mirrors/su/substitute如果你在 iOS 或 Mac 上开发需要劫持系统函数或第三方库的方法substitute、Substrate 和 fishhook是最常被拿来对比的三款 Hook 工具。其中substitute是一个免费的运行时修改库libsubstitute核心能力是在运行时改写函数机器码并安全地重定向调用Substrate是越狱生态里元老级的代码注入框架fishhook则是专注于重新绑定动态库符号的轻量工具。这篇文章用大白话讲清三者的原理差异、能力边界和适用场景帮你 3 分钟做出靠谱的选型决策。一、三分钟认识这三款 Hook 工具 substitute灵活的运行时函数劫持库substitute即 libsubstitute主打想 hook 谁就 hook 谁。它的做法是先反汇编目标函数的开头几字节把被覆盖的指令搬到一块**跳板trampoline**里再在原函数入口处写入跳转指令把调用重定向到你提供的替换函数同时回传一个旧函数指针方便你在钩子里继续调用原实现。除了函数级钩子它还提供两种更轻量的拦截方式——GOT/PLT 符号拦截和ObjC 消息拦截全部公共接口都集中在lib/substitute.h中核心改写逻辑在lib/hook-functions.c各架构ARM / ARM64 / x86的汇编与反汇编实现分别位于lib/arm/、lib/arm64/、lib/x86/目录。Substrate越狱生态的元老级框架SubstrateCydia Substrate是越狱 tweak 的地基绝大多数 Cydia 插件都建立在它之上。它提供MSHookFunction钩 C 函数、MSHookMessageEx钩 ObjC 方法并配套一批便捷宏和实例变量访问工具。值得一提的是substitute 内置了一个兼容层substrate/substrate.h让你原本写 Substrate 的代码几乎不改就能跑在 substitute 上迁移成本极低。fishhook轻量级动态符号重绑定工具fishhook 只做一件事把某个动态库引用的符号重新绑定到你的实现例如把malloc、read替换成自定义版本。它只改 GOT/PLT 表、不碰函数代码因此体积小巧、上手极快特别适合做底层函数透明替换。二、原理对比它们到底劫持了什么 三款工具的差异根源在于劫持点不同。理解了这一点选型就不再靠感觉机制代表工作方式副作用内联代码补丁substitute、Substrate改写函数入口指令 跳板转发需要可写可执行内存GOT/PLT 重绑定fishhook、substitute 的 interpose修改符号表指向不改代码但只覆盖动态符号ObjC 运行时Substrate、substitute替换方法 IMP仅限 ObjC 方法不碰 C 函数简单说内联补丁能力最强但动刀最深符号重绑定最温和、可沙盒化ObjC 运行时最省心但只能钩到 Objective-C 方法。三、关键维度横向对比 维度substituteSubstratefishhook可劫持范围任意 C/C 函数 ObjC 方法C 函数 ObjC 方法 实例变量动态库引用的 C 符号是否改写可执行代码是interpose 除外是否沙盒 / 非越狱 iOSinterpose 技术可用需越狱受只读 GOT 限制线程安全强主线程 暂停线程较弱较强架构支持ARM / ARM64 / x86多架构ARM / x86_64 为主是否依赖越狱否是否上手难度中等低宏丰富低维护状态已停更建议用 fork官方停更稳定但较老四、按场景选型我该用哪一个✅想 hook 任意 C/C 函数且要线程安全→ 选substitute它的substitute_hook_functions会暂停其他线程、原子地完成补丁还能回传旧实现指针是最全能的方案。维护老项目 / 越狱 tweak代码已经用MSHookFunction→ 选Substrate或直接用 substitute 的兼容层substrate/substrate.h平滑替换底层。只想替换少数几个 C 函数如日志、内存分配→ 选fishhook代码量最小、最不易出错。钩 Objective-C 方法 / 重写类行为→ 三者皆可substitute 的substitute_hook_objc_message和 Substrate 的MSHookMessageEx都能胜任且都比手写 ObjC 运行时代码干净。要在沙盒App Store 合规内做拦截→ 优先看 substitute 的substitute_interpose_imports或 fishhook二者都不依赖改写可执行内存。五、新手避坑指南 ⚠️注意维护状态substitute 上游已标注Unmaintained生产使用建议寻找活跃维护的 fork 版本Substrate 官方也已停更。选型时把谁在维护也纳入考量。主线程限制substitute 的函数钩子要求在主线程调用它会暂停其他线程以避免竞态非主线程调用会直接返回错误码可用substitute_strerror把错误码转成可读字符串定位问题。别 hook 太短的函数当函数开头的可补丁区域内就出现无条件返回等危险指令时内联补丁会失败——这正是 substitute 提供substitute_interpose_imports这类替代方案的价值所在。fishhook 的边界它只重绑定动态符号改不了内联调用、静态链接代码以及在较新 iOS 上只读的 dyld shared cache 里的系统符号。别混用非原子运行时修改substitute 的文档明确提示它与 Substrate 这类非原子替换方法的实现并存时可能产生竞态同一进程内尽量统一一套 Hook 方案。六、substitute 核心 API 速查 全部接口定义在lib/substitute.h最常用的几个substitute_hook_functions— 内联函数钩子主线程调用线程安全返回旧实现指针substitute_interpose_imports— GOT/PLT 符号拦截不改代码、原子操作技术层面可沙盒substitute_hook_objc_message— ObjC 方法钩子基于原子的class_replaceMethodsubstitute_open_image/substitute_find_private_syms— 查找已加载镜像中的私有符号地址substitute_strerror— 把SUBSTITUTE_ERR_*错误码转成可读字符串结语一句话总结要全能和线程安全选 substitute要越狱生态与低迁移成本选 Substrate要轻量替换少数 C 符号选 fishhook。三者并非互斥——理解内联补丁 / 符号重绑定 / ObjC 运行时这三种劫持机制你就能根据目标函数的类型、运行环境是否越狱、是否沙盒和线程要求做出最合适的选择。【免费下载链接】substituteA free runtime modification library.项目地址: https://gitcode.com/gh_mirrors/su/substitute创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

最新新闻

数学建模竞赛全流程实战指南:从选题到论文的决策与执行

数学建模竞赛全流程实战指南:从选题到论文的决策与执行

1. 赛题选择:从“看热闹”到“看门道”的决策逻辑每年高教社杯数学建模竞赛(以下简称“国赛”)题目公布的那一刻,对于绝大多数参赛队伍来说,第一个也是最关键的挑战,不是如何解题,而是如何选题。…

2026/8/22 17:09:57
微信云CloudBase服务~部署静态页面,用于(测试阶段)公网访问

微信云CloudBase服务~部署静态页面,用于(测试阶段)公网访问

一、打开腾讯云CloudBase服务平台 二、静态网站托管,进行单个或多个文件的部署 多个文件的部署(后台管理系统) 最新更新案例及使用说明 单个文件的部署(H5页面) 这两个 __auth/、cloud‑admin/ 是腾讯云 CloudBase 自…

2026/8/22 17:09:57
无线信道指纹识别:从特征工程到机器学习模型实战

无线信道指纹识别:从特征工程到机器学习模型实战

1. 项目概述与核心价值看到“移动通信无线信道指纹建模及识别”这个题目,很多通信专业的研究生可能会心头一紧,觉得这又是一个理论深奥、落地困难的纯学术课题。但作为一个在通信行业摸爬滚打多年的“老油条”,我想说,这道题恰恰是…

2026/8/22 17:09:57
FDE前沿部署:工业现场如何把AI Agent接进PLC产线

FDE前沿部署:工业现场如何把AI Agent接进PLC产线

姚雯峰的实践方向正是这一角色:自动化专业背景,一线新能源制造经验,掌握西门子S7-1200、三菱、欧姆龙PLC基础应用,现从事AI Agent、GEO及自动化工作流在企业场景的落地,独立研发GEO智能内容生产与多平台优化系统&#…

2026/8/22 17:09:57
Paperless-ngx 多语言部署完整指南:五步搞定中英双语文档管理系统

Paperless-ngx 多语言部署完整指南:五步搞定中英双语文档管理系统

Paperless-ngx 多语言部署完整指南:五步搞定中英双语文档管理系统 【免费下载链接】paperless-ngx A community-supported supercharged document management system: scan, index and archive all your documents 项目地址: https://gitcode.com/GitHub_Trending…

2026/8/22 17:09:57
C++可变参数模板:从基础语法到完美转发与元组实现

C++可变参数模板:从基础语法到完美转发与元组实现

1. 项目概述:为什么我们需要可变参数模板?在C98/03的时代,如果你需要写一个能处理任意数量参数的函数,比如一个打印函数print,你可能会感到非常头疼。你不得不为不同数量的参数编写多个重载版本:print(int)…

2026/8/22 17:04:57