iOS Reverse Engineering Toolkit - iOS 逆向工程工具集
基于 Frida 动态插桩框架,提供一站式 iOS 应用逆向分析能力。
- 应用砸壳 - 从内存中 dump 解密后的应用二进制文件,生成 IPA
- 应用信息 - 查看应用的加壳状态、路径、架构等详细信息
- 过滤搜索 - 支持按加壳状态、应用类型、正则表达式过滤
- SSL Pinning 绕过 - 禁用证书校验,方便使用 Charles/Burp 抓包
- 越狱检测绕过 - 让应用在越狱设备上正常运行
- 方法追踪 - Hook 指定类/方法,打印调用参数和返回值
- 类信息导出 - 导出应用的所有类名、方法列表
- Keychain 导出 - 读取应用存储的密钥、凭证等敏感数据
- class-dump - 从 Mach-O 二进制中导出 Objective-C 头文件(支持 iOS/macOS)
- 越狱的 iOS 设备
- 设备通过 USB 连接到电脑
- 设备上配置好 SSH(默认密码:
alpine)
- 打开 Cydia,添加软件源:
https://build.frida.re - 搜索并安装
Frida
无需手动安装,首次运行时会自动创建虚拟环境并安装依赖。
# 直接运行(推荐)
./iosre -l
# 或者手动使用 Python
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python iosre.py -l# Rootless 越狱需要,Rootful 越狱通常不需要
iproxy 2222 22# 简单列表(显示 PID、名称、Bundle ID)
./iosre -l
# 详细列表(显示路径、架构、加壳状态)
./iosre -L
# 仅列出加壳的应用
./iosre -L -e
# 仅列出未加壳的应用
./iosre -L -d
# 列出系统应用
./iosre -L -s
# 正则搜索
./iosre -L -r "微信"
./iosre -L -r "com.tencent"
# 组合使用
./iosre -L -e -r "WeChat"# 使用应用名称
./iosre "应用名称"
# 使用 Bundle ID
./iosre com.example.app
# 指定输出文件名
./iosre -o output.ipa "应用名称"
# 指定 SSH 连接参数
./iosre -H 192.168.1.100 -p 22 -u root -P alpine com.example.app./iosre -S com.example.app
# 支持绕过:
# - NSURLSession 证书校验
# - AFNetworking SSL Pinning
# - Alamofire SSL Pinning
# - TrustKit
# - 自定义 SecTrustEvaluate 校验./iosre -J com.example.app
# 支持绕过:
# - 文件路径检测 (Cydia, 越狱工具等)
# - URL Scheme 检测 (cydia://)
# - 沙盒完整性检测 (fork, system)
# - 动态库检测 (MobileSubstrate)
# - 符号检测 (MSHookFunction)
# - 环境变量检测 (DYLD_INSERT_LIBRARIES)# 追踪整个类的所有方法
./iosre -t "AppDelegate" com.example.app
# 追踪单个方法
./iosre -t "-[LoginViewController loginButtonClicked:]" com.example.app
# 追踪多个类
./iosre -t "LoginManager,UserService" com.example.app# 导出应用的所有类
./iosre -c com.example.app
# 搜索包含特定关键字的类
./iosre -c -f "Login" com.example.app
./iosre -c -f "Payment" com.example.app./iosre -k com.example.app
# 可导出内容:
# - 密码 (kSecClassGenericPassword)
# - 网络密码 (kSecClassInternetPassword)
# - 证书 (kSecClassCertificate)
# - 密钥 (kSecClassKey)注意:此功能不需要连接 iOS 设备,可直接分析本地文件。
# 基本用法 - 输出到终端
./iosre --class-dump app.ipa
# 导出头文件到目录
./iosre --class-dump app.ipa -O ./headers/
# 指定架构(Universal Binary 时使用)
./iosre --class-dump app.ipa --arch arm64
# 只显示特定类(正则匹配)
./iosre --class-dump app.ipa -C "^ViewController"
./iosre --class-dump app.ipa -C "Login|Payment"
# 搜索包含特定字符串的方法
./iosre --class-dump app.ipa --find "login"
./iosre --class-dump app.ipa --find "password"
# 列出支持的架构
./iosre --class-dump app.ipa --list-arches
# 显示实例变量偏移量和方法实现地址
./iosre --class-dump app.ipa -a -A
# 按继承关系排序输出
./iosre --class-dump app.ipa -I
# 组合使用
./iosre --class-dump app.ipa -O ./headers/ --arch arm64 -C "^UI" -I支持的输入格式:
.ipa文件(自动解压).app目录- Mach-O 二进制文件
限制说明:
- 仅支持 Objective-C,不支持 Swift
- 加壳应用需先砸壳再分析
| 参数 | 说明 |
|---|---|
-l, --list |
简单列出已安装应用 |
-L, --list-detail |
详细列出应用信息 |
-e, --encrypted |
仅显示加壳应用 |
-d, --decrypted |
仅显示未加壳应用 |
-s, --system |
显示系统应用 |
-r, --regex |
正则表达式过滤 |
| 参数 | 说明 |
|---|---|
-o, --output |
指定输出 IPA 文件名 |
target |
目标应用的 Bundle ID 或显示名称 |
| 参数 | 说明 |
|---|---|
-S, --ssl |
绕过 SSL Pinning |
-J, --jailbreak |
绕过越狱检测 |
-t, --trace |
追踪方法调用 |
-c, --class |
导出类信息 |
-f, --filter |
类名过滤 |
-k, --keychain |
导出 Keychain 数据 |
| 参数 | 说明 |
|---|---|
--class-dump FILE |
对本地 IPA/.app/Mach-O 文件执行 class-dump |
-O, --output-dir |
输出目录(生成独立 .h 文件) |
--arch |
指定架构 (arm64, armv7, x86_64 等) |
-C, --match |
只显示匹配正则表达式的类 |
--find |
搜索包含指定字符串的方法 |
--list-arches |
列出文件支持的架构 |
-I, --inheritance |
按继承关系排序 |
-a, --ivar-offsets |
显示实例变量偏移量 |
-A, --impl-addr |
显示方法实现地址 |
| 参数 | 默认值 | 说明 |
|---|---|---|
-H, --host |
localhost | SSH 主机地址 |
-p, --port |
自动检测 | SSH 端口(自动尝试 2222 → 22) |
-u, --user |
root | SSH 用户名 |
-P, --password |
alpine | SSH 密码 |
-K, --key_filename |
- | SSH 私钥文件路径 |
SSH 认证说明:
- 密钥认证(推荐):程序会自动尝试
~/.ssh/id_rsa、id_ed25519等密钥文件,无需输入密码- 交互式密码:如果密钥认证失败,会提示输入密码
- 端口自动检测:自动尝试 2222 和 22 端口,适配不同越狱环境
- Rootless 越狱(Dopamine 等)通常使用
iproxy 2222 22- Rootful 越狱(unc0ver、checkra1n、palera1n)通常直接使用 22 端口
配置 SSH 密钥认证(推荐,免密码):
ssh-copy-id -p 2222 root@localhost| 参数 | 说明 |
|---|---|
--debug |
启用调试模式,显示详细日志(用于排查问题) |
iOSRE/
├── iosre # 启动脚本(自动管理虚拟环境)
├── iosre.py # 主程序入口
├── agent/ # Frida Agent 脚本
│ ├── dump.js # 砸壳脚本
│ ├── appinfo.js # 应用信息查询
│ ├── bypass_ssl.js # SSL Pinning 绕过
│ ├── bypass_jailbreak.js # 越狱检测绕过
│ ├── trace.js # 方法追踪
│ ├── dump_class.js # 类信息导出
│ └── dump_keychain.js # Keychain 导出
├── tools/ # 外部工具
│ └── class-dump # Mach-O 头文件导出工具
├── batch_process.sh # 批量砸壳脚本
├── requirements.txt # Python 依赖
└── README.md
原因:目标应用没有在 iOS 设备上打开。
解决方案:先在手机上手动打开目标应用,再执行命令。
确保:
- 设备已越狱并安装了 OpenSSH
- SSH 密码正确
- 如使用 iproxy:确保
iproxy 2222 22正在运行 - 可手动指定端口:
-p 22或-p 2222
使用 -L 详细列表功能时,需要附加到 SpringBoard 进程。确保:
- 设备已越狱
- Frida server 正在设备上运行
本项目基于以下开源项目:
- Frida - 强大的动态插桩框架
- frida-ios-dump by AloneMonkey - iOS 应用砸壳功能
- MJAppTools by CoderMJLee - 应用信息查询功能
- class-dump by Steve Nygard - Mach-O 头文件导出
重构维护: aStudyer
MIT License