TrollStore/README.md

167 lines
7.6 KiB
Markdown
Raw Normal View History

2022-09-02 23:19:48 +08:00
# TrollStore
2022-10-04 07:08:10 +08:00
TrollStore is a permasigned jailed app that can permanently install any IPA you open in it.
2022-09-02 23:19:48 +08:00
2022-10-14 10:17:53 +08:00
It works because of an AMFI/CoreTrust bug where iOS doesn't verify whether or not a root certificate used to sign a binary is legit.
2022-09-14 00:52:04 +08:00
2022-10-13 01:49:13 +08:00
## Compatibility
2022-09-14 00:47:05 +08:00
TrollStore works on **iOS 14.0 - 15.4.1**, on **iOS 15.5 beta 1 - iOS 15.5 beta 4** and on **iOS 15.6 beta 1 - iOS 15.6 beta 5**.
iOS 15.5 RC / full build is **NOT** supported.
Anything higher than iOS 15.6 beta 5 (including iOS 15.6 RC / full build) is **NOT** supported.
Anything lower than iOS 14.0 is **NOT** supported.
2022-10-21 05:40:10 +08:00
Anything not supported right now will **_NEVER_** be supported, TrollStore is a one time thing, it will not receive compatibility updates in the future, please **stop asking** about it, GitHub issues regarding version support will be **closed without an answer**.
2022-10-13 01:49:13 +08:00
## Installing TrollStore (No Jailbreak)
2022-10-13 01:49:37 +08:00
### Installation Links
2022-10-13 01:47:28 +08:00
[TrollHelperOTA Link 1 - Supports all devices on iOS 15 and up](https://api.jailbreaks.app/troll)
2022-10-13 01:47:28 +08:00
[TrollHelperOTA Link 2 - Supports all arm64e (A12 - A15) devices on iOS 14 and up](https://api.jailbreaks.app/troll64e)
2022-10-21 05:40:10 +08:00
Please refer to "Compatibility" above to check whether your version is compatible, if it's not, these links will not work.
2022-10-14 10:17:53 +08:00
This installation method unfortunately does **NOT** work on arm64 (A8 - A11) iOS 14 devices. **HOWEVER**, for these devices, you can jailbreak with checkra1n and then use the jailbroken installation guide below.
2022-10-14 10:17:53 +08:00
### Guide (No Jailbreak)
2022-10-14 10:17:53 +08:00
1. Based on what device you are using, pick one of the two links above and open it.
2022-10-14 10:17:53 +08:00
2. An alert should appear, tap "Install"
3. When the installation is finished, you will find a "GTA Car Tracker" application on your device.
2022-10-14 10:17:53 +08:00
4. If this app has not appeared, that's a stock iOS bug, reboot your device and the app will appear.
2022-10-14 10:17:53 +08:00
5. Launch the app, and tap "Install TrollStore"
6. Wait a few seconds, your device should respring and TrollStore will be installed.
2022-10-14 10:17:53 +08:00
7. You can now either delete the "GTA Car Tracker" app, or register it as the persistence helper by opening it and tapping the option at the bottom. If you do this, don't delete the app.
2022-10-12 05:48:07 +08:00
8. Open the TrollStore app and press "Install ldid" in the Settings tab, then read the information under "Persistence", and install the Persistence Helper into a system app if you want persistence (not needed if you registered the GTA Car Tracker app as the persistence helper in step 7).
9. Done, you can now share IPA files with TrollStore and they will be permanently installed on your device.
2022-09-14 06:57:06 +08:00
2022-10-13 01:49:13 +08:00
## Installing TrollStore (Jailbreak)
2022-10-13 01:51:58 +08:00
Supports jailbroken devices running 14.0 and above.
2022-10-13 01:49:13 +08:00
### Guide
2022-10-14 10:17:53 +08:00
1. Open your package manager, and make sure Havoc repo (https://havoc.app) is added under Sources, then search for "TrollStore Helper" and install it.
2022-10-14 10:17:53 +08:00
2. After the installation, respring and a "TrollHelper" app should be on your home screen, launch it.
2022-10-14 10:17:53 +08:00
3. Launch the app, tap "Install TrollStore"
4. Wait a few seconds, your device should respring and TrollStore will be installed.
5. Open the TrollStore app and press "Install ldid" in the Settings tab, then read the information under "Persistence", the TrollHelper app on the home screen will be your persistence helper.
6. Done, you can now share IPA files with TrollStore and they will be permanently installed on your device.
2022-10-13 01:49:13 +08:00
## Updating TrollStore
2022-09-14 00:47:05 +08:00
2022-10-14 10:17:53 +08:00
When a new TrollStore update is available, a button to install it will appear at the top in the TrollStore settings. After tapping the button, TrollStore will automatically download the update, install it, and respring.
Alternatively (if anything goes wrong), you can download the TrollStore.tar file under Releases and open it in TrollStore, TrollStore will install the update and respring.
2022-09-14 00:47:05 +08:00
2022-10-13 01:49:13 +08:00
## Uninstalling an app
2022-09-14 01:20:46 +08:00
2022-10-04 07:08:10 +08:00
Apps installed from TrollStore can only be uninstalled from TrollStore itself, tap an app or swipe it to the right in the 'Apps' tab to delete it.
2022-09-14 01:20:46 +08:00
2022-10-13 01:49:13 +08:00
## Persistence Helper
2022-09-14 00:47:05 +08:00
2022-10-04 07:08:10 +08:00
The CoreTrust bug used in TrollStore is only enough to install "System" apps, this is because FrontBoard has an additional security check (it calls libmis) every time before a user app is launched. Unfortunately it is not possible to install new "System" apps that stay through an icon cache reload. Therefore, when iOS reloads the icon cache, all TrollStore installed apps including TrollStore itself will revert back to "User" state and will no longer launch.
2022-09-14 00:47:05 +08:00
2022-10-04 07:08:10 +08:00
The only way to work around this is to install a persistence helper into a system app, this helper can then be used to reregister TrollStore and its installed apps as "System" so that they become launchable again, an option for this is available in TrollStore settings.
2022-09-14 00:47:05 +08:00
On jailbroken iOS 14 when TrollHelper is used for installation, it is located in /Applications and will persist as a "System" app through icon cache reloads, therefore TrollHelper is used as the persistence helper on iOS 14.
2022-10-13 01:49:13 +08:00
## Features
2022-09-14 00:47:05 +08:00
2022-10-20 01:23:02 +08:00
The binaries inside an IPA can have arbitrary entitlements, fakesign them with ldid and the entitlements you want (`ldid -S<path/to/entitlements.plist> <path/to/binary>`) and TrollStore will preserve the entitlements when resigning them with the fake root certificate on installation. This gives you a lot of possibilities, some of which are explained below.
2022-09-14 00:47:05 +08:00
2022-10-13 01:49:13 +08:00
### Banned entitlements
2022-09-14 00:47:05 +08:00
iOS 15 on A12+ has banned the following three entitlements related to running unsigned code, these are impossible to get without a PPL bypass, apps signed with them will crash on launch.
2022-09-14 00:47:05 +08:00
`com.apple.private.cs.debugger`
`dynamic-codesigning`
`com.apple.private.skip-library-validation`
2022-10-13 01:49:13 +08:00
### Unsandboxing
2022-09-14 00:47:05 +08:00
Your app can run unsandboxed using one of the following entitlements:
```
<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/>
```
The third one is recommended if you still want a sandbox container for your application.
2022-10-12 07:19:44 +08:00
You might also need the platform-application entitlement in order for these to work properly:
2022-09-14 00:47:05 +08:00
```
<key>platform-application</key>
<true/>
```
Please note that the platform-application entitlement causes side effects such as some parts of the sandbox becoming tighter, so you may need additional private entitlements to circumvent that. (For example afterwards you need an exception entitlement for every single IOKit user client class you want to access).
2022-10-13 01:49:13 +08:00
### Root Helpers
2022-09-14 00:47:05 +08:00
When your app is not sandboxed, you can spawn other binaries using posix_spawn, you can also spawn binaries as root with the following entitlement:
```
<key>com.apple.private.persona-mgmt</key>
<true/>
```
2022-10-20 01:23:02 +08:00
Because a root binary needs special permissions, you need to specify all your root binaries in the Info.plist of your application like so:
2022-09-14 00:47:05 +08:00
```
<key>TSRootBinaries</key>
<array>
<string>roothelper1</string>
<string>some/nested/roothelper</string>
</array>
```
Note: The paths in the TSRootBinaries array are relative to the location of the Info.plist, you can also include this key in other bundles such as app plugins.
2022-10-20 08:34:50 +08:00
Afterwards you can use the [spawnRoot function in TSUtil.m](./Shared/TSUtil.m#L74) to spawn the binary as root.
2022-09-14 00:47:05 +08:00
2022-10-13 01:50:53 +08:00
### Things that are not possible using TrollStore
2022-09-14 00:47:05 +08:00
2022-09-14 01:15:33 +08:00
- Getting proper platformization / `CS_PLATFORMIZED`
2022-09-14 00:50:06 +08:00
- Spawning a launch daemon (Would need `CS_PLATFORMIZED`)
2022-09-14 00:50:32 +08:00
- Injecting a tweak into a system process (Would need `CS_PLATFORMIZED`, a userland PAC bypass and a PMAP trust level bypass)
2022-09-14 00:47:05 +08:00
2022-10-13 01:49:13 +08:00
## Credits and Further Reading
2022-09-14 00:47:05 +08:00
[@LinusHenze](https://twitter.com/LinusHenze/) - Found the CoreTrust bug that allows TrollStore to work.
[Fugu15 Presentation](https://youtu.be/NIyKNjNNB5Q?t=3046)
[Write-Up on the CoreTrust bug with more information](https://worthdoingbadly.com/coretrust/).