missuo/unfairplay-bot

效率与系统工具

一个私有 Telegram Bot 与 HTTP API,用于下载并解密你已合法拥有的 App Store IPA。

101
14
Go
Apache-2.0
创建于 1 天前

这个项目是自托管的服务,面向需要为自己 Apple ID 已合法购买的应用获取带签名、限时下载链接的人。它把仅限私聊的 Telegram Bot 和带令牌的 HTTP API 结合在一起。你提供 app_id、bundle_id 或 App Store 链接,服务先用 ipatool 下载当前版本,再用 UnfairPlay 解密,最后给出临时下载地址。

实际改变了什么

真正的价值在于你不再手动操作 ipatool 和 UnfairPlay。Telegram 流程先确认再执行:它会显示应用名、版本、大小、价格以及该版本是否已缓存,只有用户在 10 分钟内点击 ✅ 后才会进入队列。耗时任务全程可见:排队位置、带速度和 ETA 的下载进度条、解密、下载按钮。每个任务只占用一条实时消息,用户也可以取消自己的任务。

缓存与进度的工作方式

每次请求都会先向 App Store 查询最新的 external version ID,因此即使查询 API 有延迟也不会漏掉新版本。缓存键是 trackId:externalVersionId,同一个应用用 bundle_id 和 app_id 请求会共享缓存。所以缓存命中只针对当前提供的版本,版本号一变,下一次请求就会重新下载。产物在最后一次命中后 24 小时过期,已签发的链接只在该产物过期前有效。进度可以通过 Server-Sent Events 或轮询任务接口查看 API 与部署说明。

访问与隐私条件

除管理员外,其他人都需要加入允许列表。管理员会收到带允许/忽略按钮的访问请求,也可以用 /allow、/revoke、/users 管理列表。Bot 只在私聊中回应,不需要公网 webhook,使用长轮询。解密时运行 --strip-account-data,会去掉 SC_Info 许可信息以及 iTunesMetadata.plist 中的 Apple ID 和购买者字段;服务会再次检查每个 IPA,如果 UnfairPlay 缺少该参数就拒绝启动。README 明确指出,仅限用于你账户合法获取的应用,且解密后的 IPA 和链接都属于私有数据。

需要提前考虑的条件

  • 两套独立凭据。 需要一份在已注册 Mac 上由 unfairplay setup 生成的 UnfairPlay 模型文件,以及一个 ipatool App Store 会话。模型可以复制到另一台机器,会话不能,必须在服务器上重新登录。两者必须属于同一个 Apple ID。
  • Docker Compose 或 systemd。 Compose 方式需要 Docker,并在前面配置带 TLS 的反向代理。systemd 方式不需要 Docker,但需要 Go(版本见 go.mod 或更新)、gcc、git 和 Caddy。Linux 构建需要 cgo,因此不支持从 macOS 交叉编译。
  • 稳定的容器身份。 Compose 文件固定了容器 MAC 地址,因为 ipatool 由它推导设备 GUID;登录后改动会导致会话失效。
  • 付费应用。 账户未购买的付费应用会返回 403 license_required。
  • 真实环境验证有限。 公共 CI 无法测试真实的下载和解密,因为这需要私有会话和模型;文档中的运维侧 canary 检查是这些环节的把关方式 项目 README。项目使用 Apache-2.0 许可,内置的 ipatool 和 UnfairPlay 各自保留自己的许可 许可证。

HotRepo 点评

HotRepo 仅记录到 2026-10-29 的一次新项目榜条目,当时共 101 个 star、排名第 3。这不是单日增长数据,也没有足够可比的历史来判断关注度能否持续。

本文由 AI 根据项目 README 生成,更新于 2026年10月29日,以项目官方文档为准。