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 等,一步步跑通。

相关推荐
用户2181697049301 天前
iOS 逆向 汇编代码和frida的使用
逆向
ControlM1 天前
从官方 CDN 里扒出 TRAE (TraeCode) 历史版本安装包
python·逆向·trae
字节暗面22 天前
SO加固强度怎么量化?腾讯ACE与FairGuard静态分析实测
android·逆向
晚风醉蝶23 天前
用 Babel AST 把“天书“ JS 一键还原:七步流水线反混淆实战
ast·逆向·反混淆·代码还原·控制流平坦化
字节暗面1 个月前
SO 加固强度自查 Checklist:静态、加载链、运行时看哪几项
安全·逆向
sysinside1 个月前
Binary Ninja 6.0 (macOS, Linux, Windows) 发布 - 逆向平台
逆向·反编译
0xBADCODE1 个月前
动态DEX加载+反射+DES硬编码密钥:安卓三层逆向实战
android·java·python·安全·网络安全·逆向·ctf
深念Y1 个月前
B站封面与元数据抓取完整方案
逆向
安全小王子1 个月前
nssctf_chicken_soup
网络安全·逆向·ctf·nssctf
安全小王子1 个月前
nssctf——老鼠走迷宫
网络安全·逆向·ctf·nssctf