一个为 Frida 17.5.2+ 打造的现代 iOS 应用内存解密工具,全面支持 iOS 14-16 及多种越狱环境。
状态:✅ 可正常工作且已测试 - 已使用 Frida 17.5.2 在以下设备上成功转储并解密 iOS 应用:
/cores/binpack/ 越狱路径原始的 frida-ios-dump(最后更新于 2020 年)使用了已弃用的 Frida API,无法与 Frida 17.5.2 一起使用。本工具从零开始,使用现代 Frida API 构建,并已专门针对与 Taurine 兼容的 Frida 补丁进行了测试。
paramiko(Python SSH 库 - 自动安装)iproxy(用于通过 libimobiledevice 进行 USB 连接)will add my patch repo 中的 Frida 补丁)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
# Install libimobiledevice if needed
brew install libimobiledevice
# Start USB tunnel (in a separate terminal)
iproxy 2222 22
python dump.py -l
重要提示: 由于 Taurine 越狱的限制,应用在转储前必须处于运行状态。
# 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
# 1. Open Ventusky on your iOS device
# 2. Run:
python dump.py com.in-meteo.ventusky -P mypassword
/tmp为什么这在 iOS 16 上有效:
该工具会生成:
输出结构示例:
/tmp/Ventusky_decrypted/
├── Payload/
│ └── Ventusky.app/
│ ├── Ventusky (decrypted main binary)
│ ├── Frameworks/
│ │ └── *.framework (decrypted frameworks)
│ └── ... (other app resources)
└── Ventusky_decrypted.ipa
本工具专为与 Taurine 修补版 Frida 服务器配合使用而设计,该服务器包含:
# 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 &"
# List apps to find correct bundle ID:
python dump.py -l
# Launch the app manually on your device first
# This is required due to Taurine jailbreak restrictions
# 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 上修补后遇到元数据错误:
诊断问题:
# 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
需要检查的关键事项:
该工具现在会从磁盘读取原始文件大小,以避免转储运行时扩展的内存区域。
好消息: 该工具现在会在转储期间自动设置 cryptid=0,因此不再需要手动修补!
iOS 16 兼容性: 该工具采用混合方案:
这可以防止 iOS 16 上出现“这是否为从 DYLD 共享缓存中手动提取的文件?”和“Objective-C 元数据看起来已损坏”的错误。
验证转储:
# 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 修补未生效:
# 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
预期结果:
技术细节 - iOS 16 链式修正:
本工具使用现代 Frida 17.5.2 API:
如果你觉得这个工具有用,或需要进一步的更新,请考虑支持 Boba 的需求:
MIT 许可证 - 免费用于安全研究和教育目的。
本工具仅供以下用途:
| 旧 API(已弃用) | 新 API(现代) | 备注 |
|---|
Module.ensureInitialized() | Not needed | ObjC 自动初始化 |
Module.findExportByName(null, 'name') | Module.findGlobalExportByName('name') | 全局导出 |
Process.getModuleByName() | Process.findModuleByName() | 未找到时返回 null |
| Manual POSIX file I/O | new File(path, 'wb') | 内置 File API |
Memory.writeByteArray() | file.write(arrayBuffer) | 直接二进制写入 |