3.Theos 与 MonkeyDev

第三节 Theos 与 MonkeyDev

学习目标

学完本节,希望你能够:

  1. 用一句话说清 Theos 和 MonkeyDev 各自在干啥、有啥区别。
  2. 说出两者在「开发模式、编译系统、调试方式」上的不同,并能对照表格选型。
  3. 看懂 Logos 和 CaptainHook 的简单示例,知道分别用在哪个框架里。
  4. 根据场景(纯越狱开发、逆向分析、非越狱调试)选 Theos 还是 MonkeyDev(或组合用)。
  5. 会做「创建项目 → 编译 → 打包 → 安装」的基本流程(至少一种)。

阅读提示: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

本节小结

你只要记住这几条就行:

  1. Theos = 越狱开发框架,Logos + Make,轻量、灵活、发 deb;MonkeyDev = Theos + Xcode,越狱+非越狱,CaptainHook/Logos,调试方便。
  2. 选型记一句:纯越狱、要控流程 → Theos;逆向、非越狱、要调试 → MonkeyDev;可以两者组合用。
  3. 构建:Theos 是 nic.pl → make → make package install;MonkeyDev 是 Xcode 里 Run 一键到底。
  4. 涉及内购、破解、传播的,仅限授权/学习环境,遵守法律与道德。

本节术语速查

术语 一句话解释
Logos Theos 用的预处理语法,用 %hook/%orig/%end 等写 Hook,再转成 OC 编译。
CaptainHook MonkeyDev 常用的一套 C 宏,用来声明和实现 Hook,更接近原生写法。
Tweak 越狱插件,多为 dylib + plist,由 Substrate 等注入到目标进程。
deb Debian 包格式,Theos 打包出来的安装包。

本节思考与练习

  1. 概念:用一句话说出 Theos 和 MonkeyDev 的最大区别(从「谁用、怎么编译、怎么调试」里选一点说)。
  2. 应用:若你要「给某个第三方 App 加一个按钮并调试」,你会优先选 Theos 还是 MonkeyDev?为什么?
  3. 动手 :用 Theos 的 nic.pl 创建一个 tweak 项目,不改代码,只执行 make,看能否生成 dylib。
  4. 综合:查一下你当前 Xcode 版本,再查 MonkeyDev 支持的 Xcode 版本,判断你本机适不适合装 MonkeyDev。

下一节预告 :下一节讲 Theos 安装------在 macOS 上怎么装 Theos、配环境变量、装 ldid、对接 Xcode 15 等,一步步跑通。

相关推荐
长沙火山4 小时前
5.macOS 安装 Theos 完整教程
逆向·ios逆向
长沙火山5 小时前
2.开发工具
逆向·ios逆向
长沙火山2 天前
第二十节_Android_加固原理
逆向·安卓逆向
长沙火山3 天前
第十六节_分析_WebSocket_API_请求
逆向·安卓逆向
长沙火山3 天前
第十三节_绕过_SSL_Pinning
逆向·安卓逆向
长沙火山3 天前
第十四节_Android_代码混淆与解混淆
逆向·安卓逆向
长沙火山4 天前
第二节_如何反编译_APK
逆向·安卓逆向
长沙火山4 天前
第七节_动态调试入门
逆向·安卓逆向
长沙火山4 天前
第十九节_Android_APP_安全机制
逆向·安卓逆向