• Stars
    star
    872
  • Rank 52,322 (Top 2 %)
  • Language
    Objective-C
  • License
    Apache License 2.0
  • Created over 1 year ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Run iOS app without actually installing it!

LiveContainer

Run unsigned iOS app without actually installing it!

  • Allows you to install unlimited apps (10 apps limit of free developer account do not apply here!)
  • Codesigning is entirely bypassed (requires JIT), no need to sign your apps before installing.

Compatibility

Unfortunately, not all apps work in LiveContainer, so we have a compatibility list to tell if there is apps that have issues. If they aren't on this list, then it's likely going run. However, if it doesn't work, please make an issue about it.

Building

export THEOS=/path/to/theos
git submodule init
git submodule update
make package

Usage

Requires SideStore; AltStore does not work because it expects the app opened before enabling JIT.

  • Build from source or get prebuilt ipa in the Actions tab
  • Open LiveContainer, tap the plus icon in the upper right hand corner and select IPA files to install.
  • Choose the app you want to open in the next launch.
  • Tap the play icon, it will jump to SideStore and exit.
  • In SideStore, hold down LiveContainer and tap Enable JIT. If you have SideStore build supporting JIT URL scheme, it jumps back to LiveContainer with JIT enabled and the guest app is ready to use.

Installing external tweaks

This feature is currently incomplete so you'll have to do the following manually.

  • Create your tweak folder at LiveContainer/Tweaks/<YourTweakBundleName>.
  • Download CydiaSubstrate.framework (you can get it from tweaked apps, this will be bundled into LiveContainer later) and place it into the tweak folder.
  • For each tweak, you need to fix the CydiaSubstrate rpath to point to @loader_path/CydiaSubstrate.framework/CydiaSubstrate using install_name_tool.
  • Put your patched tweaks into the tweak folder.
  • In the app picker screen, hold the app entry to change the tweak folder.

How does it work?

Patching guest executable

  • Patch __PAGEZERO segment:
    • Change vmaddr to 0xFFFFC000 (0x100000000 - 0x4000)
    • Change vmsize to 0x4000
  • Change MH_EXECUTE to MH_DYLIB.
  • Inject a load command to load TweakLoader.dylib

Patching @executable_path

  • Call _NSGetExecutablePath with an invalid buffer pointer input -> SIGSEGV
  • Do some magic stuff to overwrite the contents of executable_path.

Patching NSBundle.mainBundle

  • This property is overwritten with the guest app's bundle.

Bypassing Library Validation

dlopening the executable

  • Call dlopen with the guest app's executable
  • TweakLoader loads all tweaks in the selected folder
  • Find the entry point
  • Jump to the entry point
  • The guest app's entry point calls UIApplicationMain and start up like any other iOS apps.

Limitations

  • Entitlements from the guest app are not applied to the host app. This isn't a big deal since sideloaded apps requires only basic entitlements.
  • App Permissions are globally applied.
  • Guest app containers are not sandboxed. This means one guest app can access other guest apps' data.
  • arm64e executable is untested. It is recommended to use arm64 binary.
  • Only one guest app can run at a time. This is much more like 3 apps limit where you have to disable an app to run another (switching between app in LiveContainer is instant).
  • Remote push notification might not work. If you have a paid developer account then you don't even have to use LiveContainer
  • Querying custom URL schemes might not work(?)

TODO

  • Auto lock orientation
  • Simulate App Group(?)
  • More(?)

License

Apache License 2.0

Credits

More Repositories

1

TrollPad

Troll SpringBoard into thinking it's running on iPadOS
Logos
168
star
2

exagear_windows_emulator

Exagear Windows Emulator decompiled source code
Java
90
star
3

SparseBox

On-device toolbox?
Swift
70
star
4

CAPerfHUD

Enable system-wide performance HUD for iOS 13+
Objective-C
62
star
5

MRPC

Experimental Discord Mobile Rich Presence (Android)
Java
45
star
6

PojavLauncher

Maintaining https://khanhduytran0.github.io/PojavLauncher/changelog.html (old link used on v2.4.2 and below)
16
star
7

ExagearAndroidX11Server

A X11 Server for Android take from Exagear AXS library in Exagear Windows Emulator app
Java
14
star
8

SpringBoardTS

Launch SpringBoard as an app
Logos
10
star
9

MySystemShell

Demo of using System Shell private API to render view over SpringBoard
Objective-C
10
star
10

ngrok4ios

Patching ngrok macOS arm64 binary to run on iOS
C
9
star
11

ANGLEGLKit

Drop-in replacement for OpenGLES framework for iOS using ANGLE and MetalANGLEโ€™s MGLKit
C
8
star
12

DirtyLockdown

Experimental MacDirtyCow-powered lockdownd patch for self-pairing
Objective-C
4
star
13

PojavDX

A modified DX Dexer used by PojavLauncher v2
Java
3
star
14

khanhduytran0.github.io

HTML
3
star
15

PojavLauncher_LWJGL_Regal

LWJGL for PojavLauncher, clone of @artdeell and buildable in Android Studio.
C
3
star
16

FloatingActivity

An usage of Internal API that allow you to start an activity in floating mode
Java
3
star
17

DynamicPlayground

Load SpringBoard.framework and create a sandboxed Dynamic Island playground
Objective-C
3
star
18

bionic_lollipop-iosport

C
2
star
19

FrontBoardAppLauncher

Reference usage of FrontBoard & UIKit private API to display external app scene
Objective-C
2
star
20

khanhduytran0

1
star
21

mesa-zink-wip

Forked from https://gitlab.freedesktop.org/zmike/mesa.git
C
1
star