TrollStore
TrollStore是一个永久签名的越狱应用程序,可以永久安装你在其中打开的任何IPA文件。
它之所以能够工作,是因为AMFI/CoreTrust存在一个bug,iOS无法正确验证包含多个签名者的二进制文件的代码签名。
支持的版本:14.0 beta 2 - 16.6.1, 16.7 RC (20H18), 17.0
安装TrollStore
关于安装TrollStore,请参考ios.cfw.guide上的指南
16.7.x(不包括16.7 RC)和17.0.1+将永远不会被支持(除非发现第三个CoreTrust bug,但这不太可能)。
更新TrollStore
当有新的TrollStore更新可用时,TrollStore设置顶部会出现一个安装按钮。点击按钮后,TrollStore将自动下载更新,安装并重新启动。
或者(如果出现任何问题),你可以在Releases下下载TrollStore.tar文件并在TrollStore中打开,TrollStore将安装更新并重新启动。
卸载应用程序
通过TrollStore安装的应用只能从TrollStore本身卸载,在"应用"选项卡中点击一个应用或向左滑动即可删除。
持久性助手
TrollStore使用的CoreTrust bug仅足以安装"系统"应用,这是因为每次启动用户应用之前,FrontBoard都会进行额外的安全检查(调用libmis)。遗憾的是,无法安装能在图标缓存重新加载后保持的新"系统"应用。因此,当iOS重新加载图标缓存时,包括TrollStore本身在内的所有TrollStore安装的应用都会恢复为"用户"状态,无法再启动。
解决这个问题的唯一方法是在系统应用中安装一个持久性助手,然后可以使用这个助手重新将TrollStore及其安装的应用注册为"系统"应用,使它们再次可以启动,TrollStore设置中提供了这个选项。
在已越狱的iOS 14上,当使用TrollHelper进行安装时,它位于/Applications中,并会在图标缓存重新加载后作为"系统"应用保持,因此在iOS 14上使用TrollHelper作为持久性助手。
URL方案
从1.3版本开始,TrollStore替换了系统URL方案"apple-magnifier"(这样做是为了防止"越狱"检测像检测TrollStore独特URL方案那样检测到TrollStore)。这个URL方案可以用于直接从浏览器安装应用程序,或从应用程序本身启用JIT(仅2.0.12及以上版本),格式如下:
apple-magnifier://install?url=<IPA文件的URL>
apple-magnifier://enable-jit?bundle-id=<包标识符>
在没有安装TrollStore(1.3+)的设备上,这只会打开放大镜应用。
功能
IPA内的二进制文件可以有任意权限,用ldid和你想要的权限进行假签名(ldid -S<权限文件路径.plist> <二进制文件路径>
),TrollStore在安装时用假根证书重新签名时会保留这些权限。这给你提供了很多可能性,下面解释了其中一些。
被禁止的权限
iOS 15在A12+设备上禁止了以下三个与运行未签名代码相关的权限,没有PPL绕过是不可能获得这些权限的,带有这些权限的应用在启动时会崩溃。
com.apple.private.cs.debugger
dynamic-codesigning
com.apple.private.skip-library-validation
解除沙盒限制
你的应用可以使用以下权限之一来运行在非沙盒环境:
<key>com.apple.private.security.container-required</key>
<false/>
<key>com.apple.private.security.no-container</key>
<true/>
<key>com.apple.private.security.no-sandbox</key>
<true/>
如果你仍然希望应用程序有沙盒容器,建议使用第三个选项。
你可能还需要platform-application权限才能使这些正常工作:
<key>platform-application</key>
<true/>
请注意,platform-application权限会导致一些副作用,比如沙盒的某些部分变得更加严格,所以你可能需要额外的私有权限来绕过这一点。(例如,之后你需要为每个想要访问的IOKit用户客户端类添加一个例外权限)。
为了让带有com.apple.private.security.no-sandbox
和platform-application
权限的应用能够访问自己的数据容器,你可能需要以下额外权限:
<key>com.apple.private.security.storage.AppDataContainers</key>
<true/>
Root助手
当你的应用不在沙盒中时,你可以使用posix_spawn生成其他二进制文件,你还可以使用以下权限以root身份生成二进制文件:
<key>com.apple.private.persona-mgmt</key>
<true/>
你也可以在应用程序包中添加自己的二进制文件。
之后你可以使用TSUtil.m中的spawnRoot函数以root身份生成二进制文件。
使用TrollStore无法实现的事情
- 获得适当的平台化(
TF_PLATFORM
/CS_PLATFORMIZED
) - 生成启动守护程序(需要
CS_PLATFORMIZED
) - 向系统进程注入插件(需要
TF_PLATFORM
、用户空间PAC绕过和PMAP信任级别绕过)
编译
要编译TrollStore,请确保安装了theos。另外,确保安装了brew,并从brew安装libarchive。
致谢和进一步阅读
@alfiecg_dev - 通过补丁比对发现了使TrollStore工作的CoreTrust bug,并致力于自动化绕过。
Google威胁分析小组 - 作为野外间谍软件链的一部分发现了CoreTrust bug,并向苹果报告。
@LinusHenze - 发现了用于在iOS 14-15.6.1上通过TrollHelperOTA安装TrollStore的installd绕过,以及TrollStore 1.0中使用的原始CoreTrust bug。