ipatool:把 App Store 变成命令行的 iOS 应用包管理器
但 App Store 没有「下载按钮」。你不能像在 GitHub 上 git clone 一样,从 App Store 直接拉一个 ipa 下来。你得用 Apple Configurator 2、iMazing,或者越狱后用 AppSync + Filza 去文件系统里捞。
你是一个 iOS 安全研究员。客户给了你一个 App,要你做逆向分析。
第一步是什么?拿到 App 的安装包——也就是 .ipa 文件。
但 App Store 没有「下载按钮」。你不能像在 GitHub 上 git clone 一样,从 App Store 直接拉一个 ipa 下来。你得用 Apple Configurator 2、iMazing,或者越狱后用 AppSync + Filza 去文件系统里捞。
这些方法要么需要 Mac,要么需要越狱,要么需要 GUI 操作无法脚本化。如果你想做大规模 App 分析——比如批量下载某个类别的 100 个 App 做安全扫描——以上方法全部废掉。
majd/ipatool 解决的就是这个问题。它是一个 Go 写的命令行工具,让你用 Apple ID 登录 App Store,搜索、购买、下载 iOS/iPadOS/tvOS/visionOS 的 .ipa 文件。
它能做什么
四个核心命令:
1. auth — 认证
ipatool auth login
ipatool auth info
ipatool auth revoke
用你的 Apple ID 登录 App Store。凭证存储在系统 keychain(macOS Keychain / Windows Credential Manager / Linux secret-service)里,不会明文落盘。
2. search — 搜索
ipatool search "微信" --platform iphone --limit 5
ipatool search "tiktok" --platform visionos
在 App Store 里搜索 App。支持按平台过滤:iOS、iPadOS、tvOS、visionOS。输出可以是 text 或 JSON——JSON 模式让这个工具天然可脚本化。
3. purchase — 获取授权
ipatool purchase -b com.tencent.xin
「Purchase」在 App Store 语境下不一定是花钱。免费 App 也需要「purchase」操作来获取授权——你的 Apple ID 需要先和这个 App 建立关联,才能下载。
4. download — 下载
ipatool download -i 414478124
ipatool download -b com.tencent.xin
ipatool download -b com.tencent.xin --external-version-id 12345678
下载 .ipa 文件。可以按 App ID 或 Bundle Identifier 下载。--external-version-id 让你指定特定版本——做历史版本分析时有用。
5. list-purchases — 列出已购
ipatool list-purchases --page 1 --max-results 50
列出你的 Apple ID 已购买的所有 App。按购买日期倒序排列。
6. list-versions — 列出版本
ipatool list-versions -b com.tencent.xin
列出某个 App 的所有可用版本。做版本差异分析时有用——比如对比某个 App 在某个版本前后是否引入了新的追踪 SDK。
为什么这个工具重要
1. 把 App Store 变成包管理器
ipatool 的本质是把 App Store 的操作(搜索、购买、下载)变成了命令行操作。这意味着:
- 可脚本化:一个 bash 脚本就能批量下载 100 个 App
- 可集成:CI/CD pipeline 里可以自动拉取最新版本的 App 做安全扫描
- 可比较:
list-versions+download --external-version-id让版本差异分析变得简单
apt-get、brew、npm 做的事情本质相同——把一个原本需要 GUI 的操作变成命令行操作。区别在于 App Store 是一个围墙花园,Apple 从来没有提供过官方的命令行接口。2. visionOS 支持
一个容易被忽略的细节:ipatool 支持 visionOS 平台搜索。visionOS 是 Apple Vision Pro 的操作系统,App Store 上的 visionOS 应用目前没有其他非 GUI 的下载方式。
对于做 visionOS App 安全研究的人来说,ipatool 可能是目前唯一的脚本化方案。
3. JSON 输出
所有命令都支持 --format json。这不是一个「nice to have」——对于任何想把 ipatool 集成到自动化 pipeline 里的人来说,这是必需品。
JSON 输出意味着你可以用 jq 过滤、用 Python 解析、用数据库存储。一个工具是否支持 JSON 输出,决定了它是「一次性工具」还是「基础设施」。
技术实现:Go + Apple Store API
ipatool 用 Go 写的,这带来几个好处:
- 单二进制:编译成一个可执行文件,没有运行时依赖。macOS/Linux/Windows 都有 release。
- 快:Go 的并发模型适合批量下载场景。
- Homebrew 安装:
brew install ipatool,macOS 用户一行搞定。
ipatool 不是第一个这么做的工具(之前有 apple-codesign、transporter 等),但它是第一个把完整流程(认证→搜索→购买→下载→版本管理)做成统一 CLI 的。
使用场景
场景 1:批量 App 安全扫描
# 搜索某个类别的 App
ipatool search "银行" --platform iphone --limit 50 --format json | jq '.[].bundleId' > banks.txt
# 批量下载
while read bundle_id; do
ipatool purchase -b "$bundle_id"
ipatool download -b "$bundle_id"
done < banks.txt
# 用其他工具做静态分析
for ipa in *.ipa; do
class-dump "$ipa" >> analysis.txt
done
场景 2:版本差异分析
# 列出所有版本
ipatool list-versions -b com.example.app --format json > versions.json
# 下载特定版本
ipatool download -b com.example.app --external-version-id 87654321
场景 3:visionOS App 研究
ipatool search "productivity" --platform visionos --format json
ipatool download -b com.example.visionapp
一些冷静的观察
Apple ID 风险
ipatool 需要你的 Apple ID 凭证。Apple 的服务条款可能不允许用非官方客户端访问 App Store API。虽然实际被封号的风险很低(因为用的协议和官方客户端一样),但这个风险是存在的。
建议:用专门的 Apple ID 做研究,不要用主力账号。
加密下载
ipatool 下载的 .ipa 文件是加密的(FairPlay DRM)。你不能直接解压看代码——需要先脱壳。脱壳需要越狱设备或特定的解密工具(如 frida-ios-dump、bagbak)。
这意味着 ipatool 解决的是「拿到 ipa」这一步,但不是「分析 ipa」的全流程。它是安全研究 pipeline 的第一步,不是全部。
合规性
ipatool 本身是中立的——它只是一个 API 客户端。但用途决定了合规性:
- 合规:下载自己已购买的 App 做备份、做安全研究、做学术分析
- 灰色:下载免费 App 做批量分析(Apple 可能认为这违反服务条款)
- 不合规:分发下载的 ipa 文件给他人
维护状态
ipatool 的 release 频率不高——因为 Apple 的 App Store API 很少变。这是一个「稳定但缓慢」的项目,不是那种每周更新的活跃开发。
更大的图景:围墙花园的 CLI 化
ipatool 代表了一个有趣的趋势:把围墙花园的操作变成命令行。
App Store、Google Play、Microsoft Store——这些应用商店都是围墙花园,有 GUI 但没有官方 CLI。但它们的底层 API 是可逆向的,社区做的 CLI 工具填补了这个空隙:
- App Store → ipatool
- Google Play → googleplay-api、apkeep
- Microsoft Store → wsusscn2
为什么这很重要?因为自动化研究的前提是脚本化访问。没有 CLI 工具,大规模 App 分析就只能靠人工点击 GUI。有了 CLI 工具,一个 bash 脚本就能做 100 个 App 的安全扫描。
ipatool 不是什么革命性的技术——它只是一个写得不错的 API 客户端。但在「围墙花园 CLI 化」这个大趋势里,它是 iOS 生态里最完整的一个拼图。
项目地址:https://github.com/majd/ipatool
适合人群:iOS 安全研究员、App 分析工程师、visionOS 开发者
上手难度:低(需要 Apple ID + 命令行基础)