Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/jwalker/frida-ios-dump-modern
iOS安全移动应用渗透测试逆向工程恶意软件分析移动安全二进制分析
GitHubjwalker/frida-ios-dump-modern

frida-ios-dump-modern

一个更新后的 Frida iOS 转储工具,支持最新的 Frida 17.5.2 API

查看仓库
97个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

现代 iOS IPA 转储工具

一个为 Frida 17.5.2+ 打造的现代 iOS 应用内存解密工具,全面支持 iOS 14-16 及多种越狱环境。

状态:✅ 可正常工作且已测试 - 已使用 Frida 17.5.2 在以下设备上成功转储并解密 iOS 应用:

  • iOS 14.7.1 + Taurine 越狱(iPad mini 5)
  • iOS 16.7.12 + palera1n 越狱(iPhone 8)

功能特性

  • ✅ 兼容 Frida 17.5.2+(使用 NativePointer.readByteArray)
  • ✅ 兼容 Taurine 越狱(iOS 14.7.1)
  • ✅ 兼容 palera1n 越狱(iOS 16.7.12)
  • ✅ 处理 palera1n 的 /cores/binpack/ 越狱路径
  • ✅ 通过内存转储 + 手动 cryptid 修补实现快速解密
  • ✅ 无已弃用的 API 调用
  • ✅ 代码干净、易于维护
  • ✅ 自动打包 IPA
  • ✅ 使用 Python paramiko(无需外部工具)
  • ✅ 详细的进度报告

为什么选择这个工具?

原始的 frida-ios-dump(最后更新于 2020 年)使用了已弃用的 Frida API,无法与 Frida 17.5.2 一起使用。本工具从零开始,使用现代 Frida API 构建,并已专门针对与 Taurine 兼容的 Frida 补丁进行了测试。

环境要求

macOS/主机端要求

  • Python 3.8+
  • Frida 17.5.2+
  • paramiko(Python SSH 库 - 自动安装)
  • iproxy(用于通过 libimobiledevice 进行 USB 连接)

iOS 设备要求

  • 已越狱的 iOS 设备(已在 iOS 14.7.1 + Taurine 上测试)
  • 运行已修补的 frida-server(参见 will add my patch repo 中的 Frida 补丁)
  • 已启用 SSH 访问

安装

root@kitploit:~
cd /Users/username/git/frida-ios-dump-modern

# Create virtual environment with uv:
uv venv
source .venv/bin/activate

# Install dependencies
uv pip install -r requirements.txt

# Make script executable
chmod +x dump.py

设置 USB 连接

root@kitploit:~
# Install libimobiledevice if needed
brew install libimobiledevice

# Start USB tunnel (in a separate terminal)
iproxy 2222 22

使用方法

1. 列出已安装的应用

root@kitploit:~
python dump.py -l

2. 转储应用

重要提示: 由于 Taurine 越狱的限制,应用在转储前必须处于运行状态。

root@kitploit:~
# 1. Launch the app on your device manually
# 2. Run the dumper:

python dump.py com.example.app

# With custom SSH password:
python dump.py com.example.app -P your_password

# With custom output directory:
python dump.py com.example.app -o /path/to/output

3. 示例:转储 Ventusky

root@kitploit:~
# 1. Open Ventusky on your iOS device
# 2. Run:
python dump.py com.in-meteo.ventusky -P mypassword

工作原理

兼容 iOS 16 的方法(混合方案)

  1. 附加(Attach):通过 Frida 连接到运行中的应用进程
  2. 枚举(Enumerate):列出应用中所有已加载的模块(二进制)
  3. 读取磁盘二进制(Read Disk Binary):从设备文件系统读取原始加密二进制文件
    • 对 iOS 16 至关重要:保留 LC_DYLD_CHAINED_FIXUPS 数据
    • 保持原始 DATA 段及其修正链(fixup chains)完整
  4. 读取解密后的段(Read Decrypted Segment):仅从内存中读取加密的 TEXT 段
    • iOS 在运行时解密代码
    • 我们只读取已解密的部分,而不是整个二进制
  5. 替换与修补(Replace & Patch):
    • 用解密后的内存替换磁盘二进制中的加密 TEXT 段
    • 在 LC_ENCRYPTION_INFO 中将 cryptid 设置为 0
    • 所有 DATA 段保持不变(保留修正链)
  6. 转储(Dump):将混合二进制写入设备上的 /tmp
  7. 下载(Download):通过 paramiko 使用 SCP 从设备传输文件
  8. 打包(Package):创建可用于分析的解密 IPA 文件

为什么这在 iOS 16 上有效:

  • iOS 16 使用链式修正(chained fixups)——指针以“链”的形式存储,由 dyld 在运行时解析
  • 从内存转储得到的是已解析的指针,而工具期望的是修正链
  • 通过读取磁盘二进制并仅替换加密的 TEXT,我们可以保留原始的修正链
  • 这与 bagbak 和其他现代转储工具采用的方法相同

输出

该工具会生成:

  • 单独的解密二进制文件
  • 包含解密二进制的完整应用包
  • 可随时用于分析的打包 IPA 文件

输出结构示例:

root@kitploit:~
/tmp/Ventusky_decrypted/
├── Payload/
│   └── Ventusky.app/
│       ├── Ventusky (decrypted main binary)
│       ├── Frameworks/
│       │   └── *.framework (decrypted frameworks)
│       └── ... (other app resources)
└── Ventusky_decrypted.ipa

