关于 rev-ios-dump
rev-ios-dump 是面向 iOS 安全分析与逆向工程的技能,借助 Frida 从越狱设备运行中的应用进程导出解密后的二进制文件,供静态分析等后续工作使用。
主要功能
- 01从运行进程转储解密二进制
- 02生成解密后的 IPA 文件
- 03转储应用包中的加密框架
- 04检查转储结果是否已解密
适用场景
- 01将 Mach-O 导入 IDA、Ghidra 或 Hopper
- 02提取 Objective-C 头文件
- 03搜索二进制中的敏感字符串
- 04为 Frida Hook 或符号分析准备文件
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ p4nda0s/ reverse-skills --skill rev-ios-dump安装后在 Claude Code 中输入/rev-ios-dump确认已加载。
详细介绍
rev-ios-dump - iOS 应用解密(砸壳)
从越狱设备中转储已解密的 iOS 应用二进制文件,用于安全分析和逆向工程。
概述
通过 App Store 分发的 iOS 应用使用 Apple 的 FairPlay DRM 加密。要进行静态分析(IDA/Ghidra/Hopper),必须先在运行时解密二进制文件,这通常称为“砸壳”(转储壳)。此技能使用 Frida 对运行中的进程进行插桩,并从内存中转储已解密的 Mach-O。
前置条件
| 要求 | 详情 |
|---|---|
| 越狱的 iOS 设备 | 已启用 SSH 访问 |
| frida-server | 已在设备上安装并运行 |
| Python 3 | 在主机上 |
| frida + frida-tools | pip3 install frida frida-tools |
| USB 或网络访问 | 与设备建立 SSH 连接 |
验证 frida-server 是否正在运行
# Check frida-server on device via SSH
ssh mobile@<device_ip> "ps aux | grep frida-server"
# If not running, start it
ssh mobile@<device_ip> "/usr/sbin/frida-server -D &"
# Verify from host
frida-ls-devices
frida-ps -H <device_ip>
工具:frida-ios-dump
仓库:https://github.com/P4nda0s/frida-ios-dump
安装
git clone https://github.com/P4nda0s/frida-ios-dump.git
cd frida-ios-dump
pip3 install -r requirements.txt
# Build the TypeScript agent (required before first run)
npm install --ignore-scripts
npx frida-compile dump.ts -o dist/dump.js
注意:此版本使用基于 TypeScript 的 Frida Agent。运行 dump.py 前必须先编译 dist/dump.js。
分步工作流
步骤 1:识别目标应用的 Bundle ID
在设备上使用以下任一方法:
# Method 1: List running apps via Frida
frida-ps -H <device_ip> -a
# Method 2: SSH into device and check
ssh mobile@<device_ip> "find /var/containers/Bundle/Application -name Info.plist -exec plutil -p {} \; 2>/dev/null | grep CFBundleIdentifier"
或者在设备上使用 CocoaTop,识别正在运行的进程及其 Bundle ID。
步骤 2:确保目标应用正在运行
目标应用必须在设备上运行。frida-ios-dump 会附加到活动进程,以转储已解密的内存。
步骤 3:执行转储
cd frida-ios-dump
python3 dump.py -H <device_ip> -u mobile -P <password> <bundle_id>
参数:
| 标志 | 说明 |
|---|---|
-H | 设备 IP 地址 |
-u | SSH 用户名(通常为 mobile) |
-P | SSH 密码(新越狱设备通常为 alpine) |
<bundle_id> | 目标应用的 Bundle ID(例如 app.ish.iSH) |
示例:
python3 dump.py -H 192.168.1.100 -u mobile -P alpine app.ish.iSH
步骤 4:验证输出
转储成功后,会在当前目录中生成一个 .ipa 文件:
ls -la *.ipa
# Unzip to inspect
unzip -o <app_name>.ipa -d dumped_app/
# Verify decryption — cryptid should be 0
otool -l dumped_app/Payload/<AppName>.app/<BinaryName> | grep -A4 LC_ENCRYPTION_INFO
如果显示 cryptid 0,则表示二进制文件已成功解密。
故障排除
| 错误 | 原因 | 解决方法 |
|---|---|---|
Failed to spawn | 应用未安装或 Bundle ID 错误 | 使用 frida-ps -H <ip> -a 验证 Bundle ID |
Unable to connect to remote frida-server | frida-server 未运行或端口被阻止 | 在设备上启动 frida-server,并检查防火墙 |
SSH connection refused | 未启用 SSH 或凭据错误 | 验证 SSH 访问:ssh mobile@<ip> |
Timeout waiting for process | 应用崩溃或尚未完全启动 | 先手动启动应用,然后重试 |
frida.ServerNotRunningError | frida-server 版本不匹配 | 将 frida-server 版本与主机上的 frida 版本保持一致 |
输出中出现 cryptid 1 | 转储失败,二进制文件仍处于加密状态 | 确保转储期间应用正在运行,然后重试 |
Permission denied | SSH 密钥或密码问题 | 检查 -u 和 -P 标志,或使用 SSH 密钥认证 |
版本不匹配的解决方法
frida-server 和主机上的 frida 必须具有相同的主版本:
# Check host version
frida --version
# Download matching frida-server from:
# https://github.com/frida/frida/releases
# Choose: frida-server-<version>-ios-arm64.xz
输出用途
获取已解密的 IPA 后:
- 静态分析 — 将已解密的 Mach-O 加载到 IDA/Ghidra/Hopper 中
- 类转储 — 提取 ObjC 头文件:
class-dump <binary> > headers.h - 字符串分析 — 搜索敏感字符串、URL 和密钥
- Frida Hook — 配合
rev-frida技能进行动态分析 - 符号恢复 — 配合
rev-symbol技能分析已剥离符号的二进制文件
注意事项
- 转储期间,设备必须保持解锁,应用必须始终处于前台。
- 对于包含多个框架的应用,frida-ios-dump 会转储应用包中的所有加密框架。
- 某些具有高级越狱检测机制的应用可能会在转储完成前终止;建议先绕过越狱检测。
评论
支持 Markdown