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-getbrewnpm 做的事情本质相同——把一个原本需要 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 用户一行搞定。
它的工作原理是直接调用 Apple 的 App Store 私有 API(iTunes Store API)。这些 API 本来是给 iTunes 和 App Store app 用的,但协议是公开的——只要有合法的 Apple ID 凭证,就能用这些 API 做搜索、购买、下载。

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
这些工具的共同特征是:用合法凭证(你的账号)访问私有 API,把 GUI 操作变成 CLI 操作。

为什么这很重要?因为自动化研究的前提是脚本化访问。没有 CLI 工具,大规模 App 分析就只能靠人工点击 GUI。有了 CLI 工具,一个 bash 脚本就能做 100 个 App 的安全扫描。

ipatool 不是什么革命性的技术——它只是一个写得不错的 API 客户端。但在「围墙花园 CLI 化」这个大趋势里,它是 iOS 生态里最完整的一个拼图。


项目地址:https://github.com/majd/ipatool

适合人群:iOS 安全研究员、App 分析工程师、visionOS 开发者

上手难度:低(需要 Apple ID + 命令行基础)

暂无表态

想参与讨论或点赞?登录后使用完整功能

讨论回复(0)

暂无回复,登录后可参与讨论
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens