AssppWeb如何把裸IPA变成可安装文件?SINF注入与iTunesMetadata原理全解
AssppWeb如何把裸IPA变成可安装文件SINF注入与iTunesMetadata原理全解【免费下载链接】AssppWeb项目地址: https://gitcode.com/gh_mirrors/as/AssppWebAssppWeb 是一个网页版 iOS 免 App Store 安装工具用 Apple ID 登录后它替你完成购买授权 → 下载裸 IPA → SINF 注入 → 编译安装包的全流程最终生成一个可以直接通过itms-services://协议装进 iPhone 的合法安装包。今天这篇就把最核心的SINF 注入与iTunesMetadata 原理彻底讲清楚——即使你没写过一行代码也能明白一个裸 IPA是如何变成可安装文件的。为什么裸 IPA装不上缺了两把钥匙直接从 App Store CDN 下载下来的 IPA业内叫裸 IPA或裸包。它本身是一个标准的 zip 压缩包但缺少两样东西iOS 系统会直接拒绝安装缺失文件作用没有它会怎样SINF签名信息文件相当于激活许可证由 Apple 服务器在你购买后颁发系统提示无法验证此软件包iTunesMetadata.plist记录这个 App 是谁、用哪个 Apple ID 买的安装后可能被判定为盗版/无法同步打个比方裸 IPA 就像一台未激活的设备SINF 是激活许可证iTunesMetadata 是购买凭证。AssppWeb 的核心工作就是在浏览器里替你购买并拿到这两样东西再让服务器把它们塞回 IPA 包内部。零信任设计整个购买过程都在你的浏览器里完成通过 WebAssembly 版 libcurl 直连 Apple 服务器服务器只是一个盲传的 TCP 中继永远看不到你的 Apple 账号密码。三步走从购买授权到可安装文件的完整流程整个编译链路分三步前两步在浏览器第三步在服务器购买授权浏览器调用 Apple 的buyProduct接口用你的 Apple ID 为指定 App 购买免费 App 即激活授权。源码见 purchase.ts。领取 SINF浏览器请求 Apple 的 volumeStore 接口拿到两样东西——IPA 的下载直链以及一串 Base64 编码的 SINF 数据和 App 元数据。浏览器随即用元数据拼出iTunesMetadata.plist。提取逻辑在 download.ts。下载 注入服务器从 Apple CDN 多线程下载裸 IPA完成后调用 SINF 注入器把许可证缝进包里状态从downloading变为injecting再变为completed。这一步的调度代码在 downloadManager.ts。编译完成后包就会出现在 Downloads 页面可以一键下载或直接生成安装链接SINF 注入原理许可证文件塞进 IPA 的哪里注入器 sinfInjector.ts 的思路非常老派但极其可靠先读包打开 IPAzip 格式扫描找到两个关键文件——SC_Info/Manifest.plistApple 在里面声明了 SINF 应该放的所有路径SinfPaths字段Info.plist兜底方案从中读取主可执行文件名CFBundleExecutable。再塞包如果 Manifest.plist 存在就按它声明的每个SinfPaths路径把对应的 SINF 写入Payload/App名.app/下如果只有 Info.plist就按惯例写入Payload/App名.app/SC_Info/可执行文件名.sinf。详见 sinfInjector.ts。原地更新 zip文件写入临时目录后用系统zip -0命令以追加模式更新原 IPA不重新打包、不破坏原有压缩块速度极快SINF 文件只有几 KB。实现见 sinfInjector.ts。也就是说注入 按 Apple 自己声明的路径表把许可证文件补进 zip 包的对应位置包体结构对其他内容零改动。iTunesMetadata.plist 注入为什么必须用二进制格式还记得第 2 步里浏览器拼好的元数据吗它在 download.ts 中是这样构造的把 App 的元数据字典版本、Bundle ID 等加上apple-id你的账号字段删掉敏感字段如passwordToken避免凭证残留进包序列化成 plistBase64 后传给服务器。服务器端在注入时还有一个讲究sinfInjector.tsApple 原生产物用的是二进制 plist格式而浏览器发来的是 XML 文本。所以注入器会先把 XML 解析出来再重新编码为二进制 plist 写入 IPA根目录的iTunesMetadata.plist解析失败时兜底使用原始 XML。这一步保证了 iOS 的已购项目验证能正确识别这是你买的 App。itms-services:// 一键安装安装清单如何生成包编译好之后iPhone 上怎么装iOS 官方机制是itms-services://协议系统会先拉取一个 XML 格式的manifest.plist再按清单里的 URL 下载 payloadIPA本体。AssppWeb 用 manifestBuilder.ts 动态生成这份清单包含 4 个 URLIPA 直链、小图标、大图标、以及 App 名称/版本等元信息图标目前是占位白图见 install.ts。随后 install.ts 会拼出最终的深链itms-services://?actiondownload-manifesturl你的域名/api/install/id/manifest.plist在 iOS 上点击它或扫描对应二维码系统就会自动下载安装。⚠️ 注意iOS 强制要求 HTTPS自部署时必须配好 TLS 反向代理否则清单拉不下来详见下文快速开始。零信任架构为什么你的 Apple 凭证不会碰服务器前面提到购买在浏览器完成具体怎么实现浏览器内嵌WebAssembly 版 libcurl Mbed TLS直接与 Apple 服务器做 TLS 通信密码、DSID 等凭证全程不出浏览器部分接口如 bag 接口因需要 TLS 1.3 无法在浏览器内完成由服务器仅代理公开数据Apple 服务地址列表不含任何凭证见 bag.ts 与 bag.ts服务器与浏览器之间通过Wisp 协议的 WebSocket 盲中继转发字节流服务器不解密、不读取内容。这正是它能安全地帮你装 App的底气你看到的进度条背后是浏览器在替你跑完整的 Apple 登录/购买协议栈。快速开始3 步自托管 AssppWebgit clone https://gitcode.com/gh_mirrors/as/AssppWeb cd AssppWeb docker compose up -d几个关键环境变量完整列表见 README.md变量说明DATA_DIRIPA 缓存目录PUBLIC_BASE_URL生成安装清单用的公网 HTTPS 地址AUTO_CLEANUP_DAYS自动清理 N 天前的编译缓存ACCESS_PASSWORD给 Web UI 加一道访问密码✅ 自托管后记得配好带 TLS 的反向代理如 Caddy 一行reverse_proxy并保证 WebSocket/wisp/可通安装功能就能完整跑起来。小结裸 IPA 缺SINF许可证与iTunesMetadata购买凭证装了也会被拒AssppWeb 在浏览器里完成 Apple 购买协议拿到 SINF 与元数据服务器下载 IPA 后按SC_Info/Manifest.plist声明的路径表原地 zip 注入许可证并把元数据编码为二进制 plist 塞进包根目录最后动态生成itms-services://安装清单实现 iPhone 上的一键安装。看懂了这条链路你就掌握了网页版 AltStore背后的全部原理。【免费下载链接】AssppWeb项目地址: https://gitcode.com/gh_mirrors/as/AssppWeb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考