Taurine 越狱兼容性

本工具专为与 Taurine 修补版 Frida 服务器配合使用而设计,该服务器包含:

  1. iOS 14 上不挂起线程:防止内核崩溃(kernel panics)
  2. 不注入 launchd:遵守 Taurine 的限制
  3. 需要手动启动应用:应用必须手动启动后才能转储

故障排除

“未找到 USB 设备”

root@kitploit:~
# Check frida-server is running on device:
ssh -p 2222 root@localhost "ps aux | grep frida-server"

# Restart frida-server if needed:
ssh -p 2222 root@localhost "killall frida-server; frida-server &"

“未找到应用”

root@kitploit:~
# List apps to find correct bundle ID:
python dump.py -l

“应用未在运行”

root@kitploit:~
# Launch the app manually on your device first
# This is required due to Taurine jailbreak restrictions

SSH 身份验证失败

root@kitploit:~
# Test SSH connection:
ssh -p 2222 root@localhost

# If password prompt works, use -P flag:
python dump.py com.example.app -P your_password

iOS 16:Hopper 中显示“Objective-C 元数据看起来已损坏”

如果你在 iOS 16 上修补后遇到元数据错误:

诊断问题:

root@kitploit:~
# Run diagnostic on dumped binary
./diagnose_ios16.sh /tmp/AppName_decrypted/Payload/AppName.app/AppName

# Compare with working iOS 14 binary
./diagnose_ios16.sh /path/to/working/ios14/binary

需要检查的关键事项:

  1. 文件大小与磁盘上的原始二进制一致
  2. 查找 LC_DYLD_CHAINED_FIXUPS(iOS 16 特有)
  3. 修补后确认 cryptid 为 0

该工具现在会从磁盘读取原始文件大小,以避免转储运行时扩展的内存区域。

转储后:验证

好消息: 该工具现在会在转储期间自动设置 cryptid=0,因此不再需要手动修补!

iOS 16 兼容性: 该工具采用混合方案:

  1. 从磁盘读取原始二进制(保留链式修正)
  2. 仅用解密后的内存替换加密的 TEXT 段
  3. 自动将 cryptid 设置为 0
  4. 保留所有 DATA 段及其原始修正链的完整性

这可以防止 iOS 16 上出现“这是否为从 DYLD 共享缓存中手动提取的文件?”和“Objective-C 元数据看起来已损坏”的错误。

验证转储:

root@kitploit:~
# Check that cryptid is 0 (should be automatic now)
otool -l Payload/App.app/App | grep cryptid
# Should show: cryptid 0

# Check file has all segments
otool -l Payload/App.app/App | grep "segname __"
# Should show: __TEXT, __DATA_CONST, __DATA, __LINKEDIT

# Open in Hopper - should work without warnings!

手动修补(旧版 - 不再需要):

如果由于某种原因自动 cryptid 修补未生效:

root@kitploit:~
# Check if patching needed
otool -l Payload/App.app/App | grep cryptid
# If shows cryptid 1, run:

python patch_cryptid.py Payload/App.app/App
mv Payload/App.app/App.patched Payload/App.app/App

预期结果:

  • ✅ Hopper 打开时没有“已加密”或“元数据损坏”的警告
  • ✅ 所有 Objective-C 类和方法均可见
  • ✅ 过程名称正确解析(而非 sub_XXXXX)
  • ✅ 同时适用于 iOS 14(Taurine)和 iOS 16(palera1n)

技术细节 - iOS 16 链式修正:

  • 问题:iOS 16 使用 LC_DYLD_CHAINED_FIXUPS 进行指针认证
  • 痛点:从内存转储得到的是已解析的指针,而非修正链
  • 解决方案:混合方案
    1. 从磁盘读取原始加密二进制(包含修正链)
    2. 仅从内存读取已解密的 TEXT 段
    3. 用解密后的内存替换磁盘二进制中的加密 TEXT
    4. 保留磁盘上的 DATA 段(修正链完整)
    5. 自动将 cryptid 设置为 0
  • 结果:二进制包含解密后的代码 + 原始修正链 = Hopper 满意!

与旧版 frida-ios-dump 的 API 差异

本工具使用现代 Frida 17.5.2 API:

支持

如果你觉得这个工具有用,或需要进一步的更新,请考虑支持 Boba 的需求:

☕ 请我喝杯波霸奶茶

许可证

MIT 许可证 - 免费用于安全研究和教育目的。

致谢

  • 专为配合 Taurine 修补版 Frida 使用而构建(案例研究即将推出)
  • 灵感来自 AloneMonkey 的原始 frida-ios-dump
  • 为 Frida 17.5.2+ 提供现代 API 实现

安全说明

本工具仅供以下用途:

  • 安全研究
  • CTF 挑战
  • 教育目的
  • ???
  • 获利
下载工具
旧 API(已弃用)新 API(现代)备注
Module.ensureInitialized()Not neededObjC 自动初始化
Module.findExportByName(null, 'name')Module.findGlobalExportByName('name')全局导出
Process.getModuleByName()Process.findModuleByName()未找到时返回 null
Manual POSIX file I/Onew File(path, 'wb')内置 File API
Memory.writeByteArray()file.write(arrayBuffer)直接二进制写入