面向中文 iOS 逆向开发者整理的 MonkeyDev 资料归档:安装教程、Xcode 12/13/14/15 兼容报错修复,以及 Frida / Theos / Objection 等替代方案对比。
MonkeyDev 是 AloneMonkey(刘培庆,圈内称“庆哥”)在 iOSOpenDev 基础上开发的 iOS 逆向框架,2017 年发布,支持 Xcode 8 及以上,用于在非越狱手机上对第三方 App 进行逆向分析、代码注入、反反调试,并集成 Cycript、Reveal 等能力。它最大的价值是提供原生 Xcode 编译 + 调试体验——你不需要切换到 Theos 的黑盒环境,直接在熟悉的 Xcode 里断点、看变量。
作者约在 2022 年前后停止维护更新,因此在新版 Xcode(12/13/14/15)上会出现若干兼容性报错,需要手动修复(见下文第三节)。项目目前仍可在 GitHub 获取,是学习 iOS 逆向的经典入门工具。
sudo /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/AloneMonkey/MonkeyDev/master/bin/md-install)"
脚本会自动完成克隆仓库、编译安装、配置 Xcode 插件。安装完成后重启 Xcode,在 File → New → Project 中即可看到新增的 MonkeyDev 模板分类。
git clone https://github.com/AloneMonkey/MonkeyDev.git cd MonkeyDev/bin sudo ./md-install
xcode-select: error: tool 'xcodebuild' requires Xcode。sudo xcode-select -s /Applications/Xcode.app/Contents/Developer/Applications/Xcode-beta.app/Contents/Developer。
sudo 执行;检查 Shell 环境(zsh)的 PATH 是否包含 /usr/local/bin(echo $PATH),没有则在 ~/.zshrc 添加 export PATH=/usr/local/bin:$PATH 后 source ~/.zshrc。md-install 改名为 .txt,注释掉无法访问的代码后,手动从 GitHub 下载所需组件,再改回 md-install 重新执行。~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ 是否有 MonkeyDevPlugin.xcplugin;存在则清缓存:rm -rf ~/Library/Developer/Xcode/DerivedData 与 rm -rf ~/Library/Caches/com.apple.dt.Xcode,重启 Xcode。以下为 Xcode 12 及以上版本集中出现的报错,按出现频率整理。
Xcode 新版本模板路径变更。打开 MonkeyDev/bin/md-install,把 specificationFile 行中的 IDEiOSSupportCore.ideplugin/Contents/Resources/Embedded-Device.xcspec 改为 XCBSpecifications.ideplugin/Contents/Resources/Embedded-Device.xcspec,保存后重新 sudo bash md-install。
新版 Xcode 移除 libstdc++。执行:git clone https://github.com/devdawei/libstdc-.git,进入目录 sudo bash ./install-xcode_11+.sh 把 libstdc++ 补回对应 Xcode 版本。
旧版 fishhook 不兼容 iOS 15。下载 facebook/fishhook,将 fishhook.h、fishhook.c 复制到 /opt/MonkeyDev/templates/MonkeyAppMac.xctemplate/fishhook/ 与 /opt/MonkeyDev/templates/MonkeyAppLibrary.xctemplate/fishhook/ 覆盖替换,确认新 fishhook.c 含 iOS 15 支持后重新运行。
首次能装、注入 Dylib 后再次编译无法安装,是重签名脚本残留 Plugins 签名信息(_CodeSignature / SC_Info)。在重签名脚本中加:rm -rf "${TARGET_APP_PATH}/_CodeSignature" 与 rm -rf "${TARGET_APP_PATH}/SC_Info",或手动删除目标 App 包内对应文件后可反复编译安装。
monkeytest dylib 的 Build Settings 签名与主项目不一致。将 dylib 子项目的签名设置与主项目统一即可。
MonkeyDev 在保存 .xm 文件时才会把 Logos 语法转换为 .m。编写后按 Command+S 保存,并确认生成的同名 .m 文件已包含对应 Hook 代码。
| Xcode 版本 | MonkeyDev 状态 | 主要需要处理的问题 |
|---|---|---|
| Xcode 8–11 | 原生支持 | 基本开箱即用,libstdc++ 自带 |
| Xcode 12–13 | 需修路径 | Embedded-Device.xcspec 路径变更,改 XCBSpecifications |
| Xcode 14.x | 需多处修复 | libstdc++ 缺失、fishhook EXC_BAD_ACCESS、Unable to install、Dylib 签名 |
| Xcode 15+ | 勉强可用 | 在上述基础上需确保 fishhook 含 iOS 15+ 支持,整体越来越难维护 |
MonkeyDev 停更后,社区常用的动态分析与越狱/非越狱逆向工具如下,可按场景组合:
| 工具 | 定位 | 适合场景 | 地址 |
|---|---|---|---|
| Frida | 动态插桩框架 | 运行时 Hook、函数追踪、脚本化分析 | frida.re |
| Objection | Frida 封装 | 无越狱移动端安全测试,开箱即用命令 | sensepost/objection |
| Theos | 越狱 tweak 开发 | 编写注入型 Tweak、Logos 语法 | theos.dev |
| frida-ios-dump | IPA 砸壳 | AloneMonkey 出品,配合 Frida 脱壳 | AloneMonkey/frida-ios-dump |
分析过程中常需对抓到的数据做 Base64 解码、JSON 格式化、时间戳转换。以下工具100% 在浏览器本地运行、文件/文本零上传,适合处理内部敏感数据,安全合规: