第三节 Theos 与 MonkeyDev
学习目标
学完本节,希望你能够:
- 用一句话说清 Theos 和 MonkeyDev 各自在干啥、有啥区别。
- 说出两者在「开发模式、编译系统、调试方式」上的不同,并能对照表格选型。
- 看懂 Logos 和 CaptainHook 的简单示例,知道分别用在哪个框架里。
- 根据场景(纯越狱开发、逆向分析、非越狱调试)选 Theos 还是 MonkeyDev(或组合用)。
- 会做「创建项目 → 编译 → 打包 → 安装」的基本流程(至少一种)。
阅读提示:Logos、CaptainHook 的语法细节后面实战会反复用,这里先建立「谁用哪种语法」的印象即可。
常见疑问:两个都要学吗?------建议都接触;入门可先用 MonkeyDev 上手快,写越狱插件发布时常用 Theos 打包。
一、Theos 是啥?用一句话说清楚
Theos 是经典的越狱开发框架:轻量、靠 Make 编译、支持 Logos 语法,用来写 Tweak、打成 deb、装到越狱设备。说白了就是「命令行一套搞掂越狱插件」的工具链。
在干啥、有啥组件
- nic.pl:选模板、生成项目骨架。
- make:编译、依赖解析。
- dpkg-deb:打包成 deb。
核心语法是 Logos(预处理成 Objective-C 再编译),写 Hook 特别省事:
objc
%hook ClassName
- (void)methodName {
%orig; // 调用原始方法
NSLog(@"Hooked!");
}
%end
%ctor {
NSLog(@"Tweak loaded!");
}
项目长啥样
MyTweak/
├── Makefile # 构建配置
├── control # 包信息
├── Tweak.x # 主代码(Logos)
├── plist # 过滤(注入哪些进程)
└── layout/ # 安装时的目录结构
好处和坏处
好处 :轻、编译快、配置灵活、社区例子多、学一圈能掌握底层流程。
坏处:调试要自己配 debugserver/LLDB,没有「非越狱重签名」那一套,工具链偏命令行。
二、MonkeyDev 是啥?用一句话说清楚
MonkeyDev 是集成化的逆向开发环境:基于 Theos,但接进 Xcode,支持越狱 + 非越狱,用 CaptainHook 或 Logos 都行。说白了就是「用 Xcode 写 Tweak、一键运行调试」的那一套。
在干啥、有啥模板
- MonkeyApp:注入第三方 App(重签名 + 注入 dylib)。
- CaptainHook Tweak / Logos Tweak:写 Hook 代码,选一种语法即可。
- MonkeyLibrary:开发动态库。
- Command-line Tool:命令行工具。
常用的是 CaptainHook 语法(更接近原生 C/OC 写法):
objc
CHDeclareClass(ClassName);
CHOptimizedMethod(0, self, void, ClassName, methodName) {
CHSuper(0, ClassName, methodName);
NSLog(@"Hooked with CaptainHook!");
}
集成了一堆东西
class-dump、Reveal、Cycript、fishhook、libsubstrate 等都会帮你塞进工程,开箱即用。
好处和坏处
好处 :开箱即用、调试友好、支持非越狱、体验像正常 iOS 开发。
坏处:只支持 macOS、跟 Xcode 版本绑定、工程相对重。
三、Theos 和 MonkeyDev 怎么比?记一张表
| 维度 | Theos | MonkeyDev |
|---|---|---|
| 开发模式 | 越狱插件 | 越狱 + 非越狱 |
| 编译系统 | GNU Make | Xcode + Make |
| IDE | 文本编辑器 | Xcode 集成 |
| 调试 | 手动配 LLDB | 集成调试 |
| 学习曲线 | 中等 | 较低 |
记一句:要轻量、要发 Cydia 插件、要完全自己控流程 → Theos;要快速逆向、要非越狱调试、习惯 Xcode → MonkeyDev。
四、语法对比:Logos 和 CaptainHook
Theos(Logos)示例
objc
%hook SpringBoard
- (void)applicationDidFinishLaunching:(id)application {
%orig;
UIAlertController *alert = [UIAlertController
alertControllerWithTitle:@"Hello" message:@"From Theos!"
preferredStyle:UIAlertControllerStyleAlert];
// ... 显示 Alert
}
%end
MonkeyDev(CaptainHook)示例
objc
#import <CaptainHook/CaptainHook.h>
CHDeclareClass(SpringBoard);
CHOptimizedMethod(1, self, void, SpringBoard, applicationDidFinishLaunching, id, application) {
CHSuper(1, SpringBoard, applicationDidFinishLaunching, application);
dispatch_after(...)^{
// 显示 Alert "From MonkeyDev!"
};
}
五、构建流程对比
Theos 一般怎么干
记成一句话:nic.pl 建项目 → 改 Makefile / Tweak.x / plist → make → make package → make install。
bash
$ nic.pl # 选 iphone/tweak 等
# 编辑 Makefile, Tweak.x, control, plist
$ make
$ make package
$ make install # 设备 SSH 要配好
MonkeyDev 一般怎么干
在 Xcode 里选模板(如 MonkeyApp)→ 选目标 App → 写 Hook → 点 Run,自动重签名、安装、运行、调试。
六、项目结构对比
Theos
MyTweak/
├── Makefile
├── control
├── Tweak.x
├── MyTweak.plist
├── layout/.../MyTweak.dylib
└── .theos/obj、packages
MonkeyDev
MonkeyAppDemo/
├── *.xcodeproj
├── Dylib/ # Hook 代码
├── Targets.plist # 目标 App
├── Sign.plist # 重签名
└── Products/
七、选 Theos 还是 MonkeyDev?一句话场景
选 Theos 当:
- 纯越狱开发(Cydia 插件、系统级修改)。
- 要精细控制构建、跨平台(macOS/Linux)。
- 想学底层:Makefile、打包、安装路径。
选 MonkeyDev 当:
- 逆向分析第三方 App、非越狱调试。
- 快速验证想法、要断点单步。
- 习惯 Xcode、想图形化调试。
组合用
用 Theos 写核心 dylib,用 MonkeyDev 工程加载、调试;或 Theos 打包发布,MonkeyDev 只做本地验证。
八、迁移与混合使用
Theos 项目迁到 MonkeyDev
把 .x 改成 .m,Logos 转成 CaptainHook(或继续用 Logos 模板),在 MonkeyDev 里建工程、配 Target。
混合使用
Theos 编出 dylib,拷进 MonkeyDev 工程里用 dlopen 加载,方便在 Xcode 里调。
九、配置与调试一句话
Theos Makefile 要点
makefile
ARCHS = arm64 arm64e
TARGET = iphone:clang:latest:13.0
TWEAK_NAME = MyTweak
MyTweak_FILES = Tweak.x
include $(THEOS_MAKE_PATH)/tweak.mk
after-install:: install.exec "killall -9 SpringBoard"
调试
- Theos :设备上跑 debugserver,Mac 上 LLDB
process connect connect://设备:端口,下断点。 - MonkeyDev:直接在 Xcode 里断点、看控制台。
十、小案例与注意(法律/道德)
小案例 1(Theos):Hook 某个系统类,在方法里打日志或弹窗,用于确认 Tweak 已加载------纯技术演示。
小案例 2(内购/破解类) :
先说一句法律和道德 :任何绕过内购、破解付费、传播破解包的行为,都可能违反法律和服务条款。这里仅作「技术原理」说明,不得用于未授权应用或传播 。
技术上,有人会 Hook SKPaymentQueue 等类来观察或模拟购买流程;仅限在自己有权测试的应用或学习环境中理解机制,切勿越界。
十一、最佳实践记一句
- Theos :用
%new、%property、%group、%init组织代码;发 Cydia 用 Theos 打包更常见。 - MonkeyDev :用 Category 分文件、注意 weak 避免循环引用、UI 放主线程、需要延迟用
dispatch_after。
本节小结
你只要记住这几条就行:
- Theos = 越狱开发框架,Logos + Make,轻量、灵活、发 deb;MonkeyDev = Theos + Xcode,越狱+非越狱,CaptainHook/Logos,调试方便。
- 选型记一句:纯越狱、要控流程 → Theos;逆向、非越狱、要调试 → MonkeyDev;可以两者组合用。
- 构建:Theos 是
nic.pl → make → make package install;MonkeyDev 是 Xcode 里 Run 一键到底。 - 涉及内购、破解、传播的,仅限授权/学习环境,遵守法律与道德。
本节术语速查
| 术语 | 一句话解释 |
|---|---|
| Logos | Theos 用的预处理语法,用 %hook/%orig/%end 等写 Hook,再转成 OC 编译。 |
| CaptainHook | MonkeyDev 常用的一套 C 宏,用来声明和实现 Hook,更接近原生写法。 |
| Tweak | 越狱插件,多为 dylib + plist,由 Substrate 等注入到目标进程。 |
| deb | Debian 包格式,Theos 打包出来的安装包。 |
本节思考与练习
- 概念:用一句话说出 Theos 和 MonkeyDev 的最大区别(从「谁用、怎么编译、怎么调试」里选一点说)。
- 应用:若你要「给某个第三方 App 加一个按钮并调试」,你会优先选 Theos 还是 MonkeyDev?为什么?
- 动手 :用 Theos 的
nic.pl创建一个 tweak 项目,不改代码,只执行make,看能否生成 dylib。 - 综合:查一下你当前 Xcode 版本,再查 MonkeyDev 支持的 Xcode 版本,判断你本机适不适合装 MonkeyDev。
下一节预告 :下一节讲 Theos 安装------在 macOS 上怎么装 Theos、配环境变量、装 ldid、对接 Xcode 15 等,一步步跑通。