mirror of
https://github.com/palera1n/palera1n.git
synced 2026-10-21 09:47:01 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ff3c7998e5 | ||
|
|
34b57f8ab3 | ||
|
|
5d4f0065a1 | ||
|
|
286e5d27ef | ||
|
|
1c5e13d644 | ||
|
|
5e718b2929 | ||
|
|
ee8dd9f02d | ||
|
|
f171c76093 | ||
|
|
84bb033350 | ||
|
|
64c67e3c01 | ||
|
|
294732e99b | ||
|
|
0be469d16a | ||
|
|
ec829371c9 | ||
|
|
7df5d5028a | ||
|
|
28c6fb02d8 | ||
|
|
315de66663 | ||
|
|
11fe6f84df | ||
|
|
cad049dd41 | ||
|
|
228d4e9146 | ||
|
|
cd529b6216 | ||
|
|
3677c3e4c3 | ||
|
|
81ffa1bc24 | ||
|
|
d5dc274aa2 | ||
|
|
b8a94458c9 | ||
|
|
d8ec510665 | ||
|
|
b227524d1d | ||
|
|
b4fd3f4ae5 | ||
|
|
7e1c40b6cc | ||
|
|
c5ec80436d | ||
|
|
797192191a | ||
|
|
2485235978 | ||
|
|
77eed6a93b | ||
|
|
d4ad4c2809 | ||
|
|
33c4702b6d | ||
|
|
27d9e6fa40 | ||
|
|
2b76a9d8f1 | ||
|
|
20c4bb8145 | ||
|
|
1fbc971b84 | ||
|
|
0a441ba889 | ||
|
|
c1c4821e60 | ||
|
|
b24a3bd19e | ||
|
|
53a300851a | ||
|
|
19637412f9 | ||
|
|
a6af28aa8d | ||
|
|
693aaa192c | ||
|
|
e4f0b8a11c | ||
|
|
b8bd6e9522 | ||
|
|
6e4c7d623c | ||
|
|
98f5230408 | ||
|
|
404a43a82e | ||
|
|
785c3a515f | ||
|
|
efb5ce48c3 | ||
|
|
a9a1f775cb | ||
|
|
8291ac6d79 | ||
|
|
6580820616 | ||
|
|
ee256722d1 | ||
|
|
49ce775f36 | ||
|
|
5d588a2709 | ||
|
|
e1c0e31687 | ||
|
|
9ad1fbfc9b | ||
|
|
b4ba4de2dc | ||
|
|
4b4502884a | ||
|
|
0b53c98b44 | ||
|
|
dd00072f8c | ||
|
|
40b08c4117 | ||
|
|
712d66514d | ||
|
|
8e18f202c4 | ||
|
|
af25b17c8f | ||
|
|
99f4a37b00 |
No files matched your search
@@ -19,9 +19,7 @@ jobs:
|
||||
|
||||
- name: Update submodules
|
||||
run: |
|
||||
cd ramdisk
|
||||
git pull origin main
|
||||
cd ..
|
||||
git submodule update --remote
|
||||
|
||||
- name: Commit changes
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
# Changelog
|
||||
|
||||
## 1.4.2
|
||||
- Add iOS 16.4 support
|
||||
- Various fixes
|
||||
|
||||
## 1.4.1
|
||||
- ibot.patched fix
|
||||
- Use payload on the X
|
||||
|
||||
+306
@@ -0,0 +1,306 @@
|
||||
|
||||
# Common Issues
|
||||
|
||||
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. ["Booted device" but not booted](#booted-device-but-not-booted)
|
||||
2. [NewTerm not launching](#newterm-not-launching)
|
||||
3. [palera1n/mineek repo not working](#palera1nmineek-repo-not-working)
|
||||
4. [Procursus "killed 9"](#procursus-killed-9)
|
||||
5. [App crashes on open](#app-crashes-on-open)
|
||||
6. ["Killed" issue (*not* "Killed: 9")](#killed-issue-not-killed-9)
|
||||
7. [Please reinstall Sileo via SSH](#please-reinstall-sileo-via-ssh)
|
||||
8. [Loader app not appearing](#loader-app-not-appearing)
|
||||
9. [Your local changes would be overwritten by checkout](#your-local-changes-would-be-overwritten-by-checkout)
|
||||
10. [Could not connect to lockdownd](#could-not-connect-to-lockdownd)
|
||||
11. [Package is in a very bad inconsistent state](#package-is-in-a-very-bad-inconsistent-state)
|
||||
12. [Error installing bootstrap. Status: -1](#error-installing-bootstrap-status--1)
|
||||
13. [jbinit DIED!](#jbinit-died)
|
||||
14. [Daemons crashing on iOS 16.2+](#daemons-crashing-on-ios-162)
|
||||
15. [Panics making loader not appear](#panics-making-loader-not-appear)
|
||||
16. [libhooker wants to install?](#libhooker-wants-to-install)
|
||||
17. [Pressing "install" on each jb](#pressing-install-on-each-jb)
|
||||
18. [--restorerootfs still keeps app icons??](#--restorerootfs-still-keeps-app-icons)
|
||||
19. [Device boots out of DFU](#device-boots-out-of-dfu)
|
||||
20. [How to fix RocketBootstrap](#how-to-fix-rocketbootstrap)
|
||||
21. [SEP Panic: :skg /skgs](#sep-panic-skg-skgs)
|
||||
22. [Cannot download apps from the App Store](#cannot-download-apps-from-the-app-store)
|
||||
23. [Snowboard theming incorrectly](#snowboard-theming-incorrectly)
|
||||
24. [End-of-central-directory signature not found](#end-of-central-directory-signature-not-found)
|
||||
25. [Filza crashing on launch](#filza-crashing-on-launch)
|
||||
26. [dpkg error: Read-only file system](#dpkg-error-read-only-file-system)
|
||||
27. [Library not loaded: /usr/lib/libSystem.B.dylib](#library-not-loaded-usrliblibsystembdylib)
|
||||
28. [Stuck at waiting for network](#stuck-at-waiting-for-network)
|
||||
29. [No space left on device](#no-space-left-on-device)
|
||||
30. [Found the USB handle followed by an error occurred](#found-the-usb-handle-followed-by-an-error-occurred)
|
||||
31. [pip error: legacy-install-failure](#pip-error-legacy-install-failure)
|
||||
|
||||
## \"Booted device\" but not booted
|
||||
This may happen when the downloading and patching process is interrupted. Please run `./palera1n.sh clean` (use with `sudo` if on Linux), then try again.
|
||||
If that doesn't fix it, it may be caused by an update from the Procursus repo. The quickest way to fix it is to [restore rootfs](https://ios.cfw.guide/removing-palera1n/). Alternatively, you can manually restore `/usr/libexec/dirs_cleaner` from the rootfs snapshot using the SSHRD script.
|
||||
|
||||
## NewTerm not launching
|
||||
Install NewTerm 2 from [https://apt.itsnebula.net/](https://apt.itsnebula.net/ "https://apt.itsnebula.net/") or get NewTerm3 beta.
|
||||
|
||||
## palera1n\/mineek repo not working
|
||||
[https://repo.palera.in/](https://repo.palera.in/ "https://repo.palera.in/") and [https://mineek.github.io/repo](https://mineek.github.io/repo "https://mineek.github.io/repo") are supposed to be used on rootless jailbreaks, not with any rootful jailbreaks with fakefs or tethered that have root access.
|
||||
|
||||
## Procursus \"killed 9\"
|
||||
Binaries will need to be resigned by the Procursus Team to fix Killed: 9. In the meantime, use the palera1n strap repo. you can install it from [nebula’s repo](https://apt.itsnebula.net).
|
||||
|
||||
## App crashes on open
|
||||
Refer to [this](#how-to-fix-rocketbootstrap) first.
|
||||
|
||||
Otherwise, run this in NewTerm or SSH
|
||||
- `ldid -s /Applications/<appname>.app`
|
||||
- Don't include the <>
|
||||
|
||||
## \"Killed\" issue \(*not* \"Killed: 9\"\)
|
||||
You ran out of RAM on the Linux Live CD.
|
||||
|
||||
Ways to fix the issue, ordered by which to try first:
|
||||
1. Close some apps, like Discord
|
||||
2. Attempt a shallow clone, `git clone --depth=1` in place of `git clone`
|
||||
3. Clone palera1n onto persistent storage[note 1]
|
||||
4. Install Linux onto your computer.
|
||||
|
||||
**Note 1: How to use persistent storage from Linux Live, with terminal**
|
||||
1. If you have already cloned palera1n, please delete it! Usually this can be done with `sudo rm -rf ~/palera1n` (assuming palera1n cloned into home directory)
|
||||
2. You may want to install ntfs-3g first, on Ubuntu this can be done by running `sudo apt install ntfs-3g`
|
||||
3. Run `sudo lsblk` to list your disks
|
||||
4. Locate the persistent storage you want to use, for example a Windows C: drive would be of type "ntfs" and at least 10 GB in size, take a note of the device name, which starts with /dev
|
||||
5. Mount disk onto `/mnt` *(example, please don’t paste as is)*: `sudo mount -t ntfs /dev/sda3 /mnt`
|
||||
6. Change the working directory into `/mnt`: `cd /mnt`
|
||||
7. Try to clone palera1n again
|
||||
|
||||
**Note 2: Most Linux Installers will set up swap areas automatically during the install if you use guided partitioning (if such option exists)**
|
||||
In order to create a 2GB swap area as root:
|
||||
1. Run `dd if=/dev/zero of=/swapfile bs=1M count=2048`
|
||||
2. Run `chmod 600 /swapfile`
|
||||
3. Format by running `mkswap /swapfile`
|
||||
4. Open /etc/fstab in an editor like `nano`, then add a line that is `/swapfile none swap sw 0 0`
|
||||
5. Run `swapon /swapfile`
|
||||
|
||||
## Please reinstall Sileo via SSH
|
||||
If you have AutoSign installed and you reinstall/update Sileo, you'll get the error message shown in the screenshot. Here's how to fix it.
|
||||
|
||||
1. Get access to a terminal by either using SSH or NewTerm
|
||||
2. Run `sudo apt remove autosign`. Unless you changed it, the password is `alpine`
|
||||
3. Once it's done, run `sudo apt reinstall org.coolstar.sileo`
|
||||
4. Try running Sileo again. Feel free to upgrade it if that was what you were planning to do.
|
||||
5. Install AutoSign again
|
||||
|
||||
It should be fixed after these steps.
|
||||
|
||||
Example image:
|
||||

|
||||
|
||||
|
||||
**Note**: Some tweaks (e.g. Watusi) are known to not work with this method.
|
||||
|
||||
## Loader app not appearing
|
||||
Try these steps:
|
||||
1. Check if [this shortcut](https://www.icloud.com/shortcuts/8cd5f489c8854ee0ab9ee38f2e62f87d) opens it
|
||||
2. Check for any panic logs by going to
|
||||
1. Settings
|
||||
2. Privacy
|
||||
3. Analytics & Improvements
|
||||
4. Analytics Data
|
||||
- If there are any, send the **latest** one that starts with `panic-full`
|
||||
- **Please do not send any other device log**
|
||||
3. If these steps above don't work, [restore rootfs](https://ios.cfw.guide/removing-palera1n/) and rejailbreak
|
||||
|
||||
If none of these help, make sure you're waiting enough time [for the respring] (15-30 seconds).
|
||||
|
||||
On iPads, if other apps don’t appear along side the loader, try installing TrollStore Helper from the [Havoc repo](https://havoc.app) and use it to install TrollStore.
|
||||
|
||||
## Your local changes would be overwritten by checkout
|
||||
Run the following commands, and then try again:
|
||||
- `cd ramdisk`
|
||||
- `git stash`
|
||||
- `git stash drop`
|
||||
- `cd ..`
|
||||
|
||||
## Could not connect to lockdownd
|
||||
**Mux error (-8)**
|
||||
- Unplug and plug your device back in
|
||||
|
||||
**Pairing dialog response pending (-19)**
|
||||
- Accept the prompt to trust the computer on your device.
|
||||
|
||||
**Invalid HostID (-21)**
|
||||
1. Run `idevicepair pair` (use `sudo` on Linux)
|
||||
2. Accept the prompt to trust the computer on your device if needed
|
||||
3. Run `idevicepair pair` again (use `sudo` on Linux)
|
||||
- Alternatively, try entering [recovery mode manually](https://support.apple.com/en-us/HT201263 "enter recovery mode") before jailbreaking.
|
||||
|
||||
## Package is in a very bad inconsistent state
|
||||
You can fix this by running this command in a terminal:
|
||||
- `sudo dpkg -r --force-remove-reinstreq <PACKAGE_NAME>`
|
||||
- Don't include the <>
|
||||
|
||||
## Error installing bootstrap. Status: \-1
|
||||
You're not jailbroken. Sideloading the loader app on its own **will not work**.
|
||||
|
||||
Please run the palera1n script on your computer to jailbreak your device.
|
||||
|
||||
## jbinit DIED!
|
||||
Your device may get stuck on a verbose boot screen, and if you look closely you'll see a "jbinit DIED!" error near the top.
|
||||
|
||||
The simplest way to fix this is `rm -rf blobs` (use `sudo` if on Linux), then force reboot your device and try to jailbreak again.
|
||||
|
||||
**For advanced users**:
|
||||
You can also try re-copying the `other/rootfs` files manually to the device using SSHRD.
|
||||
|
||||
## Daemons crashing on iOS 16.2+
|
||||
Substitute may cause daemons to crash on iOS 16.2 and above. It's recommended to downgrade to iOS 16.1.2 or below for now.
|
||||
- If you don't have blobs saved, you can downgrade to 15.6 RC and delay OTA to 16.1.2. This expires in a month.
|
||||
|
||||
Or you can try using ElleKit instead, but note that some tweaks don't yet work with it.
|
||||
<details>
|
||||
<summary>How to Install ElleKit</summary>
|
||||
<code>sudo rmdir /usr/lib/TweakInject
|
||||
sudo ln -s /Library/MobileSubstrate/DynamicLibraries /usr/lib/TweakInject
|
||||
sudo mv /Library/MobileSubstrate/DynamicLibraries/MobileSafety.dylib{,.disabled}
|
||||
sudo mkdir -p /Library/Frameworks/CydiaSubstrate.framework
|
||||
sudo ln -s /usr/lib/libsubstrate.dylib /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate
|
||||
sudo /usr/libexec/ellekit/loader
|
||||
sudo mkdir -p /etc/rc.d
|
||||
sudo ln -s /usr/libexec/ellekit/loader /etc/rc.d/ellekit-loader
|
||||
launchctl reboot userspace</code>
|
||||
|
||||
Then launch daemons in loader.
|
||||
</details>
|
||||
|
||||
## Panics making loader not appear
|
||||
You may be encountering some issue related to panics and the loader “not appearing”, on A10+ make sure you have your passcode **disabled** before jailbreaking.
|
||||
|
||||
## libhooker wants to install?
|
||||
**Remove the Chimera and Odyssey repo immediately!**
|
||||
|
||||
These repos are not meant to be used with palera1n and are able to break your jailbreak if you install anything from them.
|
||||
|
||||
## Pressing \"install\" on each jb
|
||||
**DO NOT DO THIS.** It resets your package lists and will likely break your jailbreak install eventually. Instead, press the gear icon, and then press Do All.
|
||||
|
||||
If you managed to mess up your jailbreak this way, [restore rootfs](https://ios.cfw.guide/removing-palera1n/).
|
||||
|
||||
## --restorerootfs still keeps app icons??
|
||||
There's an issue with restoring rootfs where it doesn’t uicache. **There is no need to worry**; this happens on a couple of other jailbreaks and serves no harm to the user or device.
|
||||
|
||||
Example image:
|
||||

|
||||
|
||||
## Device boots out of DFU
|
||||
Make sure to use a USB-A cable, and follow one of the methods below to enter DFU.
|
||||
|
||||
**Method 1**
|
||||
1. Make sure your device is in either normal or recovery mode.
|
||||
2. Connect your device to your computer.
|
||||
3. Run `./palera1n.sh dfuhelper` (use `sudo` if on Linux).
|
||||
4. Follow the on-screen instructions.
|
||||
|
||||
**Method 2**
|
||||
1. Power off your device.
|
||||
2. Connect it to your computer or a charger.
|
||||
3. As soon as the Apple logo comes on, start doing the [DFU mode sequence](https://help.ifixit.com/article/108-dfu-restore).
|
||||
|
||||
## How to fix RocketBootstrap
|
||||
If you have Ryan Petrich's RocketBootstrap installed on iOS 15 or above, it may cause nearly every app to crash or even respring loops, especially when Cephei is also installed. To fix this, follow the steps below.
|
||||
|
||||
1. Uninstall any existing version of RocketBootstrap you have installed
|
||||
2. Remove the Odyssey repo if you have it
|
||||
3. Install RocketBootstrap from [this repo](https://rpetri.ch/repo).
|
||||
4. Install RocketBootstrapFix from [this repo](https://repo.alexia.lol/).
|
||||
|
||||
This is an updated fix that should work with more tweaks than the Odyssey version.
|
||||
|
||||
## SEP Panic: :skg /skgs
|
||||
This happens due to having a passcode set on A10-A11 devices when jailbreaking (or having previously set a passcode on iOS 16, even if it's currently turned off).
|
||||
|
||||
If you are on A10, use [checkp4le](https://github.com/guacaplushy/checkp4le).
|
||||
<details>
|
||||
<summary>Why?</summary>
|
||||
checkp4le boots with checkra1n using a custom kernel patchfinder, which allows SEP to be re-enabled on A10
|
||||
</details>
|
||||
|
||||
If you are on A11
|
||||
- iOS 15
|
||||
- Turn off your passcode and try jailbreaking again.
|
||||
- iOS 16
|
||||
1. Turn off your passcode
|
||||
2. Backup your device
|
||||
3. Erase from settings or restore from iTunes/Finder
|
||||
4. Restore the backup.
|
||||
5. Then try jailbreaking again.
|
||||
|
||||
If you don't want to use checkp4le and just want to have a passcode, or if you're on A11, you can use FakePass from [this repo](https://repo.alexia.lol/) to have a passcode. However, this will only work in a jailbroken state (it can be bypassed by simply rebooting the device).
|
||||
|
||||
## Cannot download apps from the App Store
|
||||
Install Choicy from [this repo](https://opa334.github.io) and disable tweak injection into the App Store.
|
||||
|
||||
Alternatively, disable tweak injection globally in the Substitute app and respring. You can re-enable it after downloading the apps you wanted.
|
||||
|
||||
## Snowboard theming incorrectly
|
||||
You may be encountering an issue with Snowboard not theming correctly or not theming at all. To fix this, make sure you have Snowboard from [SparkDev's repo](https://sparkdev.me).
|
||||
|
||||
Example image:
|
||||

|
||||
|
||||
## End-of-central-directory signature not found
|
||||
If the unzip error message it cannot find "`palera1n.zip(.ZIP, period.)`", you are running an outdated version of palera1n and need to update using `git pull`. If this doesn't work, reclone the palera1n repository by running `cd .. && sudo rm -rf palera1n && sudo git clone --recursive --depth=1 --shallow-submodules https://github.com/palera1n/palera1n && cd palera1n`.
|
||||
|
||||
Otherwise, this error most likely indicates a problem with your internet connection, and you simply need to try running palera1n again.
|
||||
|
||||
## Filza crashing on launch
|
||||
Install the latest version of Filza from the [TIGI Software repo](https://www.tigisoftware.com/repo). **The version on BigBoss is outdated**. You do not need AutoSign or FilzaFixer anymore.
|
||||
|
||||
## dpkg error: Read-only file system
|
||||
- Open the palera1n loader app
|
||||
- Press the gear icon
|
||||
- Remount R/W
|
||||
|
||||
Then try again.
|
||||
|
||||
## Library not loaded: /usr/lib/libSystem.B.dylib
|
||||
This usually means the fakefs wasn't created properly. It might be left over from a restore. [Restore rootfs](https://ios.cfw.guide/removing-palera1n/) and try jailbreaking again.
|
||||
|
||||
## Stuck at `waiting for network`
|
||||
This is usually caused by a network issue.
|
||||
|
||||
1. Make sure you're on the latest commit (`git pull`)
|
||||
2. Make sure you can access [this site](https://static.palera.in/)
|
||||
|
||||
If you can access it but the script still doesn't work, your network may be unstable or certain outgoing requests may be blocked. If you cannot access it, this may mean that your network is blocking it, or it's currently down.
|
||||
|
||||
## No space left on device
|
||||
This means that either your iDevice or your computer does not have enough storage.
|
||||
|
||||
If you're live booting Linux and have a low amount of RAM, follow [this](#killed-issue-not-killed-9).
|
||||
|
||||
If you're using semi-tethered and have less than 10GB available on the iDevice, this may be the issue. Please [restore rootfs](https://ios.cfw.guide/removing-palera1n/) and clear some space on your device. Usually if this is the issue, the console is spammed many times with `No space left on device` or `File or directory not found.`
|
||||
|
||||
## Found the USB handle followed by an error occurred
|
||||
This will happen if the device is in a bad DFU state, which could randomly happen, or if you held the 2nd DFU button for too long (volume down on iPhone X, for example).
|
||||
|
||||
Reboot the device and rerun the script, and make sure to follow the DFU helper exactly, and let go as soon as it says it found the device in DFU.
|
||||
|
||||
## pip error: legacy-install-failure
|
||||
- **Ubuntu/Debian**
|
||||
- `sudo apt install python3-dev`
|
||||
- **Fedora**
|
||||
- `sudo dnf install python3-devel`
|
||||
- **openSUSE**
|
||||
- `sudo zypper install python3-devel`
|
||||
- **macOS**
|
||||
- Install the Xcode Command Line Tools by running
|
||||
- `xcode-select --install`
|
||||
|
||||
- If it still doesn't work, try this command:
|
||||
- `ARCHFLAGS="-arch $(uname -m)" python3 -m pip install --compile pyimg4`
|
||||
|
||||
<br>
|
||||
|
||||
### If none of these solve your issue, please join the [Discord server](https://dsc.gg/palera1n).
|
||||
@@ -1,105 +1,98 @@
|
||||
<h1 align="center">
|
||||
<img src="https://avatars.githubusercontent.com/u/114239186?s=100&v=4" alt="palera1n logo">
|
||||
<p>palera1n</p>
|
||||
</h1>
|
||||
<h3 align="center">An iOS 15.0-16.2 work-in-progress, (semi-)tethered checkm8 jailbreak.</h3>
|
||||
<p align="center">
|
||||
<strong><a href="CHANGELOG.md">Change Log</a></strong>
|
||||
•
|
||||
<strong><a href="https://dsc.gg/palera1n">Discord</a></strong>
|
||||
•
|
||||
<strong><a href="https://twitter.com/palera1n">Twitter</a></strong>
|
||||
<img align="left" height="120" src="https://cdn.discordapp.com/attachments/1017854329887129611/1073858292159352862/thing.png" alt="palera1n logo" style="float: left;"/>
|
||||
<h3 align="right">An iOS 15.0-16.3 work-in-progress, <br>(semi-)tethered checkm8 jailbreak</h3>
|
||||
|
||||
<p align="right" >
|
||||
<strong><a href="https://ios.cfw.guide/installing-palera1n">Guide</a></strong>
|
||||
•
|
||||
<strong><a href="COMMONISSUES.md">Common Issues</a></strong>
|
||||
•
|
||||
<strong><a href="CHANGELOG.md">Changelog</a></strong>
|
||||
•
|
||||
<strong><a href="https://dsc.gg/palera1n">Discord</a></strong>
|
||||
•
|
||||
<strong><a href="https://twitter.com/palera1n">Twitter</a></strong>
|
||||
</p>
|
||||
<div class="clear"></div>
|
||||
|
||||
# How does it work?
|
||||
It boots the device with multiple patches required. On first run, it'll boot a ramdisk which dumps your onboard blob, creates a fakefs (if using semi tethered), installs the loader app, and patches your kernel.
|
||||
|
||||
# Issues
|
||||
### Need help?
|
||||
If you need help, **please** join our Discord. We disabled issues due to the flood of spam, and difficulty to respond in general. We are much more comfortable on Discord.
|
||||
It boots the device with multiple patches required. On first run, it'll boot a ramdisk which dumps your onboard blob, creates a fakefs (if using semi-tethered), installs the loader app, and patches your kernel.
|
||||
|
||||
Please, please, please, provide necessary info:
|
||||
# Warnings
|
||||
- We are **NOT** responsible for any data loss, or the result of a device being bricked. The user of this program accepts responsibility should something happen to their device. While nothing should happen, jailbreaking has risks in itself. If your device refuses to boot after using palera1n please use `iTunes` or `Finder` to restore iOS (or if you used tethered, use `--restorerootfs` at the end of your palera1n command).
|
||||
|
||||
- iOS version and device (eg. iPhone 7+ 15.1, iPhone 6s 15.3.1)
|
||||
- Computer's OS and version (eg. Ubuntu 22.04, macOS 13.0)
|
||||
- The command you ran
|
||||
- **Full log from the logs folder**
|
||||
- palera1n will never work in VirtualBox, VMware or any virtual machine that doesn't support a PCI passthrough.
|
||||
|
||||
**DO NOT** harass tweak devs if tweaks don't work. Refer to [here](https://github.com/itsnebulalol/ios15-tweaks) for compatiblity.
|
||||
# Requirements
|
||||
- Needs a checkm8 vulnerable iOS device on iOS 15.x or 16.x (`A8` - `A11`)
|
||||
- If you want the device to be semi-tethered, **you will need 5-10GB of space** for the fakefs. This means that 16GB devices cannot be semi-tethered
|
||||
- If you are on `A10(X)`, use [checkp4le](https://github.com/guacaplushy/checkp4le) instead for full SEP functionality (Passcode, TouchID, Apple Pay)
|
||||
- On `A11`, **you must disable your passcode while in the jailbroken state** (on iOS 16, you need to reset your device before proceeding with palera1n `A11`).
|
||||
|
||||
You may join [here](https://dsc.gg/palera1n).
|
||||
- **USB-A** cables are recommended to use, USB-C may have issues with palera1n and getting into DFU mode.
|
||||
|
||||
# Patreons
|
||||
- A Linux or macOS computer
|
||||
- Python 3 must be installed.
|
||||
- AMD CPUs have an issue [with (likely) their USB controllers] that causes them to have a very low success rate with checkm8. It is not recommended that you use them with palera1n.
|
||||
- If your device does not successfully jailbreak, try a computer with an Intel or other CPU
|
||||
|
||||
Thank you so much to our Patreons that make the future development possible! You may sub [here](https://patreon.com/palera1n), if you'd like to.
|
||||
# Still need help?
|
||||
|
||||
<a href="https://github.com/samh06"><img width=64 src="https://user-images.githubusercontent.com/18669106/206333607-881d7ca1-f3bf-4e18-b620-25de0c527315.png"></img></a>
|
||||
<a href="https://havoc.app"><img width=64 src="https://docs.havoc.app/img/standard_icon.png"></img></a>
|
||||
<a href="https://twitter.com/yyyyyy_public"><img width=64 src="https://pbs.twimg.com/profile_images/1429332550112079876/dQQgsURc_400x400.jpg"></img></a>
|
||||
<a href="https://twitter.com/0xSp00kyb0t"><img width=64 src="https://pbs.twimg.com/profile_images/1603601553226620935/1t4yD1bD_400x400.jpg"></img></a>
|
||||
|
||||
# Warning
|
||||
- We are **NOT** responsible for any data loss. The user of this program accepts responsibility should something happen to their device. While nothing should happen, jailbreaking has risks in itself. **If your device is stuck in recovery, please run one of the following:**
|
||||
- futurerestore --exit-recovery
|
||||
- irecovery -n
|
||||
|
||||
# Prerequisites
|
||||
- A checkm8 vulnerable iOS device on iOS 15 or 16 (A8-A11)
|
||||
- The device must be on iOS 15.0-16.2
|
||||
- Linux or macOS computer
|
||||
- Python 3 must be installed.
|
||||
|
||||
### A10 and A11 devices
|
||||
- On A10 and A11, **you must disable your passcode while in the jailbroken state**.
|
||||
- On iOS 16 A10+, if you EVER enabled a passcode on 16, you have to reset through the settings app/restore with a computer
|
||||
- On A10, this can be fixed in the future by implementing blackbird.
|
||||
- On A11, we don't have a SEP exploit yet.
|
||||
|
||||
# How to use?
|
||||
|
||||
A tutorial can be found [here](https://ios.cfw.guide/installing-palera1n).
|
||||
|
||||
# Repos
|
||||
|
||||
### Tweaks mode
|
||||
All repos work when using tweaks mode because it uses normal Procursus and not rootless.
|
||||
|
||||
### Rootless
|
||||
Repos need to be updated for rootless, here are some that work currently:
|
||||
|
||||
- [Mineek's repo](https://mineek.github.io/repo) contains rootless Procursus packages
|
||||
- The official [palera1n repo](https://repo.palera.in) contains miscellaneous packages
|
||||
|
||||
If you want to make a rootless repo, use the official [palera1n repo](https://github.com/palera1n/repo) for reference. Every deb should use the `iphoneos-arm64` architecture, and *nothing* should be on the rootfs. Everything should be in /var/jb.
|
||||
Join the [Support Discord](https://dsc.gg/palera1n) if you need help with palera1n :)
|
||||
|
||||
# Credits
|
||||
<details><summary>palera1n Contributors</summary>
|
||||
<p>
|
||||
|
||||
- [Nathan](https://github.com/verygenericname) for part of palera1n's development.
|
||||
- The ramdisk that dumps blobs, copies files, and duplicates rootfs is a slimmed down version of [SSHRD_Script](https://github.com/verygenericname/SSHRD_Script)
|
||||
- For modified [restored_external](https://github.com/verygenericname/sshrd_SSHRD_Script)
|
||||
- Also helped Mineek getting the kernel up and running and with the patches
|
||||
- Helping with adding multiple device support
|
||||
- Fixing issues relating to camera.. etc by switching to fsboot
|
||||
- [iBoot64Patcher fork](https://github.com/verygenericname/iBoot64Patcher)
|
||||
- [Mineek](https://github.com/mineek) for more part of palera1n's development.
|
||||
- For the patching and booting commands
|
||||
- Adding tweak support
|
||||
- For patchfinders for RELEASE kernels
|
||||
- [Kernel15Patcher](https://github.com/mineek/PongoOS/tree/iOS15/checkra1n/Kernel15Patcher)
|
||||
- [Kernel64Patcher](https://github.com/mineek/Kernel64Patcher)
|
||||
- Work on jbinit, together with [Nick Chan](https://github.com/asdfugil)
|
||||
- [Tom](https://github.com/guacaplushy) for a couple patches and bugfixes
|
||||
- For maintaining [Kernel64Patcher](https://github.com/palera1n/Kernel64Patcher)
|
||||
- [Serena](https://github.com/SerenaKit) for helping with boot ramdisk.
|
||||
- [Nick Chan](https://github.com/asdfugil) general help with patches and iBoot payload stuff
|
||||
- [Dora](https://github.com/dora2-iOS) for iBoot payload and iBootpatcher2
|
||||
- [alexia](https://github.com/0xallie) for the script to help get into DFU
|
||||
|
||||
</details>
|
||||
<details><summary>Other credits for tools used in palera1n</summary>
|
||||
|
||||
- [Nathan](https://github.com/verygenericname)
|
||||
- The ramdisk that dumps blobs, copies files, and duplicates rootfs is a slimmed down version of [SSHRD_Script](https://github.com/verygenericname/SSHRD_Script)
|
||||
- For modified [restored_external](https://github.com/verygenericname/sshrd_SSHRD_Script)
|
||||
- Also helped Mineek getting the kernel up and running and with the patches
|
||||
- Helping with adding multiple device support
|
||||
- Fixing issues relating to camera.. etc by switching to fsboot
|
||||
- [iBoot64Patcher fork](https://github.com/verygenericname/iBoot64Patcher)
|
||||
- [Mineek](https://github.com/mineek)
|
||||
- For the patching and booting commands
|
||||
- Adding tweak support
|
||||
- For patchfinders for RELEASE kernels
|
||||
- [Kernel15Patcher](https://github.com/mineek/PongoOS/tree/iOS15/checkra1n/Kernel15Patcher)
|
||||
- [Kernel64Patcher](https://github.com/mineek/Kernel64Patcher)
|
||||
- [Amy](https://github.com/elihwyma) for the [Pogo](https://github.com/elihwyma/Pogo) app
|
||||
- [checkra1n](https://github.com/checkra1n) for the base of the kpf
|
||||
- [nyuszika7h](https://github.com/nyuszika7h) for the script to help get into DFU
|
||||
- [the Procursus Team](https://github.com/ProcursusTeam) for the amazing [bootstrap](https://github.com/ProcursusTeam/Procursus)
|
||||
- [F121](https://github.com/F121Live) for helping test
|
||||
- [m1sta](https://github.com/m1stadev) for [pyimg4](https://github.com/m1stadev/PyIMG4)
|
||||
- [tihmstar](https://github.com/tihmstar) for [pzb](https://github.com/tihmstar/partialZipBrowser)/original [iBoot64Patcher](https://github.com/tihmstar/iBoot64Patcher)/original [liboffsetfinder64](https://github.com/tihmstar/liboffsetfinder64)/[img4tool](https://github.com/tihmstar/img4tool)
|
||||
- [Tom](https://github.com/guacaplushy) for a couple patches and bugfixes
|
||||
- For maintaining [Kernel64Patcher](https://github.com/palera1n/Kernel64Patcher)
|
||||
- [xerub](https://github.com/xerub) for [img4lib](https://github.com/xerub/img4lib) and [restored_external](https://github.com/xerub/sshrd) in the ramdisk
|
||||
- [Cryptic](https://github.com/Cryptiiiic) for [iBoot64Patcher](https://github.com/Cryptiiiic/iBoot64Patcher) fork, and [liboffsetfinder64](https://github.com/Cryptiiiic/liboffsetfinder64) fork
|
||||
- [libimobiledevice](https://github.com/libimobiledevice) for several tools used in this project (irecovery, ideviceenterrecovery etc), and [nikias](https://github.com/nikias) for keeping it up to date
|
||||
- [Nick Chan](https://github.com/asdfugil) general help with patches and iBoot payload stuff
|
||||
- [Dora](https://github.com/dora2-iOS) for iBoot payload and iBootpatcher2
|
||||
- [Sam Bingner](https://github.com/sbingner) for [Substitute](https://github.com/sbingner/substitute)
|
||||
- [Serena](https://github.com/SerenaKit) for helping with boot ramdisk.
|
||||
</p>
|
||||
</details>
|
||||
|
||||
<br>
|
||||
<p align="center">
|
||||
Thank you so much to our Patreons that make the future development possible! You may sub <a href="https://patreon.com/palera1n">here</a>, if you'd like to.</br>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/samh06"><img width=64 style="border-radius: 25%;" src="https://user-images.githubusercontent.com/18669106/206333607-881d7ca1-f3bf-4e18-b620-25de0c527315.png"></img></a>
|
||||
<a href="https://havoc.app"><img width=64 style="border-radius: 25%;" src="https://docs.havoc.app/img/standard_icon.png"></img></a>
|
||||
<a href="https://twitter.com/yyyyyy_public"><img width=64 style="border-radius: 25%;" src="https://cdn.discordapp.com/attachments/1054239098006683688/1072587455779328040/image.png?size=400"></img></a>
|
||||
<a href="https://twitter.com/0xSp00kyb0t"><img width=64 style="border-radius: 25%;" src="https://pbs.twimg.com/profile_images/1603601553226620935/1t4yD1bD_400x400.jpg"></img></a>
|
||||
<a href="https://chariz.com"><img width=64 src="https://chariz.com/img/favicon.png"></img></a>
|
||||
<a href="https://twitter.com/stars6220"><img width=64 style="border-radius: 25%;" src="https://pbs.twimg.com/profile_images/1621062976982728706/pWVZQ-NO_400x400.jpg"></img></a>
|
||||
<a href="https://github.com/beast9265"><img width=64 style="border-radius: 25%;" src="https://avatars.githubusercontent.com/u/79794946?v=4"></img></a>
|
||||
<a href="https://twitter.com/0x7FF7"><img width=64 style="border-radius: 25%;" src="https://pbs.twimg.com/profile_images/1616888462665306113/AsjJvtyt_400x400.jpg"></img></a>
|
||||
<a href="https://sideloadly.io/"><img width=64 style="border-radius: 25%;" src="https://sideloadly.io/icon.png"></img></a>
|
||||
<a href="https://blog.stevesec.com/"><img width=64 style="border-radius: 25%;" src="https://blog.stevesec.com/img/avatar.jpg"></img></a>
|
||||
</p>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Regular → Executable
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+243
-140
@@ -1,5 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
pushd $(dirname "$0") &> /dev/null
|
||||
|
||||
mkdir -p logs
|
||||
set -e
|
||||
|
||||
@@ -15,12 +17,13 @@ echo "[*] Command ran:`if [ $EUID = 0 ]; then echo " sudo"; fi` ./palera1n.sh $@
|
||||
# =========
|
||||
# Variables
|
||||
# =========
|
||||
ipsw="" # IF YOU WERE TOLD TO PUT A CUSTOM IPSW URL, PUT IT HERE. YOU CAN FIND THEM ON https://appledb.dev
|
||||
version="1.4.1"
|
||||
ipsw=""
|
||||
network_timeout=-1 # seconds; -1 - unlimited
|
||||
version="1.4.2"
|
||||
os=$(uname)
|
||||
dir="$(pwd)/binaries/$os"
|
||||
commit=$(git rev-parse --short HEAD)
|
||||
branch=$(git rev-parse --abbrev-ref HEAD)
|
||||
commit=$(git rev-parse --short HEAD || true)
|
||||
branch=$(git rev-parse --abbrev-ref HEAD || true)
|
||||
max_args=1
|
||||
arg_count=0
|
||||
disk=8
|
||||
@@ -30,18 +33,23 @@ fs=disk0s1s$disk
|
||||
# Functions
|
||||
# =========
|
||||
remote_cmd() {
|
||||
"$dir"/sshpass -p 'alpine' ssh -o StrictHostKeyChecking=no -p2222 root@localhost "$@"
|
||||
"$dir"/sshpass -p 'alpine' ssh -o StrictHostKeyChecking=no -p6413 root@localhost "$@"
|
||||
}
|
||||
|
||||
remote_cp() {
|
||||
"$dir"/sshpass -p 'alpine' scp -o StrictHostKeyChecking=no -P2222 $@
|
||||
"$dir"/sshpass -p 'alpine' scp -o StrictHostKeyChecking=no -P6413 $@
|
||||
}
|
||||
|
||||
step() {
|
||||
rm -f .entered_dfu
|
||||
for i in $(seq "$1" -1 0); do
|
||||
if [ "$(get_device_mode)" = "dfu" ]; then
|
||||
if [[ -e .entered_dfu ]]; then
|
||||
rm -f .entered_dfu
|
||||
break
|
||||
fi
|
||||
if [[ $(get_device_mode) == "dfu" || ($1 == "10" && $(get_device_mode) != "none") ]]; then
|
||||
touch .entered_dfu
|
||||
fi &
|
||||
printf '\r\e[K\e[1;36m%s (%d)' "$2" "$i"
|
||||
sleep 1
|
||||
done
|
||||
@@ -51,7 +59,7 @@ step() {
|
||||
print_help() {
|
||||
cat << EOF
|
||||
Usage: $0 [Options] [ subcommand | iOS version ]
|
||||
iOS 15.0-16.2 jailbreak tool for checkm8 devices
|
||||
iOS 15.0-16.3 jailbreak tool for checkm8 devices
|
||||
|
||||
Options:
|
||||
--help Print this help
|
||||
@@ -62,6 +70,8 @@ Options:
|
||||
--no-baseband Indicate that the device does not have a baseband
|
||||
--restorerootfs Remove the jailbreak (Actually more than restore rootfs)
|
||||
--debug Debug the script
|
||||
--china Enable Mainland China specific workarounds (启用对中国大陆网络环境的替代办法)
|
||||
--ipsw Specify a custom IPSW to use
|
||||
--serial Enable serial output on the device (only needed for testing with a serial cable)
|
||||
|
||||
Subcommands:
|
||||
@@ -102,6 +112,15 @@ parse_opt() {
|
||||
--restorerootfs)
|
||||
restorerootfs=1
|
||||
;;
|
||||
--china)
|
||||
china=1
|
||||
;;
|
||||
--ipsw)
|
||||
ipsw=$2
|
||||
;;
|
||||
--ipsw=*)
|
||||
ipsw=${1#*=}
|
||||
;;
|
||||
--debug)
|
||||
debug=1
|
||||
;;
|
||||
@@ -136,6 +155,8 @@ parse_cmdline() {
|
||||
parse_opt "$arg";
|
||||
elif [ "$arg_count" -lt "$max_args" ]; then
|
||||
parse_arg "$arg";
|
||||
elif [[ $arg == http* ]]; then
|
||||
continue
|
||||
else
|
||||
echo "[-] Too many arguments. Use $0 --help for help.";
|
||||
exit 1;
|
||||
@@ -184,7 +205,8 @@ _reset() {
|
||||
|
||||
get_device_mode() {
|
||||
if [ "$os" = "Darwin" ]; then
|
||||
apples="$(system_profiler SPUSBDataType 2> /dev/null | grep -B1 'Vendor ID: 0x05ac' | grep 'Product ID:' | cut -dx -f2 | cut -d' ' -f1 | tail -r)"
|
||||
sp="$(system_profiler SPUSBDataType 2> /dev/null)"
|
||||
apples="$(printf '%s' "$sp" | grep -B1 'Vendor ID: 0x05ac' | grep 'Product ID:' | cut -dx -f2 | cut -d' ' -f1 | tail -r)"
|
||||
elif [ "$os" = "Linux" ]; then
|
||||
apples="$(lsusb | cut -d' ' -f6 | grep '05ac:' | cut -d: -f2)"
|
||||
fi
|
||||
@@ -228,7 +250,7 @@ get_device_mode() {
|
||||
if [ "$os" = "Linux" ]; then
|
||||
usbserials=$(cat /sys/bus/usb/devices/*/serial)
|
||||
elif [ "$os" = "Darwin" ]; then
|
||||
usbserials=$(system_profiler SPUSBDataType 2> /dev/null | grep 'Serial Number' | cut -d: -f2- | sed 's/ //')
|
||||
usbserials=$(printf '%s' "$sp" | grep 'Serial Number' | cut -d: -f2- | sed 's/ //')
|
||||
fi
|
||||
if grep -qE '(ramdisk tool|SSHRD_Script) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{1,2} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}' <<< "$usbserials"; then
|
||||
device_mode=ramdisk
|
||||
@@ -250,7 +272,13 @@ _wait() {
|
||||
fi
|
||||
}
|
||||
|
||||
dfuhelper_first_try=true
|
||||
_dfuhelper() {
|
||||
if [ "$(get_device_mode)" = "dfu" ]; then
|
||||
echo "[*] Device is already in DFU"
|
||||
return
|
||||
fi
|
||||
|
||||
local step_one;
|
||||
deviceid=$( [ -z "$deviceid" ] && _info normal ProductType || echo $deviceid )
|
||||
if [[ "$1" = 0x801* && "$deviceid" != *"iPad"* ]]; then
|
||||
@@ -258,8 +286,11 @@ _dfuhelper() {
|
||||
else
|
||||
step_one="Hold home + power button"
|
||||
fi
|
||||
echo "[*] Press any key when ready for DFU mode"
|
||||
read -n 1 -s
|
||||
if $dfuhelper_first_try; then
|
||||
echo "[*] Press any key when ready for DFU mode"
|
||||
read -n 1 -s
|
||||
dfuhelper_first_try=false
|
||||
fi
|
||||
step 3 "Get ready"
|
||||
step 4 "$step_one" &
|
||||
sleep 3
|
||||
@@ -274,24 +305,55 @@ _dfuhelper() {
|
||||
|
||||
if [ "$(get_device_mode)" = "dfu" ]; then
|
||||
echo "[*] Device entered DFU!"
|
||||
dfuhelper_first_try=true
|
||||
else
|
||||
echo "[-] Device did not enter DFU mode, rerun the script and try again"
|
||||
echo "[-] Device did not enter DFU mode"
|
||||
return -1
|
||||
fi
|
||||
}
|
||||
|
||||
function _wait_for() {
|
||||
timeout=$1
|
||||
shift 1
|
||||
until [ $timeout -eq 0 ] || ("$@" &> /dev/null); do
|
||||
sleep 1
|
||||
timeout=$(( timeout - 1 ))
|
||||
done
|
||||
if [ $timeout -eq 0 ]; then
|
||||
return -1
|
||||
fi
|
||||
}
|
||||
|
||||
function _network() {
|
||||
curl -s -m 1 https://static.palera.in &>/dev/null
|
||||
}
|
||||
|
||||
function _check_network_connection() {
|
||||
if ! _network; then
|
||||
echo "[*] Waiting for network"
|
||||
if ! _wait_for $network_timeout _network; then
|
||||
echo "[-] Network is unreachable. Check your connection and try again"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
_kill_if_running() {
|
||||
if (pgrep -u root -xf "$1" &> /dev/null > /dev/null); then
|
||||
if (pgrep -u root -x "$1" &> /dev/null > /dev/null); then
|
||||
# yes, it's running as root. kill it
|
||||
sudo killall $1
|
||||
sudo killall $1 &> /dev/null
|
||||
else
|
||||
if (pgrep -x "$1" &> /dev/null > /dev/null); then
|
||||
killall $1
|
||||
killall $1 &> /dev/null
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
_exit_handler() {
|
||||
if [ "$os" = "Darwin" ]; then
|
||||
killall -CONT AMPDevicesAgent AMPDeviceDiscoveryAgent MobileDeviceUpdater || true
|
||||
fi
|
||||
|
||||
[ $? -eq 0 ] && exit
|
||||
echo "[-] An error occurred"
|
||||
|
||||
@@ -309,6 +371,21 @@ trap _exit_handler EXIT
|
||||
# Fixes
|
||||
# ===========
|
||||
|
||||
# ============
|
||||
# Start
|
||||
# ============
|
||||
|
||||
echo "palera1n | Version $version-$branch-$commit"
|
||||
echo "Made with ❤ by Nebula, Mineek, Nathan, llsc12, Ploosh, and Nick Chan"
|
||||
echo ""
|
||||
|
||||
version=""
|
||||
parse_cmdline "$@"
|
||||
|
||||
if [ "$debug" = "1" ]; then
|
||||
set -o xtrace
|
||||
fi
|
||||
|
||||
# ============
|
||||
# Dependencies
|
||||
# ============
|
||||
@@ -334,7 +411,10 @@ if [ -e "$dir"/gaster ]; then
|
||||
fi
|
||||
|
||||
if [ ! -e "$dir"/gaster ]; then
|
||||
curl -sLO https://nightly.link/palera1n/gaster/workflows/makefile/main/gaster-"$os".zip
|
||||
echo '[-] gaster not installed. Press any key to install it, or press ctrl + c to cancel'
|
||||
read -n 1 -s
|
||||
_check_network_connection
|
||||
curl -sLO https://static.palera.in/deps/gaster-"$os".zip
|
||||
unzip gaster-"$os".zip
|
||||
mv gaster "$dir"/
|
||||
rm -rf gaster gaster-"$os".zip
|
||||
@@ -344,6 +424,7 @@ fi
|
||||
if ! python3 -c 'import pkgutil; exit(not pkgutil.find_loader("pyimg4"))'; then
|
||||
echo '[-] pyimg4 not installed. Press any key to install it, or press ctrl + c to cancel'
|
||||
read -n 1 -s
|
||||
_check_network_connection
|
||||
python3 -m pip install pyimg4
|
||||
fi
|
||||
|
||||
@@ -352,7 +433,12 @@ fi
|
||||
# ============
|
||||
|
||||
# Update submodules
|
||||
git submodule update --init --recursive
|
||||
if [ "$china" != "1" ]; then
|
||||
git submodule update --init --recursive
|
||||
elif ! [ -f ramdisk/sshrd.sh ]; then
|
||||
curl -LO https://static.palera.in/deps/ramdisk.tgz
|
||||
tar xf ramdisk.tgz
|
||||
fi
|
||||
|
||||
# Re-create work dir if it exists, else, make it
|
||||
if [ -e work ]; then
|
||||
@@ -367,19 +453,8 @@ chmod +x "$dir"/*
|
||||
# xattr -d com.apple.quarantine "$dir"/*
|
||||
#fi
|
||||
|
||||
# ============
|
||||
# Start
|
||||
# ============
|
||||
|
||||
echo "palera1n | Version $version-$branch-$commit"
|
||||
echo "Written by Nebula and Mineek | Some code and ramdisk from Nathan"
|
||||
echo ""
|
||||
|
||||
version=""
|
||||
parse_cmdline "$@"
|
||||
|
||||
if [ "$debug" = "1" ]; then
|
||||
set -o xtrace
|
||||
if [ "$os" = "Darwin" ]; then
|
||||
killall -STOP AMPDevicesAgent AMPDeviceDiscoveryAgent MobileDeviceUpdater || true
|
||||
fi
|
||||
|
||||
if [ "$clean" = "1" ]; then
|
||||
@@ -399,7 +474,7 @@ if [ "$tweaks" = 1 ] && [ ! -e ".tweaksinstalled" ] && [ ! -e ".disclaimeragree"
|
||||
echo "!!! WARNING WARNING WARNING !!!"
|
||||
echo "This flag will add tweak support BUT WILL BE TETHERED."
|
||||
echo "THIS ALSO MEANS THAT YOU'LL NEED A PC EVERY TIME TO BOOT."
|
||||
echo "THIS WORKS ON 15.0-16.2"
|
||||
echo "THIS WORKS ON 15.0-16.3"
|
||||
echo "DO NOT GET ANGRY AT US IF YOUR DEVICE IS BORKED, IT'S YOUR OWN FAULT AND WE WARNED YOU"
|
||||
echo "DO YOU UNDERSTAND? TYPE 'Yes, do as I say' TO CONTINUE"
|
||||
read -r answer
|
||||
@@ -421,100 +496,114 @@ if [ "$tweaks" = 1 ] && [ ! -e ".tweaksinstalled" ] && [ ! -e ".disclaimeragree"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Get device's iOS version from ideviceinfo if in normal mode
|
||||
echo "[*] Waiting for devices"
|
||||
while [ "$(get_device_mode)" = "none" ]; do
|
||||
sleep 1;
|
||||
done
|
||||
echo $(echo "[*] Detected $(get_device_mode) mode device" | sed 's/dfu/DFU/')
|
||||
function _wait_for_device() {
|
||||
# Get device's iOS version from ideviceinfo if in normal mode
|
||||
echo "[*] Waiting for devices"
|
||||
while [ "$(get_device_mode)" = "none" ]; do
|
||||
sleep 1;
|
||||
done
|
||||
echo $(echo "[*] Detected $(get_device_mode) mode device" | sed 's/dfu/DFU/')
|
||||
|
||||
if grep -E 'pongo|checkra1n_stage2|diag' <<< "$(get_device_mode)"; then
|
||||
echo "[-] Detected device in unsupported mode '$(get_device_mode)'"
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
if [ "$(get_device_mode)" != "normal" ] && [ -z "$version" ] && [ "$dfuhelper" != "1" ]; then
|
||||
echo "[-] You must pass the version your device is on when not starting from normal mode"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$(get_device_mode)" = "ramdisk" ]; then
|
||||
# If a device is in ramdisk mode, perhaps iproxy is still running?
|
||||
_kill_if_running iproxy
|
||||
echo "[*] Rebooting device in SSH Ramdisk"
|
||||
if [ "$os" = 'Linux' ]; then
|
||||
sudo "$dir"/iproxy 2222 22 &
|
||||
else
|
||||
"$dir"/iproxy 2222 22 &
|
||||
if grep -E 'pongo|checkra1n_stage2|diag' <<< "$(get_device_mode)"; then
|
||||
echo "[-] Detected device in unsupported mode '$(get_device_mode)'"
|
||||
exit 1;
|
||||
fi
|
||||
sleep 2
|
||||
remote_cmd "/usr/sbin/nvram auto-boot=false"
|
||||
remote_cmd "/sbin/reboot"
|
||||
_kill_if_running iproxy
|
||||
_wait recovery
|
||||
fi
|
||||
|
||||
if [ "$(get_device_mode)" = "normal" ]; then
|
||||
version=${version:-$(_info normal ProductVersion)}
|
||||
arch=$(_info normal CPUArchitecture)
|
||||
if [ "$arch" = "arm64e" ]; then
|
||||
if [ "$(get_device_mode)" != "normal" ] && [ -z "$version" ] && [ "$dfuhelper" != "1" ]; then
|
||||
echo "[-] You must pass the version your device is on when not starting from normal mode"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$(get_device_mode)" = "ramdisk" ]; then
|
||||
# If a device is in ramdisk mode, perhaps iproxy is still running?
|
||||
_kill_if_running iproxy
|
||||
echo "[*] Rebooting device in SSH Ramdisk"
|
||||
if [ "$os" = 'Linux' ]; then
|
||||
sudo "$dir"/iproxy 6413 22 >/dev/null &
|
||||
else
|
||||
"$dir"/iproxy 6413 22 >/dev/null &
|
||||
fi
|
||||
sleep 2
|
||||
remote_cmd "/usr/sbin/nvram auto-boot=false"
|
||||
remote_cmd "/sbin/reboot"
|
||||
_kill_if_running iproxy
|
||||
_wait recovery
|
||||
fi
|
||||
|
||||
if [ "$(get_device_mode)" = "normal" ]; then
|
||||
version=${version:-$(_info normal ProductVersion)}
|
||||
arch=$(_info normal CPUArchitecture)
|
||||
if [ "$arch" = "arm64e" ]; then
|
||||
echo "[-] palera1n doesn't, and never will, work on non-checkm8 devices"
|
||||
exit
|
||||
fi
|
||||
echo "Hello, $(_info normal ProductType) on $version!"
|
||||
|
||||
echo "[*] Switching device into recovery mode..."
|
||||
"$dir"/ideviceenterrecovery $(_info normal UniqueDeviceID)
|
||||
_wait recovery
|
||||
fi
|
||||
|
||||
# Grab more info
|
||||
echo "[*] Getting device info..."
|
||||
cpid=$(_info recovery CPID)
|
||||
model=$(_info recovery MODEL)
|
||||
deviceid=$(_info recovery PRODUCT)
|
||||
|
||||
if (( 0x8020 <= cpid )) && (( cpid < 0x8720 )); then
|
||||
echo "[-] palera1n doesn't, and never will, work on non-checkm8 devices"
|
||||
exit
|
||||
fi
|
||||
echo "Hello, $(_info normal ProductType) on $version!"
|
||||
|
||||
echo "[*] Switching device into recovery mode..."
|
||||
"$dir"/ideviceenterrecovery $(_info normal UniqueDeviceID)
|
||||
_wait recovery
|
||||
fi
|
||||
if [ "$dfuhelper" = "1" ]; then
|
||||
echo "[*] Running DFU helper"
|
||||
_dfuhelper "$cpid" || {
|
||||
echo "[-] Failed to enter DFU mode, trying again"
|
||||
sleep 3
|
||||
_wait_for_device
|
||||
}
|
||||
exit
|
||||
fi
|
||||
|
||||
# Grab more info
|
||||
echo "[*] Getting device info..."
|
||||
cpid=$(_info recovery CPID)
|
||||
model=$(_info recovery MODEL)
|
||||
deviceid=$(_info recovery PRODUCT)
|
||||
|
||||
if [ "$dfuhelper" = "1" ]; then
|
||||
echo "[*] Running DFU helper"
|
||||
_dfuhelper "$cpid"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ ! "$ipsw" = "" ]; then
|
||||
ipswurl=$ipsw
|
||||
else
|
||||
#buildid=$(curl -sL https://api.ipsw.me/v4/ipsw/$version | "$dir"/jq '.[0] | .buildid' --raw-output)
|
||||
if [[ "$deviceid" == *"iPad"* ]]; then
|
||||
device_os=iPadOS
|
||||
device=iPad
|
||||
elif [[ "$deviceid" == *"iPod"* ]]; then
|
||||
device_os=iOS
|
||||
device=iPod
|
||||
if [ ! "$ipsw" = "" ]; then
|
||||
ipswurl=$ipsw
|
||||
else
|
||||
device_os=iOS
|
||||
device=iPhone
|
||||
#buildid=$(curl -sL https://api.ipsw.me/v4/ipsw/$version | "$dir"/jq '.[0] | .buildid' --raw-output)
|
||||
if [[ "$deviceid" == *"iPad"* ]]; then
|
||||
device_os=iPadOS
|
||||
device=iPad
|
||||
elif [[ "$deviceid" == *"iPod"* ]]; then
|
||||
device_os=iOS
|
||||
device=iPod
|
||||
else
|
||||
device_os=iOS
|
||||
device=iPhone
|
||||
fi
|
||||
|
||||
_check_network_connection
|
||||
buildid=$(curl -sL https://api.ipsw.me/v4/ipsw/$version | "$dir"/jq '[.[] | select(.identifier | startswith("'$device'")) | .buildid][0]' --raw-output)
|
||||
if [ "$buildid" == "19B75" ]; then
|
||||
buildid=19B74
|
||||
fi
|
||||
ipswurl=$(curl -sL https://api.appledb.dev/ios/$device_os\;$buildid.json | "$dir"/jq -r .devices\[\"$deviceid\"\].ipsw)
|
||||
fi
|
||||
|
||||
buildid=$(curl -sL https://api.ipsw.me/v4/ipsw/$version | "$dir"/jq '[.[] | select(.identifier | startswith("'$device'")) | .buildid][0]' --raw-output)
|
||||
if [ "$buildid" == "19B75" ]; then
|
||||
buildid=19B74
|
||||
if [ "$restorerootfs" = "1" ]; then
|
||||
rm -rf "blobs/"$deviceid"-"$version".der" "boot-$deviceid" work .tweaksinstalled ".fs-$deviceid"
|
||||
fi
|
||||
ipswurl=$(curl -sL https://api.appledb.dev/ios/$device_os\;$buildid.json | "$dir"/jq -r .devices\[\"$deviceid\"\].ipsw)
|
||||
fi
|
||||
|
||||
if [ "$restorerootfs" = "1" ]; then
|
||||
rm -rf "blobs/"$deviceid"-"$version".der" "boot-$deviceid" work .tweaksinstalled ".fs-$deviceid"
|
||||
fi
|
||||
|
||||
# Have the user put the device into DFU
|
||||
if [ "$(get_device_mode)" != "dfu" ]; then
|
||||
recovery_fix_auto_boot;
|
||||
_dfuhelper "$cpid" || {
|
||||
echo "[-] failed to enter DFU mode, run palera1n.sh again"
|
||||
exit -1
|
||||
}
|
||||
fi
|
||||
sleep 2
|
||||
# Have the user put the device into DFU
|
||||
if [ "$(get_device_mode)" != "dfu" ]; then
|
||||
recovery_fix_auto_boot;
|
||||
_dfuhelper "$cpid" || {
|
||||
echo "[-] Failed to enter DFU mode, trying again"
|
||||
sleep 3
|
||||
_wait_for_device
|
||||
}
|
||||
fi
|
||||
sleep 2
|
||||
}
|
||||
_wait_for_device
|
||||
|
||||
# ============
|
||||
# Ramdisk
|
||||
@@ -522,7 +611,7 @@ sleep 2
|
||||
|
||||
# Dump blobs, and install pogo if needed
|
||||
if [ -f blobs/"$deviceid"-"$version".der ]; then
|
||||
if [ -f .rd_in_progress ]; then
|
||||
if [ -f .rd_in_progress ] || ! [ -f .fs-"$deviceid" ]; then
|
||||
rm blobs/"$deviceid"-"$version".der
|
||||
fi
|
||||
fi
|
||||
@@ -552,9 +641,9 @@ if [ ! -f blobs/"$deviceid"-"$version".der ]; then
|
||||
|
||||
# Execute the commands once the rd is booted
|
||||
if [ "$os" = 'Linux' ]; then
|
||||
sudo "$dir"/iproxy 2222 22 &
|
||||
sudo "$dir"/iproxy 6413 22 >/dev/null &
|
||||
else
|
||||
"$dir"/iproxy 2222 22 &
|
||||
"$dir"/iproxy 6413 22 >/dev/null &
|
||||
fi
|
||||
|
||||
while ! (remote_cmd "echo connected" &> /dev/null); do
|
||||
@@ -563,7 +652,7 @@ if [ ! -f blobs/"$deviceid"-"$version".der ]; then
|
||||
|
||||
touch .rd_in_progress
|
||||
|
||||
if [ "$tweaks" = "1" ]; then
|
||||
if [ "$tweaks" = "1" ] && [ "$semi_tethered" = "1" ]; then
|
||||
echo "[*] Testing for baseband presence"
|
||||
if [ "$(remote_cmd "/usr/bin/mgask HasBaseband | grep -E 'true|false'")" = "true" ] && [[ "${cpid}" == *"0x700"* ]]; then
|
||||
disk=7
|
||||
@@ -574,18 +663,16 @@ if [ ! -f blobs/"$deviceid"-"$version".der ]; then
|
||||
disk=7
|
||||
fi
|
||||
fi
|
||||
else
|
||||
disk=1
|
||||
fi
|
||||
|
||||
if [ -z "$semi_tethered" ]; then
|
||||
disk=1
|
||||
fi
|
||||
echo "$disk" > .fs-"$deviceid"
|
||||
|
||||
if [[ "$version" == *"16"* ]]; then
|
||||
fs=disk1s$disk
|
||||
else
|
||||
fs=disk0s1s$disk
|
||||
fi
|
||||
|
||||
echo "$disk" > .fs-"$deviceid"
|
||||
if [[ "$version" == *"16"* ]]; then
|
||||
fs=disk1s$disk
|
||||
else
|
||||
fs=disk0s1s$disk
|
||||
fi
|
||||
|
||||
# mount filesystems, no user data partition
|
||||
@@ -596,7 +683,7 @@ if [ ! -f blobs/"$deviceid"-"$version".der ]; then
|
||||
echo "[!] Active file does not exist! Please use SSH to create it"
|
||||
echo " /mnt6/active should contain the name of the UUID in /mnt6"
|
||||
echo " When done, type reboot in the SSH session, then rerun the script"
|
||||
echo " ssh root@localhost -p 2222"
|
||||
echo " ssh root@localhost -p 6413"
|
||||
exit
|
||||
fi
|
||||
active=$(remote_cmd "cat /mnt6/active" 2> /dev/null)
|
||||
@@ -611,7 +698,7 @@ if [ ! -f blobs/"$deviceid"-"$version".der ]; then
|
||||
remote_cmd "/bin/sync"
|
||||
remote_cmd "/usr/sbin/nvram auto-boot=true"
|
||||
rm -f BuildManifest.plist
|
||||
echo "[*] Done! Rebooting your device"
|
||||
echo "[*] Done! Rebooting your device (if it doesn't reboot, you may force reboot)"
|
||||
remote_cmd "/sbin/reboot"
|
||||
exit;
|
||||
fi
|
||||
@@ -652,11 +739,7 @@ if [ ! -f blobs/"$deviceid"-"$version".der ]; then
|
||||
# lets actually patch the kernel
|
||||
echo "[*] Patching the kernel"
|
||||
remote_cmd "rm -f /mnt6/$active/kpf"
|
||||
if [[ "$version" == *"16"* ]]; then
|
||||
remote_cp binaries/Kernel16Patcher.ios root@localhost:/mnt6/$active/kpf
|
||||
else
|
||||
remote_cp binaries/Kernel15Patcher.ios root@localhost:/mnt6/$active/kpf
|
||||
fi
|
||||
remote_cp binaries/kpf.ios root@localhost:/mnt6/$active/kpf
|
||||
remote_cmd "/usr/sbin/chown 0 /mnt6/$active/kpf"
|
||||
remote_cmd "/bin/chmod 755 /mnt6/$active/kpf"
|
||||
|
||||
@@ -670,6 +753,9 @@ if [ ! -f blobs/"$deviceid"-"$version".der ]; then
|
||||
fi
|
||||
sleep 1
|
||||
|
||||
# Checking network connection before downloads
|
||||
_check_network_connection
|
||||
|
||||
# download the kernel
|
||||
echo "[*] Downloading BuildManifest"
|
||||
"$dir"/pzb -g BuildManifest.plist "$ipswurl"
|
||||
@@ -690,7 +776,7 @@ if [ ! -f blobs/"$deviceid"-"$version".der ]; then
|
||||
remote_cp root@localhost:/mnt6/$active/System/Library/Caches/com.apple.kernelcaches/kcache.patched work/
|
||||
if [ "$tweaks" = "1" ]; then
|
||||
if [[ "$version" == *"16"* ]]; then
|
||||
"$dir"/Kernel64Patcher work/kcache.patched work/kcache.patched2 -e -o -u -l -t -h -d
|
||||
"$dir"/Kernel64Patcher work/kcache.patched work/kcache.patched2 -e -o -u -l -h -d
|
||||
else
|
||||
"$dir"/Kernel64Patcher work/kcache.patched work/kcache.patched2 -e -l
|
||||
fi
|
||||
@@ -766,18 +852,22 @@ if [ ! -f blobs/"$deviceid"-"$version".der ]; then
|
||||
remote_cmd "mkdir -p /mnt$di/jbin/binpack /mnt$di/jbin/loader.app"
|
||||
sleep 1
|
||||
|
||||
# Checking network connection before downloads
|
||||
_check_network_connection
|
||||
|
||||
# download loader
|
||||
cd other/rootfs/jbin
|
||||
rm -rf loader.app
|
||||
curl -LO https://nightly.link/palera1n/loader/workflows/build/main/palera1n.zip
|
||||
unzip palera1n.zip -d .
|
||||
echo "[*] Downloading loader"
|
||||
curl -LO https://static.palera.in/artifacts/loader/rootful/palera1n.ipa
|
||||
unzip palera1n.ipa -d .
|
||||
mv Payload/palera1nLoader.app loader.app
|
||||
rm -rf palera1n.zip loader.zip palera1n.ipa Payload
|
||||
|
||||
# download jbinit files
|
||||
rm -f jb.dylib jbinit jbloader launchd
|
||||
curl -L https://nightly.link/palera1n/jbinit/workflows/build/main/rootfs.zip -o rfs.zip
|
||||
echo "[*] Downloading jbinit files"
|
||||
curl -L https://static.palera.in/deps/rootfs.zip -o rfs.zip
|
||||
unzip rfs.zip -d .
|
||||
unzip rootfs.zip -d .
|
||||
rm rfs.zip rootfs.zip
|
||||
@@ -785,6 +875,7 @@ if [ ! -f blobs/"$deviceid"-"$version".der ]; then
|
||||
|
||||
# download binpack
|
||||
mkdir -p other/rootfs/jbin/binpack
|
||||
echo "[*] Downloading binpack"
|
||||
curl -L https://static.palera.in/binpack.tar -o other/rootfs/jbin/binpack/binpack.tar
|
||||
|
||||
sleep 1
|
||||
@@ -830,7 +921,11 @@ if [ ! -f blobs/"$deviceid"-"$version".der ]; then
|
||||
"$dir"/ideviceenterrecovery $(_info normal UniqueDeviceID)
|
||||
fi
|
||||
_wait recovery
|
||||
_dfuhelper "$cpid"
|
||||
_dfuhelper "$cpid" || {
|
||||
echo "[-] Failed to enter DFU mode, trying again"
|
||||
sleep 3
|
||||
_wait_for_device
|
||||
}
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
@@ -872,6 +967,9 @@ if [ ! -f boot-"$deviceid"/ibot.img4 ]; then
|
||||
#"$dir"/img4tool -e -s $(pwd)/blobs/"$deviceid"-"$version".shsh2 -m work/IM4M
|
||||
cd work
|
||||
|
||||
# Checking network connection before downloads
|
||||
_check_network_connection
|
||||
|
||||
# Do payload if on iPhone 7-X
|
||||
if [[ "$deviceid" == iPhone9,[1-4] ]] || [[ "$deviceid" == "iPhone10,"* ]]; then
|
||||
if [[ "$version" == "16.0"* ]] || [[ "$version" == "15"* ]]; then
|
||||
@@ -1007,7 +1105,12 @@ echo "The device should now boot to iOS"
|
||||
echo "When you unlock the device, it will respring about 30 seconds after"
|
||||
echo "If this is your first time jailbreaking, open the new palera1n app, then press Install"
|
||||
echo "Otherwise, press Do All in the settings section of the app"
|
||||
echo "If you have any issues, please join the Discord server and ask for help: https://dsc.gg/palera1n"
|
||||
echo "If you have any issues, please first check the COMMONISSUES.md document for common issues"
|
||||
if [ "$china" != "1" ]; then
|
||||
echo "If that list doesn't solve your issue, join the Discord server and ask for help: https://dsc.gg/palera1n"
|
||||
fi
|
||||
echo "Enjoy!"
|
||||
|
||||
} 2>&1 | tee logs/${log}
|
||||
|
||||
popd &> /dev/null
|
||||
+1
-1
Submodule ramdisk updated: a463d164c0...2cff81b1e9.
Reference in new issue
Block a user