Skip to content

aStudyer/iOSRE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

iOSRE

iOS Reverse Engineering Toolkit - iOS 逆向工程工具集

基于 Frida 动态插桩框架,提供一站式 iOS 应用逆向分析能力。

功能特性

核心功能

  • 应用砸壳 - 从内存中 dump 解密后的应用二进制文件,生成 IPA
  • 应用信息 - 查看应用的加壳状态、路径、架构等详细信息
  • 过滤搜索 - 支持按加壳状态、应用类型、正则表达式过滤

逆向辅助

  • SSL Pinning 绕过 - 禁用证书校验,方便使用 Charles/Burp 抓包
  • 越狱检测绕过 - 让应用在越狱设备上正常运行
  • 方法追踪 - Hook 指定类/方法,打印调用参数和返回值
  • 类信息导出 - 导出应用的所有类名、方法列表
  • Keychain 导出 - 读取应用存储的密钥、凭证等敏感数据

静态分析

  • class-dump - 从 Mach-O 二进制中导出 Objective-C 头文件(支持 iOS/macOS)

前置条件

  1. 越狱的 iOS 设备
  2. 设备通过 USB 连接到电脑
  3. 设备上配置好 SSH(默认密码: alpine

iOS 设备安装 Frida

  1. 打开 Cydia,添加软件源:https://build.frida.re
  2. 搜索并安装 Frida

电脑端安装

无需手动安装,首次运行时会自动创建虚拟环境并安装依赖。

# 直接运行(推荐)
./iosre -l

# 或者手动使用 Python
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python iosre.py -l

使用方法

1. 启动 USB 端口转发(可选)

# Rootless 越狱需要,Rootful 越狱通常不需要
iproxy 2222 22

2. 列出应用

# 简单列表(显示 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"

3. 应用砸壳

# 使用应用名称
./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

4. 逆向辅助功能

SSL Pinning 绕过

./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

Keychain 导出

./iosre -k com.example.app

# 可导出内容:
# - 密码 (kSecClassGenericPassword)
# - 网络密码 (kSecClassInternetPassword)
# - 证书 (kSecClassCertificate)
# - 密钥 (kSecClassKey)

5. class-dump(头文件导出)

注意:此功能不需要连接 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 选项

参数 说明
--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 显示方法实现地址

SSH 选项

参数 默认值 说明
-H, --host localhost SSH 主机地址
-p, --port 自动检测 SSH 端口(自动尝试 2222 → 22)
-u, --user root SSH 用户名
-P, --password alpine SSH 密码
-K, --key_filename - SSH 私钥文件路径

SSH 认证说明

  • 密钥认证(推荐):程序会自动尝试 ~/.ssh/id_rsaid_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

常见问题

1. unexpected error while resuming process

原因:目标应用没有在 iOS 设备上打开。

解决方案:先在手机上手动打开目标应用,再执行命令。

2. SSH 连接失败

确保:

  • 设备已越狱并安装了 OpenSSH
  • SSH 密码正确
  • 如使用 iproxy:确保 iproxy 2222 22 正在运行
  • 可手动指定端口:-p 22-p 2222

3. 无法附加到 SpringBoard

使用 -L 详细列表功能时,需要附加到 SpringBoard 进程。确保:

  • 设备已越狱
  • Frida server 正在设备上运行

致谢

本项目基于以下开源项目:

  • Frida - 强大的动态插桩框架
  • frida-ios-dump by AloneMonkey - iOS 应用砸壳功能
  • MJAppTools by CoderMJLee - 应用信息查询功能
  • class-dump by Steve Nygard - Mach-O 头文件导出

重构维护: aStudyer

License

MIT License

About

iOS Reverse Engineering Toolkit - iOS 逆向工程工具集 基于 Frida 动态插桩框架,提供一站式 iOS 应用逆向分析能力。

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors