iOS无限制直装IPA启动器教程
无限制iOS安装运行 IPA启动器介绍: LiveContainer
LiveContainer 是一款应用启动器(非模拟器或虚拟机监控程序),
LiveContainer 是一个 iOS App 启动器——注意,不是模拟器,也不是虚拟机,是真正在原生 iOS 运行时里执行目标 App。
允许您安装无限数量的应用(解决突破免费开发者账号的 3 个应用/10 个 App ID 限制),且只需一个应用和一个 App ID。
核心能力三句话说清楚:
-
无限 App 安装:所有 App 装在 LiveContainer 里,只占 1 个 App ID,突破只能安装 3 个应用限制
-
无需 JIT 即可运行:JIT-Less 模式下,App 用 LiveContainer 自己的证书自动签名,直接启动
-
多任务:同一个 App ID 可以装多个数据容器,相当于多账号同时在线;还支持画中画和分屏
LiveContainer技术原理:它是怎么实现的?
LiveContainer 没有用到任何越狱漏洞,
而是对 Mach-O 二进制格式、dyld 动态链接器做了精准的”外科手术”。
第一步:把 App 的可执行文件变成动态库
因为单独的 iOS App 的主可执行文件(MH_EXECUTE)都无法被另一个进程直接加载。
因此 LiveContainer 做了两件事:
1. 修改 __PAGEZERO 段: vmaddr: 0x0 → 0xFFFFC000 vmsize: 0x100000000 → 0x40002. 把文件类型从 MH_EXECUTE 改成 MH_DYLIB
经过这两个补丁,
目标 App 就变成了一个可以被 dlopen() 加载的动态库MH_DYLIB
第二步:欺骗 dyld,让 App 以为自己是主进程
App 启动时会调_NSGetExecutablePath 查询自己的路径。LiveContainer hook 了这个函数进行替换ipa路径:
Hook dyld4::APIs::_NSGetExecutablePath → 调用原始函数获取真实路径 → 用 builtin_vm_protect / TPRO 解锁内存写权限 → 把路径替换成其他的目标 App 的路径 → 还原原始函数
NSBundle.mainBundle 也被替换成目标 App 的 bundle,
让 App 完全认为自己运行在”自己的”进程里, 其实已经切换到其他ipa
第三步:dlopen 加载,跳到入口点
dlopen(目标App可执行文件路径) → TweakLoader 注入所有 .dylib tweak → 找到 App 的 entry point → 直接跳转执行 → App 调用 UIApplicationMain,正常启动
整个过程不需要越狱,不需要内核漏洞,完全在用户态完成。
LiveContainer下载
LiveContainer 提供独立版本和内置 SideStore 的版本
用LiveContainer+SideStore合并版,只占一个App ID和App位置,但可以无限安装ipa,普通账号只需要七天重签一次,不用付钱
系统要求
功能与指南
安装应用
打开 LiveContainer,点击右上角的加号图标,选择要安装的 IPA 文件。
添加应用到主屏幕
多个 LiveContainer
使用多个 LiveContainer 可以让您同时运行多个不同的应用,容器之间的数据传输几乎无缝。
多任务处理
现在,您可以在应用内的虚拟窗口中同时启动多个应用。这些窗口可以调整大小、缩放,甚至可以使用原生画中画(PiP)功能显示。在 iPad 上,应用可以以原生窗口模式运行,每个应用在单独的系统窗口中显示。如果您愿意,还可以在设置中将多任务模式设为默认的应用启动方式。
要使用多任务功能,请按住应用横幅并点击“多任务”。您也可以在设置中将多任务设为默认启动模式。
注意点
若要使用多任务功能,请确保在通过 SideStore/AltStore 安装时选择“保留应用扩展”。
如果您想为多任务应用启用 JIT,需要一个支持通过 PID 附加的 JIT 启用工具。(如 StikDebug)
部分应用在 LiveContainer 中可能会出现文件选择器异常或无法申请通知权限的问题。若要解决此问题,请在应用专属设置中相应启用“修复文件选择器”和“修复本地通知”选项。
“在应用中打开”支持
点击“应用”标签右上角的链接图标并输入 URL。LiveContainer 将检测合适的应用,并询问您是否要启动它。
此外,您可以使用此快捷指令将网页分享至 LiveContainer。请确保将此快捷指令添加到分享面板操作的“收藏夹”中。
兼容性
遗憾的是,并非所有应用都能在 LiveContainer 中正常运行,因此我们提供了一个兼容性列表,用于说明存在问题的应用。如果某应用未在该列表中,则它很可能可以正常运行。但如果无法运行,请就此提交 issue。
构建
打开 Xcode,在 xcconfigs/Global.xcconfig 中编辑 DEVELOPMENT_TEAM[config=Debug] 为您的团队 ID,然后进行编译。
项目结构
主可执行文件
若未选择应用,则加载 LiveContainerSwiftUI。
LiveContainerSwiftUI
LiveContainerUI 的 SwiftUI 重写版本(由 @hugeBlack 开发)
多语言支持的语言文件 Localizable.xcstrings 位于此处。如需帮助我们翻译 LiveContainer,请访问我们的 Crowdin 项目。
多任务支持
SideStore
TweakLoader
一个简单的插件注入器,用于加载 CydiaSubstrate 和插件。
会注入到你在 LiveContainer 中安装的每个应用。
ZSign
LiveContainer 使用由 khcrysalis 修改的 Feather 版本的 ZSign。
已根据 LiveContainer 的需求进行了修改。
工作原理
修补来宾可执行文件
将 MH_EXECUTE 更改为 MH_DYLIB。
注入加载命令以加载 TweakLoader.dylib
挂钩 dyld4::APIs::_NSGetExecutablePath
替换 config.process.mainExecutablePath
恢复原始的 dyld4::APIs::_NSGetExecutablePath
旧方法
-
使用无效的缓冲区指针输入调用
_NSGetExecutablePath -> SIGSEGV
-
执行一些魔法操作来覆盖 executable_path 的内容。
修补 NSBundle.mainBundle
绕过库验证
JIT 是绕过代码签名的可选方式。在无 JIT 模式下,所有可执行文件都经过签名,因此此条不适用。
源自 Restoring Dyld Memory Loading
动态打开可执行文件
TweakLoader 加载所选文件夹中的所有插件
找到入口点
来宾应用的入口点调用 UIApplicationMain 并像其他任何 iOS 应用一样启动。
多账户支持与钥匙串半隔离
系统会创建128个钥匙串访问组,LiveContainer 会为同一应用的每个容器随机分配这些访问组。因此,您可以创建128个具有不同钥匙串访问组的容器。
限制
访客应用的权限不会应用到宿主应用。不过这影响不大,因为侧载应用通常只需要基本权限。
访客应用容器未进行沙盒隔离。这意味着一个访客应用可以访问其他访客应用的数据。