Fi5t/iDump
GitHub: Fi5t/iDump
一款基于Go和Frida的iOS应用脱壳工具,用于解密App Store应用二进制并导出为IPA文件,是已停止维护的frida-ios-dump的现代替代方案。
Stars: 0 | Forks: 0
解密 iOS 应用二进制文件并将其转储为 IPA 文件
## 背景 `idump` 最初是对 [frida-ios-dump](https://github.com/AloneMonkey/frida-ios-dump) 的重新思考——这是一款多年来一直作为 iOS 二进制解密首选的知名 Python 工具。遗憾的是,`frida-ios-dump` 已无法在 Frida 17+ 上运行,并且似乎已无人维护。相较于修补一个 Python 脚本,作者将 Frida agent 迁移并更新以适配现代版本的 Frida,随后将其封装在一个全新的宿主工具中,从而消除了以往繁琐的设置步骤:以往仅仅为了转储一个应用,就需要配置 Python、pip 依赖以及预设的 SSH 连接。 `idump` 的主要目标是**自主性**:提供一个单一且独立的二进制文件,该文件内嵌了 Frida agent 脚本且开箱即用。无需 Python,无需 pip,也无需手动下载脚本。只需将二进制文件复制到您的 PATH 中即可运行。 `idump` 使用 Go 语言编写,并基于 [frida-go](https://github.com/frida/frida-go) 构建,充分利用了现代工具链的优势,同时保留了相同的核心技术——注入 Frida agent,修补 `LC_ENCRYPTION_INFO` 中的 `cryptid`,提取解密后的 Mach-O 段,并重新组装为有效的 IPA。 ## 安装说明 ### 预编译二进制文件 从 [Releases](https://github.com/Fi5t/idump/releases) 页面下载适用于您平台的最新版本,然后将二进制文件复制到您的 PATH 中: ``` # macOS (Apple Silicon) curl -L https://github.com/Fi5t/idump/releases/latest/download/idump-darwin-arm64 -o idump chmod +x idump cp idump /usr/local/bin/ ``` ### 从源码构建 **前置条件:** Go 1.21+,Frida CLI (`pip install frida-tools`),`curl`,`tar` ``` git clone https://github.com/Fi5t/idump.git cd idump make devkit # downloads frida-core-devkit matching your installed frida version make build # produces ./idump cp idump /usr/local/bin/ ``` ## 使用说明 `idump` 通过 Frida 连接到通过 USB 连接的 iOS 设备。该设备必须运行 `frida-server`(或使用 Frida gadget)。 ### 列出已安装的应用 ``` idump -l ``` ### 转储应用(USB 模式) 文件内容直接通过 Frida 消息传输——不需要 SSH。 ``` idump com.example.App # by bundle ID idump "My App" # by display name idump -o output.ipa com.example.App # custom output filename ``` ### 转储应用(SSH/SFTP 模式) Frida agent 将 `.fid` 文件写入设备;随后 `idump` 通过 SFTP 检索这些文件并组装成 IPA。当 USB 传输对于大型应用而言缓慢或不稳定时,此模式非常有用。 ``` idump remote com.example.App # defaults: root@localhost:2222, password alpine idump remote -H 192.168.1.10 -p 22 com.example.App # custom host/port idump remote -K ~/.ssh/id_rsa com.example.App # SSH key authentication idump remote -u mobile -P password com.example.App # custom credentials ``` ### 标志 **USB 模式 (`idump`):** | 标志 | 短选项 | 默认值 | 描述 | |------|-------|---------|-------------| | `--list` | `-l` | — | 列出已安装的应用 | | `--output` | `-o` | 应用显示名称 | 输出的 IPA 文件名 | **SSH/SFTP 模式 (`idump remote`):** | 标志 | 短选项 | 默认值 | 描述 | |------|-------|---------|-------------| | `--output` | `-o` | 应用显示名称 | 输出的 IPA 文件名 | | `--host` | `-H` | `localhost` | SSH 主机名 | | `--port` | `-p` | `2222` | SSH 端口 | | `--user` | `-u` | `root` | SSH 用户名 | | `--password` | `-P` | `alpine` | SSH 密码 | | `--key` | `-K` | — | SSH 私钥文件 | ## 开发说明 ### 前置条件 - Go 1.21+ - Frida CLI (`pip install frida-tools`) — devkit 版本已固定以与之匹配 - `curl`,`tar`(用于下载 devkit) ### 1. 获取 frida-go `frida-go` 使用 CGO 封装 Frida 的 C 库。将其添加到模块中: ``` go get github.com/frida/frida-go/frida@latest ``` ### 2. 下载 Frida Core devkit 构建过程需要 `libfrida-core.a` 和 `frida-core.h`。此脚本会从系统中的 `frida` 二进制文件自动检测 Frida 版本: ``` make devkit ``` 如需固定特定版本,请执行: ``` make devkit FRIDA_VERSION=17.x.y ``` 这会将 devkit 下载并解压到 `build/frida-devkit/`。 ### 3. 构建 ``` make build # produces ./idump ``` ### 4. 测试 ``` make test # go test ./... ``` ### 更新 Frida agent (`dump.ts`) 位于 `agent/dump.ts` 的 TypeScript agent 会被预编译为 `internal/dump.js`,并直接嵌入到二进制文件中。当您编辑 `dump.ts` 时,请重新编译并提交结果: ``` make generate-ts # requires devkit (step 2) git add internal/dump.js git commit ```标签:App安全分析, frida-go, Frida注入, Go语言, iOS应用解密, iOS逆向工程, IPA文件导出, LC_ENCRYPTION_INFO修改, Mach-O文件解析, USB通信, 二进制转储, 代码脱壳, 动态二进制注入, 安全研究工具, 攻击路径可视化, 数字取证, 日志审计, 目录枚举, 移动安全, 程序破解, 自动化脚本, 自定义脚本, 越狱工具, 黑客工具